improve commandline parsing more

This commit is contained in:
zeromus 2010-08-15 02:01:47 +00:00
parent 548312eddd
commit 3513be6f7d
3 changed files with 17 additions and 7 deletions

View File

@ -33,9 +33,10 @@
#include "../../types.h" #include "../../types.h"
#include "args.h" #include "args.h"
void ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps) int ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps)
{ {
int y=0; int y=0;
int ret=1;
do do
{ {
@ -47,10 +48,12 @@ void ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps)
} }
if(!strcmp(argv[x],argsps[y].name)) // A match. if(!strcmp(argv[x],argsps[y].name)) // A match.
{ {
//ret++;
if(argsps[y].subs) if(argsps[y].subs)
{ {
if((x+1)>=argc) if((x+1)>=argc)
break; break;
ret++;
if(argsps[y].substype&0x2000) if(argsps[y].substype&0x2000)
{ {
((void (*)(char *))argsps[y].subs)(argv[x+1]); ((void (*)(char *))argsps[y].subs)(argv[x+1]);
@ -86,13 +89,20 @@ void ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps)
} }
y++; y++;
} while(argsps[y].var || argsps[y].subs); } while(argsps[y].var || argsps[y].subs);
return ret;
} }
void ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps) int ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps)
{ {
int x; int x;
for(x=0;x<argc;x++) for(x=0;x<argc;)
ParseEA(x,argc,argv,argsps); {
int temp = ParseEA(x,argc,argv,argsps);
if(temp == 1 && x==argc-1)
return argc-1;
x += temp;
}
return argc;
} }

View File

@ -7,6 +7,6 @@ typedef struct {
int substype; int substype;
} ARGPSTRUCT; } ARGPSTRUCT;
void ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps); int ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps);
#define _DRIVERS_ARGH #define _DRIVERS_ARGH
#endif #endif

View File

@ -72,7 +72,7 @@ char *ParseArgies(int argc, char *argv[])
return(0); return(0);
} }
ParseArguments(argc-1, &argv[1], FCEUArgs); int used = ParseArguments(argc-1, &argv[1], FCEUArgs);
return(argv[argc-1]); return(argv[used+1]);
} }