2 Routines to simplify argument handling
4 Part of the swftools package.
6 Copyright (c) 2001 Matthias Kramm <kramm@quiss.org>
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
27 extern int args_callback_option(char*,char*);
28 extern int args_callback_longoption(char*,char*);
29 extern int args_callback_command(char*,char*);
30 extern void args_callback_usage(char*name);
35 static void processargs(int argn2,char**argv2)
40 args_callback_usage(argv2[0]);
46 if(t<argn2-1) next=argv2[t+1];
53 if(!strcmp(&argv2[t][2],"help"))
55 args_callback_usage(argv2[0]);
58 t+=args_callback_longoption(&argv2[t][2],next);
62 if(strchr("?h",argv2[t][1]))
64 args_callback_usage(argv2[0]);
67 if(argv2[t][1]) // this might be something like e.g. -xvf
76 ret = args_callback_option(buf,&argv2[t][s+1]);
79 t+= args_callback_option(&argv2[t][s], next);
85 else // - usually means "read stdout"
87 t+=args_callback_option(&argv2[t][1],next);
93 t+=args_callback_command(argv2[t],next);
104 static int args_long2shortoption(struct options_t*options, char*name, char*val)
106 char*equal = strchr(name,'=');
111 while(options->shortoption) {
112 if(!strcmp(options->longoption, name)) {
113 char*tmp = (char*)malloc(strlen(options->shortoption)
114 +(equal?strlen(equal)+2:2));
115 strcpy(tmp, options->shortoption);
117 //strcpy(&tmp[strlen(tmp)], equal);
118 int ret = args_callback_option(tmp, equal);
120 fprintf(stderr, "Warning: Option --%s takes no parameter.\n", name);
124 return args_callback_option(tmp,val);
128 fprintf(stderr, "Unknown option: --%s\n", name);
134 /* check whether the value t is in a given range.
135 examples: 3 is in range 1-10: true
136 7 is in range 2-4,6,8-10: false
137 9 is in range 1,2,3-12: true
139 static char is_in_range(int t, char*irange)
148 if(!irange) // no range resembles (-OO,OO)
153 while(*pos == ' ' || *pos == '\r' || *pos == '\n' || *pos == '\t')
157 while(*digits>='0' && *digits<='9')
160 fprintf(stderr, "Error: \"%s\" is not a valid format (digit expected)\n",irange);
164 tmp=*digits;*digits=0;
169 while(*pos == ' ' || *pos == '\r' || *pos == '\n' || *pos == '\t')
172 if(range && last<=t && num>=t)
184 fprintf(stderr, "Error: \"%s\" is not a valid format (too many '-'s)\n",irange);
195 /* if it isn't a '-', we assume it is a seperator like
196 ',', ';', ':', whatever. */