11#include "srxfixup_internal.h"
17int analize_arguments(
const Opttable *dopttable,
int argc,
char **argv)
32 for ( i = 0; dopttable[i].option; i += 1 )
37 memset(opttable, 0, (argc + i) *
sizeof(
Opttable));
38 memcpy(opttable, dopttable, i *
sizeof(
Opttable));
40 nargv = (
char **)__builtin_alloca((argc + 1) *
sizeof(
char *));
41 memset(nargv, 0, (argc + 1) *
sizeof(
char *));
45 for ( argca = argc - 1, argva = argv + 1;; argca -= 1, argva += 1 )
49 for ( i = 0; i < nargc + 1; i += 1 )
53 for ( i = 0; opttable[i].option; i += 1 )
55 if ( opttable[i].vartype ==
'l' )
57 *(
SLink **)opttable[i].var = ring_to_liner(*(
SLink **)opttable[i].var);
65 for ( i = 0; opttable[i].option; i += 1 )
67 if ( opttable[i].havearg == ARG_HAVEARG_UNK3 )
69 if ( !strcmp(opttable[i].option, *argva) )
76 if ( !strncmp(opttable[i].option, *argva, strlen(opttable[i].option)) )
82 if ( !opttable[i].option )
86 if ( opttable[i].havearg != ARG_HAVEARG_NONE && opttable[i].havearg != ARG_HAVEARG_UNK3 )
88 if ( opttable[i].havearg == ARG_HAVEARG_UNK4 || (*argva)[strlen(opttable[i].option)] )
90 opt = &(*argva)[strlen(opttable[i].option)];
99 if ( opttable[i].havearg != ARG_HAVEARG_REQUIRED || opt )
101 switch ( opttable[i].vartype )
105 if ( (*argva)[strlen(opttable[i].option)] )
107 *(uint32_t *)opttable[i].var = strtoul(&(*argva)[strlen(opttable[i].option)], NULL, 16);
111 *(uint32_t *)opttable[i].var = (opttable[i].vartype ==
'f') ? 1 : 0;
117 *(uint32_t *)opttable[i].var = strtoul(opt, 0, 16);
123 for ( otp = igadd; opttable < otp; otp -= 1 )
128 opttable->option = opt;
129 opttable->vartype =
'n';
130 opttable->havearg = ARG_HAVEARG_UNK3;
131 cp = strchr(opttable->option,
':');
138 opttable->havearg = ARG_HAVEARG_UNK4;
141 opttable->havearg = ARG_HAVEARG_REQUIRED;
144 opttable->havearg = ARG_HAVEARG_UNK1;
154 optstr->string = opt;
155 *(
SLink **)opttable[i].var = add_ring_tail(*(
SLink **)opttable[i].var, (
SLink *)optstr);
160 *(
const char **)opttable[i].var = opt;
163 fprintf(stderr,
"internal error\n");
174 nargv[nargc] = *argva;