1%%	options
2
3copyright owner	=	Dirk Krause
4copyright year	=	2015-xxxx
5SPDX-License-Identifier:	BSD-3-Clause
6
7
8
9%%	module
10
11#include "dk4conf.h"
12#include <libdk4c/dk4opt.h>
13#include <libdk4base/dk4strd.h>
14#include <libdk4base/dk4mem.h>
15#include <libdk4maiodd/dk4maidddu.h>
16
17#if DK4_HAVE_ASSERT_H
18#ifndef	ASSERT_H_INCLUDED
19#include <assert.h>
20#define	ASSERT_H_INCLUDED 1
21#endif
22#endif
23
24
25$!trace-include
26
27
28
29int
30dk4opt_get_unsigned(dk4_um_t *dptr, dk4_option_t const *optptr, dk4_er_t *erp)
31{
32  dk4_um_t	 val	= (dk4_um_t)0UL;
33  int		 back	= 0;
34  int		 res	= 0;
35#if	DK4_USE_ASSERT
36	assert(NULL != dptr);
37	assert(NULL != optptr);
38#endif
39  if ((NULL != dptr) && (NULL != optptr)) {
40    if (0 != optptr->found) {
41      switch ((optptr->spec).argtype) {
42        case DK4_OPT_ARG_BOOL: {
43	  if (0 != (optptr->val).b) {
44	    *dptr = (dk4_um_t)1UL;
45	  } else {
46	    *dptr = (dk4_um_t)0UL;
47	  }
48	  back = 1;
49	} break;
50	case DK4_OPT_ARG_SIZE: {
51	  *dptr = (dk4_um_t)((optptr->val).s);
52	  back = 1;
53	} break;
54	case DK4_OPT_ARG_INT: {
55	  if (0 <= (optptr->val).i) {
56	    *dptr = (dk4_um_t)((optptr->val).i);
57	    back = 1;
58	  } else {
59	    dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
60	  }
61	} break;
62	case DK4_OPT_ARG_UNSIGNED: {
63	  *dptr = (optptr->val).u;
64	  back = 1;
65	} break;
66	case DK4_OPT_ARG_STRING: {
67	  if (NULL != (optptr->val).t) {
68	    res = dk4ma_input_dk_dec_dk4_um_t(
69	      &val, (optptr->val).t, NULL, 1, erp
70	    );
71	    if (0 != res) {
72	      *dptr = val;
73	      back = 1;
74	    }
75	  } else {
76	    dk4error_set_simple_error_code(erp, DK4_E_NOT_FOUND);
77	  }
78	} break;
79	default: {
80	  dk4error_set_simple_error_code(erp, DK4_E_SYNTAX);
81	} break;
82      }
83    } else {
84      dk4error_set_simple_error_code(erp, DK4_E_NOT_FOUND);
85    }
86  } else {
87    dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
88  }
89  return back;
90}
91
92