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