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: dk4mai8ddi.ctr
12 */
13 
14 /**	@file dk4mai8ddi.c The dk4mai8ddi 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 <libdk4maio8d/dk4mai8ddi.h>
28 #include <libdk4maio8d/dk4mai8ddu.h>
29 #include <libdk4base/dk4numco.h>
30 #include <libdk4base/dk4str8.h>
31 
32 
33 
34 
35 
36 
37 int
dk4ma_input_c8_dec_dk4_im_t(dk4_im_t * rp,const char * src,const char ** endptr,int atg,dk4_er_t * erp)38 dk4ma_input_c8_dec_dk4_im_t(
39   dk4_im_t	 *rp,
40   const char	 *src,
41   const char	**endptr,
42   int		  atg,
43   dk4_er_t	 *erp
44 )
45 {
46   dk4_um_t	 res;
47   const char	*ep	=	NULL;
48   int		 back	=	0;
49 
50 #if	DK4_USE_ASSERT
51   assert(NULL != rp);
52   assert(NULL != src);
53 #endif
54   if ((NULL != rp) && (NULL != src)) {
55     if ('-' == *src) {
56       if (0 != dk4ma_input_c8_dec_dk4_um_t(&res, ++src, &ep, atg, erp)) {
57         if (((dk4_um_t)(DK4_IM_MAX) + (dk4_um_t)1UL) == res) {
58 	  *rp = DK4_IM_MIN;
59 	  back = 1;
60 	} else {
61 	  if (((dk4_um_t)(DK4_IM_MAX)) >= res) {
62 	    *rp = (dk4_im_t)0L - (dk4_im_t)res;
63 	    back = 1;
64 	  } else {
65 	    dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
66 	  }
67 	}
68       } else {
69       }
70     } else {
71       if ('+' == *src) { src++; }
72       if (0 != dk4ma_input_c8_dec_dk4_um_t(&res, src, &ep, atg, erp)) {
73         if (((dk4_um_t)(DK4_IM_MAX)) >= res) {
74 	  *rp = (dk4_im_t)res;
75 	  back = 1;
76 	} else {
77 	  dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
78 	}
79       } else {
80       }
81     }
82   } else {
83     dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
84   }
85   if (NULL != endptr) { *endptr = ep; }
86 
87   return back;
88 }
89 
90