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: dk4ahd.ctr
12 */
13
14 /** @file dk4ahd.c The dk4ahd module.
15 */
16
17
18 #include "dk4conf.h"
19
20 #if DK4_HAVE_ASSERT_H
21 #ifndef ASSERT_H_INCLUDED
22 #include <assert.h>
23 #define ASSERT_H_INCLUDED 1
24 #endif
25 #endif
26
27 #include <libdk4c/dk4ahd.h>
28 #include <libdk4base/dk4mem.h>
29 #include <libdk4c/dk4edstm.h>
30
31
32
33
34
35
36
37 void
38
dk4ahex_dec_init(dk4_ahex_dec_t * dec,dk4_er_t * erp)39 dk4ahex_dec_init(dk4_ahex_dec_t *dec, dk4_er_t *erp)
40 {
41 #if DK4_USE_ASSERT
42 assert(NULL != dec);
43 #endif
44 if (NULL != dec) {
45 DK4_MEMRES(dec, sizeof(dk4_ahex_dec_t));
46 dec->cpos = 0;
47 dec->obyte = 0x00;
48 } else {
49 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
50 }
51 }
52
53
54
55 int
56
dk4ahex_dec_add(dk4_ahex_dec_t * dec,char tc,dk4_er_t * erp)57 dk4ahex_dec_add(dk4_ahex_dec_t *dec, char tc, dk4_er_t *erp)
58 {
59 int back = DK4_EDSTM_ERROR;
60 #if DK4_USE_ASSERT
61 assert(NULL != dec);
62 #endif
63 if (NULL != dec) {
64 switch (tc) {
65 case ' ' : case '\t' : case '\r' : case '\n' : case 0x00 : case 0x0C : {
66 back = DK4_EDSTM_ACCEPT;
67 } break;
68 case '>' : {
69 back = DK4_EDSTM_STOP;
70 } break;
71 case '0' : {
72 if (0 != dec->cpos) {
73 dec->cpos = 2;
74 } else {
75 dec->obyte = 0x00;
76 dec->cpos = 1;
77 }
78 } break;
79 case '1' : {
80 if (0 != dec->cpos) {
81 dec->obyte |= 0x01; dec->cpos = 2;
82 } else {
83 dec->obyte = 0x10; dec->cpos = 1;
84 }
85 } break;
86 case '2' : {
87 if (0 != dec->cpos) {
88 dec->obyte |= 0x02; dec->cpos = 2;
89 } else {
90 dec->obyte = 0x20; dec->cpos = 1;
91 }
92 } break;
93 case '3' : {
94 if (0 != dec->cpos) {
95 dec->obyte |= 0x03; dec->cpos = 2;
96 } else {
97 dec->obyte = 0x30; dec->cpos = 1;
98 }
99 } break;
100 case '4' : {
101 if (0 != dec->cpos) {
102 dec->obyte |= 0x04; dec->cpos = 2;
103 } else {
104 dec->obyte = 0x40; dec->cpos = 1;
105 }
106 } break;
107 case '5' : {
108 if (0 != dec->cpos) {
109 dec->obyte |= 0x05; dec->cpos = 2;
110 } else {
111 dec->obyte = 0x50; dec->cpos = 1;
112 }
113 } break;
114 case '6' : {
115 if (0 != dec->cpos) {
116 dec->obyte |= 0x06; dec->cpos = 2;
117 } else {
118 dec->obyte = 0x60; dec->cpos = 1;
119 }
120 } break;
121 case '7' : {
122 if (0 != dec->cpos) {
123 dec->obyte |= 0x07; dec->cpos = 2;
124 } else {
125 dec->obyte = 0x70; dec->cpos = 1;
126 }
127 } break;
128 case '8' : {
129 if (0 != dec->cpos) {
130 dec->obyte |= 0x08; dec->cpos = 2;
131 } else {
132 dec->obyte = 0x80; dec->cpos = 1;
133 }
134 } break;
135 case '9' : {
136 if (0 != dec->cpos) {
137 dec->obyte |= 0x09; dec->cpos = 2;
138 } else {
139 dec->obyte = 0x90; dec->cpos = 1;
140 }
141 } break;
142 case 'a' : case 'A' : {
143 if (0 != dec->cpos) {
144 dec->obyte |= 0x0A; dec->cpos = 2;
145 } else {
146 dec->obyte = 0xA0; dec->cpos = 1;
147 }
148 } break;
149 case 'b' : case 'B' : {
150 if (0 != dec->cpos) {
151 dec->obyte |= 0x0B; dec->cpos = 2;
152 } else {
153 dec->obyte = 0xB0; dec->cpos = 1;
154 }
155 } break;
156 case 'c' : case 'C' : {
157 if (0 != dec->cpos) {
158 dec->obyte |= 0x0C; dec->cpos = 2;
159 } else {
160 dec->obyte = 0xC0; dec->cpos = 1;
161 }
162 } break;
163 case 'd' : case 'D' : {
164 if (0 != dec->cpos) {
165 dec->obyte |= 0x0D; dec->cpos = 2;
166 } else {
167 dec->obyte = 0xD0; dec->cpos = 1;
168 }
169 } break;
170 case 'e' : case 'E' : {
171 if (0 != dec->cpos) {
172 dec->obyte |= 0x0E; dec->cpos = 2;
173 } else {
174 dec->obyte = 0xE0; dec->cpos = 1;
175 }
176 } break;
177 case 'f' : case 'F' : {
178 if (0 != dec->cpos) {
179 dec->obyte |= 0x0F; dec->cpos = 2;
180 } else {
181 dec->obyte = 0xF0; dec->cpos = 1;
182 }
183 } break;
184 }
185 if (2 == dec->cpos) {
186 dec->cpos = 0;
187 back = DK4_EDSTM_FINISHED;
188 }
189 } else {
190 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
191 }
192 return back;
193 }
194
195
196
197 int
198
dk4ahex_dec_finish(dk4_ahex_dec_t * dec,dk4_er_t * erp)199 dk4ahex_dec_finish(dk4_ahex_dec_t *dec, dk4_er_t *erp)
200 {
201 int back = DK4_EDSTM_ERROR;
202 #if DK4_USE_ASSERT
203 assert(NULL != dec);
204 #endif
205 if (NULL != dec) {
206 switch (dec->cpos) {
207 case 1: {
208 back = DK4_EDSTM_FINISHED;
209 } break;
210 default : {
211 back = DK4_EDSTM_ACCEPT;
212 } break;
213 }
214 } else {
215 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
216 }
217 return back;
218 }
219
220
221
222 unsigned char
223
dk4ahex_dec_output(dk4_ahex_dec_t const * dec,dk4_er_t * erp)224 dk4ahex_dec_output(dk4_ahex_dec_t const *dec, dk4_er_t *erp)
225 {
226 unsigned char back = 0x00;
227 #if DK4_USE_ASSERT
228 assert(NULL != dec);
229 #endif
230 if (NULL != dec) {
231 back = dec->obyte;
232 } else {
233 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
234 }
235 return back;
236 }
237
238