gwenhywfar 5.12.0
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
53FREEPARAM *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
73void Arguments_AddParam(ARGUMENTS *ar, const char *pr)
74{
75 FREEPARAM *curr;
76 FREEPARAM *nfp;
77
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 }
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
118void usage(GWEN_UNUSED const char *prgname)
119{
120 fprintf(stdout, "%s%s",
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
135int 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]);
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 NULL
Definition binreloc.c:300
#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
GWEN_LOGGER_LEVEL logLevel
GWEN_LOGGER_LOGTYPE logType
FREEPARAM * params
const char * param
FREEPARAM * next
#define k_PRG_VERSION_INFO
struct _S_PARAM FREEPARAM
struct _S_ARGS ARGUMENTS
#define RETURNVALUE_PARAM
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)