gwenhywfar 5.12.0
option.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Fri Apr 02 2021
3 copyright : (C) 2021 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14
15#include "gwenbuild/types/option_p.h"
16
19
20#include <gwenhywfar/misc.h>
21
22
23
24
26
27
28
29
30GWB_OPTION *GWB_Option_new(const char *id)
31{
32 GWB_OPTION *option;
33
36
37 option->id=id?strdup(id):NULL;
38 option->aliasList=GWB_KeyValuePair_List_new();
39 option->choiceList=GWEN_StringList_new();
40
41 return option;
42}
43
44
45
47{
48 if (option) {
50 free(option->id);
51 free(option->defaultValue);
52 free(option->definePrefix);
53
54 GWEN_StringList_free(option->choiceList);
55 GWB_KeyValuePair_List_free(option->aliasList);
56
57 GWEN_FREE_OBJECT(option);
58 }
59}
60
61
62
63const char *GWB_Option_GetId(const GWB_OPTION *option)
64{
65 return option->id;
66}
67
68
69
71{
72 return option->optionType;
73}
74
75
76
78{
79 option->optionType=i;
80}
81
82
83
84const char *GWB_Option_GetDefaultValue(const GWB_OPTION *option)
85{
86 return option->defaultValue;
87}
88
89
90
91void GWB_Option_SetDefaultValue(GWB_OPTION *option, const char *s)
92{
93 free(option->defaultValue);
94 option->defaultValue=s?strdup(s):NULL;
95}
96
97
98
99GWB_KEYVALUEPAIR_LIST *GWB_Option_GetAliasList(const GWB_OPTION *option)
100{
101 return option->aliasList;
102}
103
104
105
106void GWB_Option_AddAlias(GWB_OPTION *option, const char *name, const char *value)
107{
108 GWB_KEYVALUEPAIR *kvp;
109
110 kvp=GWB_KeyValuePair_new(name, value);
111 GWB_KeyValuePair_List_Add(kvp, option->aliasList);
112}
113
114
115
116const char *GWB_Option_GetAlias(const GWB_OPTION *option, const char *name)
117{
118 return GWB_KeyValuePair_List_GetValue(option->aliasList, name);
119}
120
121
122
124{
125 return option->choiceList;
126}
127
128
129
131{
132 return (GWEN_StringList_Count(option->choiceList)>0)?1:0;
133}
134
135
136
137int GWB_Option_IsValidChoice(const GWB_OPTION *option, const char *s)
138{
139 if (GWEN_StringList_Count(option->choiceList)==0)
140 return 1;
141 if (GWEN_StringList_HasString(option->choiceList, s))
142 return 1;
143
144 return 0;
145}
146
147
148
149void GWB_Option_AddChoice(GWB_OPTION *option, const char *s)
150{
151 GWEN_StringList_AppendString(option->choiceList, s, 0, 1);
152}
153
154
155
156const char *GWB_Option_GetDefinePrefix(const GWB_OPTION *option)
157{
158 return option->definePrefix;
159}
160
161
162
163void GWB_Option_SetDefinePrefix(GWB_OPTION *option, const char *s)
164{
165 free(option->definePrefix);
166 option->definePrefix=s?strdup(s):NULL;
167}
168
169
170
171
172void GWB_Option_Dump(const GWB_OPTION *option, int indent)
173{
174 int i;
175
176 for(i=0; i<indent; i++)
177 fprintf(stderr, " ");
178 fprintf(stderr, "Option:\n");
179
180 GWBUILD_Debug_PrintValue( "id..........", option->id, indent+2);
181 GWBUILD_Debug_PrintValue( "defaultValue", option->defaultValue, indent+2);
182 GWBUILD_Debug_PrintValue( "definePrefix", option->definePrefix, indent+2);
183 GWBUILD_Debug_PrintKvpList( "aliasList...", option->aliasList, indent+2);
184 GWBUILD_Debug_PrintStringList("choiceList..", option->choiceList, indent+2);
185}
186
187
188
189
190
191const char *GWB_OptionType_toString(int t)
192{
193 switch(t) {
194 case GWB_OptionType_Unknown: return "unknown";
195 case GWB_OptionType_None: return "none";
196 case GWB_OptionType_String: return "string";
197 case GWB_OptionType_StringList: return "stringlist";
198 }
199
200 return "unknown";
201}
202
203
204
206{
207 if (s) {
208 if (strcasecmp(s, "unknown")==0)
210 else if (strcasecmp(s, "none")==0)
211 return GWB_OptionType_None;
212 else if (strcasecmp(s, "string")==0)
214 else if (strcasecmp(s, "stringlist")==0)
216 }
218}
219
220
221
222
223
224
#define NULL
Definition binreloc.c:300
void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent)
Definition gwenbuild.c:251
void GWBUILD_Debug_PrintStringList(const char *sName, const GWEN_STRINGLIST *sl, int indent)
Definition gwenbuild.c:469
void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent)
Definition gwenbuild.c:229
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
const char * GWB_KeyValuePair_List_GetValue(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
#define GWEN_LIST_FINI(t, element)
Definition list1.h:475
#define GWEN_LIST_FUNCTIONS(t, pr)
Definition list1.h:367
#define GWEN_LIST_INIT(t, element)
Definition list1.h:466
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55
GWB_OPTION * GWB_Option_new(const char *id)
Definition option.c:30
const char * GWB_Option_GetId(const GWB_OPTION *option)
Definition option.c:63
void GWB_Option_SetOptionType(GWB_OPTION *option, int i)
Definition option.c:77
const char * GWB_OptionType_toString(int t)
Definition option.c:191
int GWB_Option_GetOptionType(const GWB_OPTION *option)
Definition option.c:70
void GWB_Option_SetDefinePrefix(GWB_OPTION *option, const char *s)
Definition option.c:163
int GWB_OptionType_fromString(const char *s)
Definition option.c:205
void GWB_Option_free(GWB_OPTION *option)
Definition option.c:46
const char * GWB_Option_GetDefinePrefix(const GWB_OPTION *option)
Definition option.c:156
int GWB_Option_IsValidChoice(const GWB_OPTION *option, const char *s)
Definition option.c:137
const char * GWB_Option_GetDefaultValue(const GWB_OPTION *option)
Definition option.c:84
void GWB_Option_Dump(const GWB_OPTION *option, int indent)
Definition option.c:172
void GWB_Option_AddAlias(GWB_OPTION *option, const char *name, const char *value)
Definition option.c:106
void GWB_Option_SetDefaultValue(GWB_OPTION *option, const char *s)
Definition option.c:91
void GWB_Option_AddChoice(GWB_OPTION *option, const char *s)
Definition option.c:149
int GWB_Option_HasChoices(const GWB_OPTION *option)
Definition option.c:130
const char * GWB_Option_GetAlias(const GWB_OPTION *option, const char *name)
Definition option.c:116
GWEN_STRINGLIST * GWB_Option_GetChoiceList(const GWB_OPTION *option)
Definition option.c:123
GWB_KEYVALUEPAIR_LIST * GWB_Option_GetAliasList(const GWB_OPTION *option)
Definition option.c:99
@ GWB_OptionType_String
Definition option.h:24
@ GWB_OptionType_StringList
Definition option.h:25
@ GWB_OptionType_Unknown
Definition option.h:22
@ GWB_OptionType_None
Definition option.h:23
struct GWB_OPTION GWB_OPTION
Definition option.h:17
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition stringlist.c:62
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition stringlist.c:427
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition stringlist.c:245
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
Definition stringlist.c:435
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition stringlist.c:50
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition stringlist.h:56