diff --git a/c02.c b/c02.c index 8a7fab8..27c1935 100644 --- a/c02.c +++ b/c02.c @@ -45,6 +45,7 @@ void init() vrwrtn = FALSE; zpaddr = 0; invasc = FALSE; + mskasc = FALSE; fcase = FALSE; } diff --git a/include.c b/include.c index 7d45462..dc06739 100644 --- a/include.c +++ b/include.c @@ -75,9 +75,10 @@ void pdefin() void pascii() { getwrd(); //Get Pragma Subdirective - if (wordis("INVERT")) { + if (wordis("INVERT")) invasc = TRUE; - } + if (wordis("MASK")) + mskasc = TRUE; else { fprintf(stderr, "Unrecognized option '%s'\n", word); exterr(EXIT_FAILURE); diff --git a/parse.c b/parse.c index 0328529..9d02f97 100644 --- a/parse.c +++ b/parse.c @@ -36,6 +36,7 @@ int isxpre() {return TF(isvpre() || match('-'));} /* Conversion Functions */ char invchr(char c) {return isalpha(c)?(islower(c)?toupper(c):tolower(c)):c;} +char mskchr(char c) {return c | 0x80;} /* if Word is s then return TRUE else return FALSE*/ int wordis(char *s) @@ -268,6 +269,7 @@ int prschr() c = getnxt(); DEBUG("Extracted character %c\n", c); if (invasc) c = invchr(c); + if (mskasc) c = mskchr(c); word[wrdlen++] = c; expect('\''); word[wrdlen++] = '\''; diff --git a/parse.h b/parse.h index 0df06e9..938ef7c 100644 --- a/parse.h +++ b/parse.h @@ -20,6 +20,7 @@ int defcnt; //Number of Definitions Defined int defidx; //Index into Definition Tables int invasc; //Invert ASCII Flag +int mskasc; //Set High Bit Flag int match(char c); //Does Next Character match c int isalph(); //Is Next Character Alphabetic