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 "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 ret=1;
do
{
@ -47,10 +48,12 @@ void ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps)
}
if(!strcmp(argv[x],argsps[y].name)) // A match.
{
//ret++;
if(argsps[y].subs)
{
if((x+1)>=argc)
break;
ret++;
if(argsps[y].substype&0x2000)
{
((void (*)(char *))argsps[y].subs)(argv[x+1]);
@ -86,13 +89,20 @@ void ParseEA(int x, int argc, char *argv[], ARGPSTRUCT *argsps)
}
y++;
} 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;
for(x=0;x<argc;x++)
ParseEA(x,argc,argv,argsps);
for(x=0;x<argc;)
{
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;
} ARGPSTRUCT;
void ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps);
int ParseArguments(int argc, char *argv[], ARGPSTRUCT *argsps);
#define _DRIVERS_ARGH
#endif

View File

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