gwenhywfar  5.10.1
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 
30 GWB_OPTION *GWB_Option_new(const char *id)
31 {
32  GWB_OPTION *option;
33 
34  GWEN_NEW_OBJECT(GWB_OPTION, option);
35  GWEN_LIST_INIT(GWB_OPTION, option);
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) {
49  GWEN_LIST_FINI(GWB_OPTION, 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 
63 const 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 
84 const char *GWB_Option_GetDefaultValue(const GWB_OPTION *option)
85 {
86  return option->defaultValue;
87 }
88 
89 
90 
91 void 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 
99 GWB_KEYVALUEPAIR_LIST *GWB_Option_GetAliasList(const GWB_OPTION *option)
100 {
101  return option->aliasList;
102 }
103 
104 
105 
106 void 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 
116 const 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 
137 int 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 
149 void GWB_Option_AddChoice(GWB_OPTION *option, const char *s)
150 {
151  GWEN_StringList_AppendString(option->choiceList, s, 0, 1);
152 }
153 
154 
155 
156 const char *GWB_Option_GetDefinePrefix(const GWB_OPTION *option)
157 {
158  return option->definePrefix;
159 }
160 
161 
162 
163 void 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 
172 void 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 
191 const 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 
205 int GWB_OptionType_fromString(const char *s)
206 {
207  if (s) {
208  if (strcasecmp(s, "unknown")==0)
209  return GWB_OptionType_Unknown;
210  else if (strcasecmp(s, "none")==0)
211  return GWB_OptionType_None;
212  else if (strcasecmp(s, "string")==0)
213  return GWB_OptionType_String;
214  else if (strcasecmp(s, "stringlist")==0)
216  }
217  return GWB_OptionType_Unknown;
218 }
219 
220 
221 
222 
223 
224 
void GWB_Option_AddAlias(GWB_OPTION *option, const char *name, const char *value)
Definition: option.c:106
int GWB_Option_GetOptionType(const GWB_OPTION *option)
Definition: option.c:70
struct GWB_OPTION GWB_OPTION
Definition: option.h:17
void GWB_Option_AddChoice(GWB_OPTION *option, const char *s)
Definition: option.c:149
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
void GWB_Option_free(GWB_OPTION *option)
Definition: option.c:46
void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent)
Definition: gwenbuild.c:225
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:62
GWEN_STRINGLIST * GWB_Option_GetChoiceList(const GWB_OPTION *option)
Definition: option.c:123
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition: stringlist.c:245
GWB_OPTION * GWB_Option_new(const char *id)
Definition: option.c:30
void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent)
Definition: gwenbuild.c:247
void GWB_Option_SetDefaultValue(GWB_OPTION *option, const char *s)
Definition: option.c:91
const char * GWB_OptionType_toString(int t)
Definition: option.c:191
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
void GWBUILD_Debug_PrintStringList(const char *sName, const GWEN_STRINGLIST *sl, int indent)
Definition: gwenbuild.c:463
int GWB_Option_IsValidChoice(const GWB_OPTION *option, const char *s)
Definition: option.c:137
const char * GWB_Option_GetDefinePrefix(const GWB_OPTION *option)
Definition: option.c:156
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
Definition: keyvaluepair.c:34
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:427
void GWB_Option_SetOptionType(GWB_OPTION *option, int i)
Definition: option.c:77
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
Definition: stringlist.c:435
const char * GWB_Option_GetDefaultValue(const GWB_OPTION *option)
Definition: option.c:84
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
Definition: keyvaluepair.h:19
void GWB_Option_SetDefinePrefix(GWB_OPTION *option, const char *s)
Definition: option.c:163
int GWB_Option_HasChoices(const GWB_OPTION *option)
Definition: option.c:130
const char * GWB_KeyValuePair_List_GetValue(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key)
Definition: keyvaluepair.c:132
void GWB_Option_Dump(const GWB_OPTION *option, int indent)
Definition: option.c:172
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
#define GWEN_LIST_FUNCTIONS(t, pr)
Definition: list1.h:366
const char * GWB_Option_GetAlias(const GWB_OPTION *option, const char *name)
Definition: option.c:116
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:50
GWB_KEYVALUEPAIR_LIST * GWB_Option_GetAliasList(const GWB_OPTION *option)
Definition: option.c:99
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
int GWB_OptionType_fromString(const char *s)
Definition: option.c:205
const char * GWB_Option_GetId(const GWB_OPTION *option)
Definition: option.c:63