gwenhywfar 5.12.0
tools/typemaker/args.c
Go to the documentation of this file.
1/***************************************************************************
2 $RCSfile$
3 -------------------
4 cvs : $Id$
5 begin : Mon Mar 01 2004
6 copyright : (C) 2004 by Martin Preuss
7 email : martin@libchipcard.de
8
9 ***************************************************************************
10 * Please see toplevel file COPYING for license details *
11 ***************************************************************************/
12
13#ifdef HAVE_CONFIG_H
14# include <config.h>
15#endif
16
17/* Internationalization */
18#ifdef ENABLE_NLS
19# include <libintl.h>
20# include <locale.h>
21# define I18N(m) dgettext("gwenhywfar", m)
22# define I18S(m) m
23#else
24# define I18N(m) m
25# define I18S(m) m
26#endif
27
28#include "args.h"
29#include <gwenhywfar/debug.h>
30#include <stdlib.h>
31#include <assert.h>
32#include <string.h>
33
34
35
37{
38 ARGUMENTS *ar;
39
40 ar=(ARGUMENTS *)malloc(sizeof(ARGUMENTS));
41 assert(ar);
42 memset(ar, 0, sizeof(ARGUMENTS));
43 ar->verbous=0;
46 ar->compact=0;
47 return ar;
48}
49
50
51
52FREEPARAM *FreeParam_new(const char *s)
53{
54 FREEPARAM *fr;
55
56 fr=(FREEPARAM *)malloc(sizeof(FREEPARAM));
57 assert(fr);
58 memset(fr, 0, sizeof(FREEPARAM));
59 fr->param=s;
60 return fr;
61}
62
63
65{
66 if (fr)
67 free(fr);
68}
69
70
71
72void Arguments_AddParam(ARGUMENTS *ar, const char *pr)
73{
74 FREEPARAM *curr;
75 FREEPARAM *nfp;
76
78 assert(ar);
79 assert(pr);
80
81 nfp=FreeParam_new(pr);
82
83 curr=ar->params;
84 if (!curr) {
85 ar->params=nfp;
86 }
87 else {
88 /* find last */
89 while (curr->next) {
90 curr=curr->next;
91 } /* while */
92 curr->next=nfp;
93 }
95}
96
97
98
100{
101 if (ar) {
102 FREEPARAM *fr;
103 FREEPARAM *next;
104
105 fr=ar->params;
106 while (fr) {
107 next=fr->next;
108 FreeParam_free(fr);
109 fr=next;
110 } /* while */
111 free(ar);
112 }
113}
114
115
116
117void usage(GWEN_UNUSED const char *prgname)
118{
119 fprintf(stdout, "%s%s",
121 I18N(
122 "-v verbous\n"
123 "--logfile ARG name of the logfile\n"
124 "--logtype ARG log type\n"
125 "--loglevel ARG log level\n"
126 "-d ARG use ARG as domain prefix macro for function declarations\n"
127 "-o ARG name of output file (stdout if omitted)\n"
128 "--compact write a more compact file\n"
129 "-V | --version print version of this tool and exit\n"
130 )
131 );
132}
133
134
135
136int checkArgs(ARGUMENTS *args, int argc, char **argv)
137{
138 int i;
139
140 i=1;
141 while (i<argc) {
142 if (strcmp(argv[i], "--logfile")==0) {
143 i++;
144 if (i>=argc)
145 return RETURNVALUE_PARAM;
146 args->logFile=argv[i];
147 }
148 else if (strcmp(argv[i], "--logtype")==0) {
149 i++;
150 if (i>=argc)
151 return RETURNVALUE_PARAM;
152 args->logType=GWEN_Logger_Name2Logtype(argv[i]);
153 if (args->logType==GWEN_LoggerType_Unknown) {
154 fprintf(stderr,
155 I18N("Unknown log type \"%s\"\n"),
156 argv[i]);
157 return RETURNVALUE_PARAM;
158 }
159 }
160 else if (strcmp(argv[i], "--loglevel")==0) {
161 i++;
162 if (i>=argc)
163 return RETURNVALUE_PARAM;
164 args->logLevel=GWEN_Logger_Name2Level(argv[i]);
166 fprintf(stderr,
167 I18N("Unknown log level \"%s\"\n"),
168 argv[i]);
169 return RETURNVALUE_PARAM;
170 }
171 }
172 else if (strcmp(argv[i], "-o")==0) {
173 i++;
174 if (i>=argc)
175 return RETURNVALUE_PARAM;
176 args->outputFile=argv[i];
177 }
178 else if (strcmp(argv[i], "-d")==0) {
179 i++;
180 if (i>=argc)
181 return RETURNVALUE_PARAM;
182 args->domain=argv[i];
183 }
184 else if (strcmp(argv[i], "--compact")==0) {
185 args->compact=1;
186 }
187 else if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) {
188 usage(argv[0]);
189 return -2;
190 }
191 else if (strcmp(argv[i], "-V")==0 || strcmp(argv[i], "--version")==0) {
192 fprintf(stdout, k_PRG_VERSION_INFO);
193 return -2;
194 }
195 else if (strcmp(argv[i], "-v")==0) {
196 args->verbous=1;
197 }
198 else {
199 // otherwise add param
200 if (argv[i][0]=='-') {
201 fprintf(stderr, I18N("Unknown option \"%s\"\n"), argv[i]);
202 return RETURNVALUE_PARAM;
203 }
204 else
205 Arguments_AddParam(args, argv[i]);
206 }
207 i++;
208 } /* while */
209
210 /* that's it */
211 return 0;
212}
213
214
215
216
217
218
219
#define DBG_LEAVE
Definition debug.h:47
#define DBG_ENTER
Definition debug.h:46
#define GWEN_UNUSED
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
Definition logger.c:767
GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name)
Definition logger.c:697
@ GWEN_LoggerType_Console
Definition logger.h:44
@ GWEN_LoggerType_Unknown
Definition logger.h:49
@ GWEN_LoggerLevel_Unknown
Definition logger.h:75
@ GWEN_LoggerLevel_Notice
Definition logger.h:70
const char * outputFile
const char * domain
GWEN_LOGGER_LEVEL logLevel
GWEN_LOGGER_LOGTYPE logType
FREEPARAM * params
const char * param
FREEPARAM * next
void Arguments_AddParam(ARGUMENTS *ar, const char *pr)
FREEPARAM * FreeParam_new(const char *s)
#define I18N(m)
ARGUMENTS * Arguments_new()
void Arguments_free(ARGUMENTS *ar)
void usage(GWEN_UNUSED const char *prgname)
void FreeParam_free(FREEPARAM *fr)
int checkArgs(ARGUMENTS *args, int argc, char **argv)
#define k_PRG_VERSION_INFO
struct _S_PARAM FREEPARAM
struct _S_ARGS ARGUMENTS
#define RETURNVALUE_PARAM