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