gwenhywfar  4.99.8beta
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  ARGUMENTS *ar;
38 
39  ar=(ARGUMENTS*)malloc(sizeof(ARGUMENTS));
40  assert(ar);
41  memset(ar, 0, sizeof(ARGUMENTS));
42  ar->verbous=0;
45  ar->compact=0;
46  return ar;
47 }
48 
49 
50 
51 FREEPARAM *FreeParam_new(const char *s) {
52  FREEPARAM *fr;
53 
54  fr=(FREEPARAM*)malloc(sizeof(FREEPARAM));
55  assert(fr);
56  memset(fr, 0, sizeof(FREEPARAM));
57  fr->param=s;
58  return fr;
59 }
60 
61 
63  if (fr)
64  free(fr);
65 }
66 
67 
68 
69 void Arguments_AddParam(ARGUMENTS *ar, const char *pr) {
70  FREEPARAM *curr;
71  FREEPARAM *nfp;
72 
73  DBG_ENTER;
74  assert(ar);
75  assert(pr);
76 
77  nfp=FreeParam_new(pr);
78 
79  curr=ar->params;
80  if (!curr) {
81  ar->params=nfp;
82  }
83  else {
84  /* find last */
85  while(curr->next) {
86  curr=curr->next;
87  } /* while */
88  curr->next=nfp;
89  }
90  DBG_LEAVE;
91 }
92 
93 
94 
96  if (ar) {
97  FREEPARAM *fr;
98  FREEPARAM *next;
99 
100  fr=ar->params;
101  while(fr) {
102  next=fr->next;
103  FreeParam_free(fr);
104  fr=next;
105  } /* while */
106  free(ar);
107  }
108 }
109 
110 
111 
112 void usage(const char *prgname) {
113  fprintf(stdout, "%s%s",
114  k_PRG_VERSION_INFO "\n",
115  I18N(
116  "-v verbous\n"
117  "--logfile ARG name of the logfile\n"
118  "--logtype ARG log type\n"
119  "--loglevel ARG log level\n"
120  "-d ARG use ARG as domain prefix macro for function declarations\n"
121  "-o ARG name of output file (stdout if omitted)\n"
122  "--compact write a more compact file\n"
123  "-V | --version print version of this tool and exit\n"
124  )
125  );
126 }
127 
128 
129 
130 int checkArgs(ARGUMENTS *args, int argc, char **argv) {
131  int i;
132 
133  i=1;
134  while (i<argc){
135  if (strcmp(argv[i],"--logfile")==0) {
136  i++;
137  if (i>=argc)
138  return RETURNVALUE_PARAM;
139  args->logFile=argv[i];
140  }
141  else if (strcmp(argv[i],"--logtype")==0) {
142  i++;
143  if (i>=argc)
144  return RETURNVALUE_PARAM;
145  args->logType=GWEN_Logger_Name2Logtype(argv[i]);
146  if (args->logType==GWEN_LoggerType_Unknown) {
147  fprintf(stderr,
148  I18N("Unknown log type \"%s\"\n"),
149  argv[i]);
150  return RETURNVALUE_PARAM;
151  }
152  }
153  else if (strcmp(argv[i],"--loglevel")==0) {
154  i++;
155  if (i>=argc)
156  return RETURNVALUE_PARAM;
157  args->logLevel=GWEN_Logger_Name2Level(argv[i]);
158  if (args->logLevel==GWEN_LoggerLevel_Unknown) {
159  fprintf(stderr,
160  I18N("Unknown log level \"%s\"\n"),
161  argv[i]);
162  return RETURNVALUE_PARAM;
163  }
164  }
165  else if (strcmp(argv[i],"-o")==0) {
166  i++;
167  if (i>=argc)
168  return RETURNVALUE_PARAM;
169  args->outputFile=argv[i];
170  }
171  else if (strcmp(argv[i],"-d")==0) {
172  i++;
173  if (i>=argc)
174  return RETURNVALUE_PARAM;
175  args->domain=argv[i];
176  }
177  else if (strcmp(argv[i],"--compact")==0) {
178  args->compact=1;
179  }
180  else if (strcmp(argv[i],"-h")==0 || strcmp(argv[i],"--help")==0) {
181  usage(argv[0]);
182  return -2;
183  }
184  else if (strcmp(argv[i],"-V")==0 || strcmp(argv[i],"--version")==0) {
185  fprintf(stdout, k_PRG_VERSION_INFO);
186  return -2;
187  }
188  else if (strcmp(argv[i],"-v")==0) {
189  args->verbous=1;
190  }
191  else {
192  // otherwise add param
193  if (argv[i][0]=='-') {
194  fprintf(stderr,I18N("Unknown option \"%s\"\n"),argv[i]);
195  return RETURNVALUE_PARAM;
196  }
197  else
198  Arguments_AddParam(args, argv[i]);
199  }
200  i++;
201  } /* while */
202 
203  /* that's it */
204  return 0;
205 }
206 
207 
208 
209 
210 
211 
212 
#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:669
void FreeParam_free(FREEPARAM *fr)
ARGUMENTS * Arguments_new()
#define I18N(m)
GWEN_LOGGER_LOGTYPE logType
FREEPARAM * next
GWEN_LOGGER_LEVEL logLevel
void usage(const char *prgname)
FREEPARAM * params
#define DBG_ENTER
Definition: debug.h:46
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
Definition: logger.c:736
const char * domain
#define k_PRG_VERSION_INFO
#define RETURNVALUE_PARAM
void Arguments_free(ARGUMENTS *ar)