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