Reapply ancient patch to allow space in spcomp options.
This commit is contained in:
parent
81926ceae2
commit
dd8fa985c1
@ -818,17 +818,24 @@ void set_extension(char *filename,const char *extension,int force)
|
||||
strcat(filename,extension);
|
||||
}
|
||||
|
||||
static const char *option_value(const char *optptr)
|
||||
static const char *option_value(const char *optptr,char **argv,int argc,int *arg)
|
||||
{
|
||||
return (*(optptr+1)=='=' || *(optptr+1)==':') ? optptr+2 : optptr+1;
|
||||
const char *ptr;
|
||||
|
||||
if (*(optptr+1)=='=' || *(optptr+1)==':')
|
||||
ptr=optptr+2;
|
||||
else
|
||||
ptr=optptr+1;
|
||||
|
||||
if (strlen(ptr)==0 && *arg!=argc-1)
|
||||
ptr=argv[++*arg];
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static int toggle_option(const char *optptr, int option)
|
||||
static int toggle_option(const char *optptr,int option)
|
||||
{
|
||||
switch (*option_value(optptr)) {
|
||||
case '\0':
|
||||
option=!option;
|
||||
break;
|
||||
switch ((*(optptr+1)=='=' || *(optptr+1)==':') ? *(optptr+2) : *(optptr+1)) {
|
||||
case '-':
|
||||
option=FALSE;
|
||||
break;
|
||||
@ -866,7 +873,7 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
ptr=&argv[arg][1];
|
||||
switch (*ptr) {
|
||||
case 'A':
|
||||
i=atoi(option_value(ptr));
|
||||
i=atoi(option_value(ptr,argv,argc,&arg));
|
||||
if ((i % sizeof(cell))==0)
|
||||
sc_dataalign=i;
|
||||
else
|
||||
@ -889,11 +896,11 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
break;
|
||||
#endif
|
||||
case 'c':
|
||||
strlcpy(codepage,option_value(ptr),MAXCODEPAGE); /* set name of codepage */
|
||||
strlcpy(codepage,option_value(ptr,argv,argc,&arg),MAXCODEPAGE); /* set name of codepage */
|
||||
break;
|
||||
#if defined dos_setdrive
|
||||
case 'D': /* set active directory */
|
||||
ptr=option_value(ptr);
|
||||
ptr=option_value(ptr,argv,argc,&arg);
|
||||
if (ptr[1]==':')
|
||||
dos_setdrive(toupper(*ptr)-'A'+1); /* set active drive */
|
||||
chdir(ptr);
|
||||
@ -901,7 +908,7 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
#endif
|
||||
#if 0 /* not allowed to change for SourceMod */
|
||||
case 'd':
|
||||
switch (*option_value(ptr)) {
|
||||
switch (*option_value(ptr,argv,argc,&arg)) {
|
||||
case '0':
|
||||
sc_debug=0;
|
||||
break;
|
||||
@ -922,14 +929,14 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
break;
|
||||
#endif
|
||||
case 'e':
|
||||
strlcpy(ename,option_value(ptr),_MAX_PATH); /* set name of error file */
|
||||
strlcpy(ename,option_value(ptr,argv,argc,&arg),_MAX_PATH); /* set name of error file */
|
||||
break;
|
||||
case 'E':
|
||||
sc_warnings_are_errors = true;
|
||||
break;
|
||||
#if defined __WIN32__ || defined _WIN32 || defined _Windows
|
||||
case 'H':
|
||||
hwndFinish=(HWND)atoi(option_value(ptr));
|
||||
hwndFinish=(HWND)atoi(option_value(ptr,argv,argc,&arg));
|
||||
if (!IsWindow(hwndFinish))
|
||||
hwndFinish=(HWND)0;
|
||||
break;
|
||||
@ -938,7 +945,7 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
sc_showincludes = 1;
|
||||
break;
|
||||
case 'i':
|
||||
strlcpy(str,option_value(ptr),sizeof str); /* set name of include directory */
|
||||
strlcpy(str,option_value(ptr,argv,argc,&arg),sizeof str); /* set name of include directory */
|
||||
i=strlen(str);
|
||||
if (i>0) {
|
||||
if (str[i-1]!=DIRSEP_CHAR) {
|
||||
@ -954,21 +961,22 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
sc_listing=TRUE; /* skip second pass & code generation */
|
||||
break;
|
||||
case 'o':
|
||||
strlcpy(oname,option_value(ptr),_MAX_PATH); /* set name of (binary) output file */
|
||||
strlcpy(oname,option_value(ptr,argv,argc,&arg),_MAX_PATH); /* set name of (binary) output file */
|
||||
break;
|
||||
case 'O':
|
||||
pc_optimize=*option_value(ptr) - '0';
|
||||
pc_optimize=*option_value(ptr,argv,argc,&arg) - '0';
|
||||
if (pc_optimize<sOPTIMIZE_NONE || pc_optimize>=sOPTIMIZE_NUMBER || pc_optimize==sOPTIMIZE_NOMACRO)
|
||||
about();
|
||||
break;
|
||||
case 'p':
|
||||
strlcpy(pname,option_value(ptr),_MAX_PATH); /* set name of implicit include file */
|
||||
strlcpy(pname,option_value(ptr,argv,argc,&arg),_MAX_PATH); /* set name of implicit include file */
|
||||
break;
|
||||
#if !defined SC_LIGHT
|
||||
case 'r':
|
||||
strlcpy(rname,option_value(ptr),_MAX_PATH); /* set name of report file */
|
||||
strlcpy(rname,option_value(ptr,argv,argc,&arg),_MAX_PATH); /* set name of report file */
|
||||
sc_makereport=TRUE;
|
||||
if (strlen(rname)>0) {
|
||||
#if 0 /* dead code due to option_value change to allow spaces between option and value */
|
||||
if (strlen(rname)>0) {
|
||||
set_extension(rname,".xml",FALSE);
|
||||
} else if ((name=get_sourcefile(0))!=NULL) {
|
||||
assert(strlen(rname)==0);
|
||||
@ -981,28 +989,29 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
strcpy(rname,ptr);
|
||||
set_extension(rname,".xml",TRUE);
|
||||
} /* if */
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
case 'S':
|
||||
i=atoi(option_value(ptr));
|
||||
i=atoi(option_value(ptr,argv,argc,&arg));
|
||||
if (i>32)
|
||||
pc_stksize=(cell)i; /* stack size has minimum size */
|
||||
else
|
||||
about();
|
||||
break;
|
||||
case 's':
|
||||
skipinput=atoi(option_value(ptr));
|
||||
skipinput=atoi(option_value(ptr,argv,argc,&arg));
|
||||
break;
|
||||
case 't':
|
||||
sc_tabsize=atoi(option_value(ptr));
|
||||
sc_tabsize=atoi(option_value(ptr,argv,argc,&arg));
|
||||
break;
|
||||
case 'v':
|
||||
verbosity= isdigit(*option_value(ptr)) ? atoi(option_value(ptr)) : 2;
|
||||
verbosity= isdigit(*option_value(ptr,argv,argc,&arg)) ? atoi(option_value(ptr,argv,argc,&arg)) : 2;
|
||||
if (sc_asmfile && verbosity>1)
|
||||
verbosity=1;
|
||||
break;
|
||||
case 'w':
|
||||
i=(int)strtol(option_value(ptr),(char **)&ptr,10);
|
||||
i=(int)strtol(option_value(ptr,argv,argc,&arg),(char **)&ptr,10);
|
||||
if (*ptr=='-')
|
||||
pc_enablewarning(i,0);
|
||||
else if (*ptr=='+')
|
||||
@ -1012,13 +1021,13 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
|
||||
break;
|
||||
case 'X':
|
||||
if (*(ptr+1)=='D') {
|
||||
i=atoi(option_value(ptr+1));
|
||||
i=atoi(option_value(ptr+1,argv,argc,&arg));
|
||||
if (i>64)
|
||||
pc_amxram=(cell)i; /* abstract machine data/stack has minimum size */
|
||||
else
|
||||
about();
|
||||
} else {
|
||||
i=atoi(option_value(ptr));
|
||||
i=atoi(option_value(ptr,argv,argc,&arg));
|
||||
if (i>64)
|
||||
pc_amxlimit=(cell)i;/* abstract machine has minimum size */
|
||||
else
|
||||
@ -1247,7 +1256,7 @@ static void setcaption(void)
|
||||
{
|
||||
pc_printf("SourcePawn Compiler %s\n", SOURCEMOD_VERSION);
|
||||
pc_printf("Copyright (c) 1997-2006 ITB CompuPhase\n");
|
||||
pc_printf("Copyright (c) 2004-2014 AlliedModders LLC\n\n");
|
||||
pc_printf("Copyright (c) 2004-2015 AlliedModders LLC\n\n");
|
||||
}
|
||||
|
||||
static void about(void)
|
||||
@ -1288,7 +1297,7 @@ static void about(void)
|
||||
pc_printf(" 2 full optimizations\n");
|
||||
pc_printf(" -p<name> set name of \"prefix\" file\n");
|
||||
#if !defined SC_LIGHT
|
||||
pc_printf(" -r[name] write cross reference report to console or to specified file\n");
|
||||
pc_printf(" -r<name> write cross reference report to console or to specified file\n");
|
||||
#endif
|
||||
pc_printf(" -S<num> stack/heap size in cells (default=%d)\n",(int)pc_stksize);
|
||||
pc_printf(" -s<num> skip lines from the input file\n");
|
||||
@ -1300,7 +1309,7 @@ static void about(void)
|
||||
pc_printf(" -XD<num> abstract machine data/stack size limit in bytes\n");
|
||||
pc_printf(" -\\ use '\\' for escape characters\n");
|
||||
pc_printf(" -^ use '^' for escape characters\n");
|
||||
pc_printf(" -;[+/-] require a semicolon to end each statement (default=%c)\n", sc_needsemicolon ? '+' : '-');
|
||||
pc_printf(" -;<+/-> require a semicolon to end each statement (default=%c)\n", sc_needsemicolon ? '+' : '-');
|
||||
#if 0 /* not allowed in SourceMod */
|
||||
pc_printf(" -([+/-] require parantheses for function invocation (default=%c)\n", optproccall ? '-' : '+');
|
||||
#endif
|
||||
@ -1311,8 +1320,8 @@ static void about(void)
|
||||
pc_printf("equivalent.\n");
|
||||
#endif
|
||||
pc_printf("\nOptions with a value may optionally separate the value from the option letter\n");
|
||||
pc_printf("with a colon (\":\") or an equal sign (\"=\"). That is, the options \"-d0\", \"-d=0\"\n");
|
||||
pc_printf("and \"-d:0\" are all equivalent.\n");
|
||||
pc_printf("with a colon (\":\"), an equal sign (\"=\"), or a space (\" \"). That is, the options \"-d0\", \"-d=0\",\n");
|
||||
pc_printf("\"-d:0\", and \"-d 0\" are all equivalent. \"-;\" is an exception to this and cannot use a space.\n");
|
||||
} /* if */
|
||||
norun = 1;
|
||||
longjmp(errbuf,3); /* user abort */
|
||||
|
Loading…
Reference in New Issue
Block a user