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: dk4rec02.ctr
12 */
13 
14 /**	@file dk4rec02.c The dk4rec02 module.
15 */
16 
17 
18 #include "dk4conf.h"
19 #include <libdk4c/dk4rec02.h>
20 #include <libdk4c/dk4ansi.h>
21 
22 #if	DK4_HAVE_ASSERT_H
23 #ifndef	ASSERT_H_INCLUDED
24 #include <assert.h>
25 #define	ASSERT_H_INCLUDED 1
26 #endif
27 #endif
28 
29 
30 int
dk4recode_ansi_to_ascii(char * dstb,size_t szdstb,const char * src,dk4_er_t * erp)31 dk4recode_ansi_to_ascii(
32   char *dstb, size_t szdstb, const char *src, dk4_er_t *erp
33 )
34 {
35   size_t	 used	=	0;
36   dk4_c32_t	 c32	=	dkC32(0);
37   int		 back	=	0;
38   unsigned char	 uc	=	'\0';
39 #if	DK4_USE_ASSERT
40   assert(NULL != dstb);
41   assert(0 < szdstb);
42   assert(NULL != src);
43 #endif
44   if ((NULL != dstb) && (NULL != src) && (0 < szdstb)) {
45     back = 1;
46     while (('\0' != *src) && (1 == back) && (used < szdstb)) {
47       uc = (unsigned char)(*(src++));
48       if (0 != dk4ansi_decode(&c32, uc)) {
49         if (dkC32(0x00000100) > c32) {
50 	  dstb[used++] = (char)c32;
51 	} else {
52 	  back = 0;
53 	  dk4error_set_elsize_nelem(erp, DK4_E_SYNTAX, 1, used);
54 	}
55       } else {
56         back = 0;
57 	dk4error_set_elsize_nelem(erp, DK4_E_SYNTAX, 1, used);
58       }
59     }
60     if (used < szdstb) {
61       dstb[used] = '\0';
62     } else {
63       dstb[szdstb - 1] = '\0';
64       back = 0;
65       dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL);
66     }
67   } else {
68     dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
69   }
70   return back;
71 }
72 
73 
74