gwenhywfar  5.10.1
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 
52 FREEPARAM *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 
72 void Arguments_AddParam(ARGUMENTS *ar, const char *pr)
73 {
74  FREEPARAM *curr;
75  FREEPARAM *nfp;
76 
77  DBG_ENTER;
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  }
94  DBG_LEAVE;
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 
117 void usage(GWEN_UNUSED const char *prgname)
118 {
119  fprintf(stdout, "%s%s",
120  k_PRG_VERSION_INFO "\n",
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 
136 int 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]);
165  if (args->logLevel==GWEN_LoggerLevel_Unknown) {
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
void Arguments_AddParam(ARGUMENTS *ar, const char *pr)
int checkArgs(ARGUMENTS *args, int argc, char **argv)
const char * outputFile
const char * param
FREEPARAM * FreeParam_new(const char *s)
GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name)
Definition: logger.c:697
void FreeParam_free(FREEPARAM *fr)
void usage(GWEN_UNUSED const char *prgname)
ARGUMENTS * Arguments_new()
#define I18N(m)
GWEN_LOGGER_LOGTYPE logType
FREEPARAM * next
GWEN_LOGGER_LEVEL logLevel
FREEPARAM * params
#define DBG_ENTER
Definition: debug.h:46
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
Definition: logger.c:767
const char * domain
#define k_PRG_VERSION_INFO
#define RETURNVALUE_PARAM
#define GWEN_UNUSED
void Arguments_free(ARGUMENTS *ar)