1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5 
6 /*
7 	WARNING: This file was generated by the dkct program (see
8 	http://dktools.sourceforge.net/ for details).
9 	Changes you make here will be lost if dkct is run again!
10 	You should modify the original source and run dkct on it.
11 	Original source: dk4maowh.ctr
12 */
13 
14 /**	@file dk4maowh.c The dk4maowh module.
15 */
16 
17 
18 
19 #include "dk4conf.h"
20 
21 #if	DK4_HAVE_ASSERT_H
22 #ifndef	ASSERT_H_INCLUDED
23 #include <assert.h>
24 #define	ASSERT_H_INCLUDED 1
25 #endif
26 #endif
27 
28 #include <libdk4maiowh/dk4maowh.h>
29 
30 
31 
32 int
dk4ma_write_wc_hex_unsigned(wchar_t * dptr,size_t sz,dk4_um_t val,size_t padsz,dk4_er_t * erp)33 dk4ma_write_wc_hex_unsigned(
34   wchar_t *dptr, size_t sz, dk4_um_t val, size_t padsz, dk4_er_t *erp
35 )
36 {
37   char		 buf[4*sizeof(dk4_um_t) + 16];	/* Buffer */
38   size_t	 used	=	0;		/* Number of used characters */
39   size_t	 i	=	0;		/* Copy buffer to destination */
40   int		 cc	=	1;		/* Flag: Can continue */
41   int		 err	=	0;		/* Flag: Error occued */
42   int		 back	=	0;		/* Function result */
43 #if	DK4_USE_ASSERT
44   assert(NULL != dptr);
45   assert(0 < sz);
46 #endif
47   if (1 == padsz) { padsz = 2 * sizeof(dk4_um_t); }
48   if ((NULL != dptr) && (0 < sz) && (padsz < sz)) {
49     *dptr = L'\0';
50     do {
51       switch((int)(val % (dk4_um_t)16UL)) {
52         case 0: {
53 	  if(used < sizeof(buf)) { buf[used++] = '0'; } else { err = 1; }
54 	} break;
55 	case 1: {
56 	  if(used < sizeof(buf)) { buf[used++] = '1'; } else { err = 1; }
57 	} break;
58 	case 2: {
59 	  if(used < sizeof(buf)) { buf[used++] = '2'; } else { err = 1; }
60 	} break;
61 	case 3: {
62 	  if(used < sizeof(buf)) { buf[used++] = '3'; } else { err = 1; }
63 	} break;
64 	case 4: {
65 	  if(used < sizeof(buf)) { buf[used++] = '4'; } else { err = 1; }
66 	} break;
67 	case 5: {
68 	  if(used < sizeof(buf)) { buf[used++] = '5'; } else { err = 1; }
69 	} break;
70 	case 6: {
71 	  if(used < sizeof(buf)) { buf[used++] = '6'; } else { err = 1; }
72 	} break;
73 	case 7: {
74 	  if(used < sizeof(buf)) { buf[used++] = '7'; } else { err = 1; }
75 	} break;
76 	case 8: {
77 	  if(used < sizeof(buf)) { buf[used++] = '8'; } else { err = 1; }
78 	} break;
79 	case 9: {
80 	  if(used < sizeof(buf)) { buf[used++] = '9'; } else { err = 1; }
81 	} break;
82 	case 10: {
83 	  if(used < sizeof(buf)) { buf[used++] = 'A'; } else { err = 1; }
84 	} break;
85 	case 11: {
86 	  if(used < sizeof(buf)) { buf[used++] = 'B'; } else { err = 1; }
87 	} break;
88 	case 12: {
89 	  if(used < sizeof(buf)) { buf[used++] = 'C'; } else { err = 1; }
90 	} break;
91 	case 13: {
92 	  if(used < sizeof(buf)) { buf[used++] = 'D'; } else { err = 1; }
93 	} break;
94 	case 14: {
95 	  if(used < sizeof(buf)) { buf[used++] = 'E'; } else { err = 1; }
96 	} break;
97 	case 15: {
98 	  if(used < sizeof(buf)) { buf[used++] = 'F'; } else { err = 1; }
99 	} break;
100       }
101       val = val / (dk4_um_t)16UL;
102       if ((dk4_um_t)0UL == val) { cc = 0; }
103     } while((1 == cc) && (0 == err));
104     if (0 == err) {
105       if (used < sz) {
106         if ((0 < padsz) && (used < padsz)) {
107 	  for (i = 0; i < (padsz - used); i++) {
108 	    dptr[i] = L'0';
109 	  }
110 	  for (i = 0; i < used; i++) {
111 	    dptr[padsz - 1 - i] = (wchar_t)(buf[i]);
112 	  }
113 	  dptr[padsz] = L'\0';
114 	  back = 1;
115 	} else {
116           for (i = 0; i < used; i++) {
117 	    dptr[i] = (wchar_t)(buf[used - 1 - i]);
118 	  }
119 	  dptr[used] = L'\0';
120 	  back = 1;
121 	}
122       } else {
123         dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL);
124       }
125     } else {
126       dk4error_set_simple_error_code(erp, DK4_E_BUG);
127     }
128   } else {
129     dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
130   }
131   return back;
132 }
133 
134 
135 
136 int
dk4ma_write_wc_hex_signed(wchar_t * dptr,size_t sz,dk4_im_t val,size_t padsz,dk4_er_t * erp)137 dk4ma_write_wc_hex_signed(
138   wchar_t *dptr, size_t sz, dk4_im_t val, size_t padsz, dk4_er_t *erp
139 )
140 {
141 #if	DK4_USE_ASSERT
142   assert(NULL != dptr);
143   assert(0 < sz);
144 #endif
145   return (dk4ma_write_wc_hex_unsigned(dptr, sz, (dk4_um_t)val, padsz, erp));
146 }
147 
148