#pragma option

This commit is contained in:
Y_Less 2017-10-26 11:41:33 +02:00
parent f1da832ae9
commit b7692fda79
2 changed files with 28 additions and 5 deletions

View File

@ -1050,7 +1050,8 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
#endif #endif
break; break;
case 'c': case 'c':
strlcpy(codepage,option_value(ptr),MAXCODEPAGE); /* set name of codepage */ if (codepage)
strlcpy(codepage,option_value(ptr),MAXCODEPAGE); /* set name of codepage */
break; break;
case 'D': /* set active directory */ case 'D': /* set active directory */
ptr=option_value(ptr); ptr=option_value(ptr);
@ -1082,7 +1083,8 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
} /* switch */ } /* switch */
break; break;
case 'e': case 'e':
strlcpy(ename,option_value(ptr),_MAX_PATH); /* set name of error file */ if (ename)
strlcpy(ename,option_value(ptr),_MAX_PATH); /* set name of error file */
break; break;
#if defined __WIN32__ || defined _WIN32 || defined _Windows #if defined __WIN32__ || defined _WIN32 || defined _Windows
case 'H': case 'H':
@ -1108,7 +1110,8 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
sc_listing=TRUE; /* skip second pass & code generation */ sc_listing=TRUE; /* skip second pass & code generation */
break; break;
case 'o': case 'o':
strlcpy(oname,option_value(ptr),_MAX_PATH); /* set name of (binary) output file */ if (oname)
strlcpy(oname,option_value(ptr),_MAX_PATH); /* set name of (binary) output file */
break; break;
case 'O': case 'O':
pc_optimize=*option_value(ptr) - '0'; pc_optimize=*option_value(ptr) - '0';
@ -1116,13 +1119,16 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
about(); about();
break; break;
case 'p': case 'p':
strlcpy(pname,option_value(ptr),_MAX_PATH); /* set name of implicit include file */ if (pname)
strlcpy(pname,option_value(ptr),_MAX_PATH); /* set name of implicit include file */
break; break;
case 'R': case 'R':
pc_recursion=toggle_option(ptr,pc_recursion); pc_recursion=toggle_option(ptr,pc_recursion);
break; break;
#if !defined SC_LIGHT #if !defined SC_LIGHT
case 'r': case 'r':
if (!rname)
break;
strlcpy(rname,option_value(ptr),_MAX_PATH); /* set name of report file */ strlcpy(rname,option_value(ptr),_MAX_PATH); /* set name of report file */
sc_makereport=TRUE; sc_makereport=TRUE;
if (strlen(rname)>0) { if (strlen(rname)>0) {
@ -1230,7 +1236,7 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
strlcpy(str,argv[arg],i+1); /* str holds symbol name */ strlcpy(str,argv[arg],i+1); /* str holds symbol name */
i=atoi(ptr+1); i=atoi(ptr+1);
add_builtin_constant(str,i,sGLOBAL,0); add_builtin_constant(str,i,sGLOBAL,0);
} else { } else if (oname) {
strlcpy(str,argv[arg],sizeof(str)-2); /* -2 because default extension is ".p" */ strlcpy(str,argv[arg],sizeof(str)-2); /* -2 because default extension is ".p" */
set_extension(str,".p",FALSE); set_extension(str,".p",FALSE);
insert_sourcefile(str); insert_sourcefile(str);
@ -1261,6 +1267,11 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
} /* for */ } /* for */
} }
void parsesingleoption(char *argv)
{
parseoptions(1, &argv, NULL, NULL, NULL, NULL, NULL);
}
#if !defined SC_LIGHT #if !defined SC_LIGHT
static void parserespf(char *filename,char *oname,char *ename,char *pname, static void parserespf(char *filename,char *oname,char *ename,char *pname,
char *rname,char *codepage) char *rname,char *codepage)

View File

@ -945,6 +945,8 @@ enum {
* Global variables: iflevel, ifstack (altered) * Global variables: iflevel, ifstack (altered)
* lptr (altered) * lptr (altered)
*/ */
void parsesingleoption(char *argv);
static int command(void) static int command(void)
{ {
int tok,ret; int tok,ret;
@ -1268,6 +1270,16 @@ static int command(void)
sym=findconst("__compat",NULL); sym=findconst("__compat",NULL);
assert(sym!=NULL); assert(sym!=NULL);
sym->addr=pc_compat; sym->addr=pc_compat;
} else if (strcmp(str,"option")==0) {
char name[sNAMEMAX+1];
int i;
/* first gather all information, start with the tag name */
while (*lptr<=' ' && *lptr!='\0')
lptr++;
for (i=0; i<sizeof name && *lptr>' '; i++,lptr++)
name[i]=*lptr;
name[i]='\0';
parsesingleoption(name);
} else { } else {
error(207); /* unknown #pragma */ error(207); /* unknown #pragma */
} /* if */ } /* if */