version 1.2, 2000/08/21 08:31:46 |
version 1.8, 2018/03/29 01:32:54 |
|
|
* shall be made on your publication or presentation in any form of the |
* shall be made on your publication or presentation in any form of the |
* results obtained by use of the SOFTWARE. |
* results obtained by use of the SOFTWARE. |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification |
* e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification |
* for such modification or the source code of the modified part of the |
* for such modification or the source code of the modified part of the |
* SOFTWARE. |
* SOFTWARE. |
* |
* |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/parse/cpp.c,v 1.1.1.1 1999/12/03 07:39:12 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/parse/cpp.c,v 1.7 2015/08/14 13:51:56 fujimoto Exp $ |
*/ |
*/ |
#if defined(__MWERKS__) |
|
#define THINK_C |
|
#endif |
|
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <setjmp.h> |
#include <setjmp.h> |
|
|
#include "unctrl.h" |
#include "unctrl.h" |
#endif |
#endif |
|
|
#if defined(THINK_C) |
|
#include <string.h> |
|
|
|
int define(char *,int,unsigned char *,int); |
|
void Bcopy(char *,char *,int); |
|
#endif |
|
|
|
|
|
#include "cpp.h" |
#include "cpp.h" |
|
|
char *init_accum(void) |
char *init_accum(void) |
Line 339 void read_formals(void) |
|
Line 328 void read_formals(void) |
|
nargs ++; |
nargs ++; |
c = getnonspace(); |
c = getnonspace(); |
if (c == ')') |
if (c == ')') |
{ return; |
{ return; |
} |
} |
else if (c != ',') |
else if (c != ',') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"invalid macro parameter delimiter\n"); |
fprintf(stderr,"invalid macro parameter delimiter\n"); |
} |
} |
} |
} |
else |
else |
{ c = Get(); |
{ c = Get(); |
if ((c == ')') && (nargs == 0)) |
if ((c == ')') && (nargs == 0)) |
{ return; |
{ return; |
} |
} |
else |
else |
{ Push(c); |
{ Push(c); |
} |
} |
err_head(); |
err_head(); |
fprintf(stderr,"missing/illegal macro parameter\n"); |
fprintf(stderr,"missing/illegal macro parameter\n"); |
while (1) |
while (1) |
{ c = Get(); |
{ c = Get(); |
if (c == ')') |
if (c == ')') |
{ return; |
{ return; |
} |
|
if (isbsymchar(c)) |
|
{ Push(c); |
|
break; |
|
} |
|
} |
|
} |
} |
|
if (isbsymchar(c)) |
|
{ Push(c); |
|
break; |
|
} |
} |
} |
|
} |
|
} |
} |
} |
|
|
void do_define(int sharp, int redef) |
void do_define(int sharp, int redef) |
Line 387 void do_define(int sharp, int redef) |
|
Line 376 void do_define(int sharp, int redef) |
|
{ char e = '\0'; |
{ char e = '\0'; |
if (sharp) |
if (sharp) |
{ while (1) |
{ while (1) |
{ c = e; |
{ c = e; |
e = Get(); |
e = Get(); |
if (e == '\n') |
if (e == '\n') |
{ if (c == '\\') |
{ if (c == '\\') |
{ maybe_print('\n'); |
{ maybe_print('\n'); |
} |
} |
else |
else |
{ break; |
{ break; |
} |
} |
} |
|
} |
|
} |
} |
|
} |
|
} |
else |
else |
{ do |
{ do |
{ c = e; |
{ c = e; |
e = Get(); |
e = Get(); |
} while ((c != '@') || (e == '@')); |
} while ((c != '@') || (e == '@')); |
Push(e); |
Push(e); |
} |
} |
return; |
return; |
Line 440 void do_define(int sharp, int redef) |
|
Line 429 void do_define(int sharp, int redef) |
|
{ while (1) |
{ while (1) |
{ c = Get(); |
{ c = Get(); |
if (quoted && (c == '\n')) |
if (quoted && (c == '\n')) |
{ quoted = 0; |
{ quoted = 0; |
maybe_print('\n'); |
maybe_print('\n'); |
} |
} |
else if (quoted) |
else if (quoted) |
{ accum_char(acc,'\\'); |
{ accum_char(acc,'\\'); |
accum_char(acc,c); |
accum_char(acc,c); |
quoted = 0; |
quoted = 0; |
} |
} |
else if (c == '/') |
else if (c == '/') |
{ char d = Get(); |
{ char d = Get(); |
accum_char(acc,'/'); |
accum_char(acc,'/'); |
if (d == '*') |
if (d == '*') |
{ accum_char(acc,'*'); |
{ accum_char(acc,'*'); |
incomment = 1; |
incomment = 1; |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
} |
} |
} |
} |
else if (incomment) |
else if (incomment) |
{ accum_char(acc,c); |
{ accum_char(acc,c); |
if (c == '*') |
if (c == '*') |
{ char d = Get(); |
{ char d = Get(); |
if (d == '/') |
if (d == '/') |
{ accum_char(acc,'/'); |
{ accum_char(acc,'/'); |
incomment = 0; |
incomment = 0; |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
} |
} |
} |
} |
else if (c == '\n') |
else if (c == '\n') |
{ maybe_print('\n'); |
{ maybe_print('\n'); |
} |
} |
} |
} |
else if (c == '\\') |
else if (c == '\\') |
{ quoted = 1; |
{ quoted = 1; |
} |
} |
else if (c == '\n') |
else if (c == '\n') |
{ break; |
{ break; |
} |
} |
else |
else |
{ accum_char(acc,c); |
{ accum_char(acc,c); |
} |
} |
} |
} |
} |
} |
else |
else |
{ while (1) |
{ while (1) |
{ c = Get(); |
{ c = Get(); |
if (quoted && (c == '@')) |
if (quoted && (c == '@')) |
{ accum_char(acc,'@'); |
{ accum_char(acc,'@'); |
quoted = 0; |
quoted = 0; |
} |
} |
else if (quoted) |
else if (quoted) |
{ Push(c); |
{ Push(c); |
break; |
break; |
} |
} |
else if (c == '/') |
else if (c == '/') |
{ char d = Get(); |
{ char d = Get(); |
accum_char(acc,'/'); |
accum_char(acc,'/'); |
if (d == '*') |
if (d == '*') |
{ accum_char(acc,'*'); |
{ accum_char(acc,'*'); |
incomment = 1; |
incomment = 1; |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
} |
} |
} |
} |
else if (incomment) |
else if (incomment) |
{ accum_char(acc,c); |
{ accum_char(acc,c); |
if (c == '*') |
if (c == '*') |
{ char d = Get(); |
{ char d = Get(); |
if (d == '/') |
if (d == '/') |
{ accum_char(acc,'/'); |
{ accum_char(acc,'/'); |
incomment = 0; |
incomment = 0; |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
} |
} |
} |
} |
else if (c == '\n') |
else if (c == '\n') |
{ maybe_print('\n'); |
{ maybe_print('\n'); |
} |
} |
} |
} |
else if (c == '@') |
else if (c == '@') |
{ quoted = 1; |
{ quoted = 1; |
} |
} |
else |
else |
{ if (c == '\n') |
{ if (c == '\n') |
{ maybe_print('\n'); |
{ maybe_print('\n'); |
} |
|
accum_char(acc,c); |
|
} |
|
} |
} |
|
accum_char(acc,c); |
} |
} |
|
} |
|
} |
repl = (unsigned char *) accum_result(acc); |
repl = (unsigned char *) accum_result(acc); |
f = repl; |
f = repl; |
t = repl; |
t = repl; |
Line 544 void do_define(int sharp, int redef) |
|
Line 533 void do_define(int sharp, int redef) |
|
c = *g; |
c = *g; |
*g = '\0'; |
*g = '\0'; |
for (i=0;i<nargs;i++) |
for (i=0;i<nargs;i++) |
{ if (strcmp((char *)f,argnames[i]) == 0) |
{ if (strcmp((char *)f,argnames[i]) == 0) |
{ break; |
{ break; |
} |
} |
} |
} |
if (i < nargs) |
if (i < nargs) |
{ *t++ = 0x80 | i; |
{ *t++ = 0x80 | i; |
f = g; |
f = g; |
} |
} |
else |
else |
{ while (*t++ = *f++) ; |
{ while (*t++ = *f++) ; |
f --; |
f --; |
t --; |
t --; |
} |
} |
*g = c; |
*g = c; |
} |
} |
else if ((f[0] == '/') && (f[1] == '*')) |
else if ((f[0] == '/') && (f[1] == '*')) |
Line 601 void do_dump(void) |
|
Line 590 void do_dump(void) |
|
extern int fstackdepth; |
extern int fstackdepth; |
|
|
fprintf(stderr, |
fprintf(stderr, |
"\n\n\tDump of definition table (%d entries in %d buckets):\n\n", |
"\n\n\tDump of definition table (%d entries in %d buckets):\n\n", |
n_in_table,symtbl_size); |
n_in_table,symtbl_size); |
for (i=0;i<symtbl_size;i++) |
for (i=0;i<symtbl_size;i++) |
{ fprintf(stderr,"Bucket %d:\n",i); |
{ fprintf(stderr,"Bucket %d:\n",i); |
for (d=symtbl[i];d;d=d->link) |
for (d=symtbl[i];d;d=d->link) |
Line 744 void read_actuals(DEF *d) |
|
Line 733 void read_actuals(DEF *d) |
|
c = Get(); |
c = Get(); |
accum_char(acc,c); |
accum_char(acc,c); |
if (comment) |
if (comment) |
{ if ((last == '*') && (c == '/')) |
{ if ((last == '*') && (c == '/')) |
{ comment = 0; |
{ comment = 0; |
} |
} |
} |
} |
else |
else |
{ if (backslash) |
{ if (backslash) |
{ backslash = 0; |
{ backslash = 0; |
} |
|
else if (quote && (c == quote)) |
|
{ quote = 0; |
|
} |
|
else if (c == '\\') |
|
{ backslash = 1; |
|
} |
|
else if (quote) |
|
{ |
|
} |
|
else if ((last == '/') && (c == '*')) |
|
{ comment = 1; |
|
} |
|
else if ((c == '\'') || (c == '"')) |
|
{ quote = c; |
|
} |
|
else if (c == '(') |
|
{ pc ++; |
|
} |
|
else if (c == ')') |
|
{ if (pc > 0) |
|
{ pc --; |
|
} |
|
else |
|
{ accum_regret(acc); |
|
break; |
|
} |
|
} |
|
else if ((c == ',') && (pc == 0)) |
|
{ accum_regret(acc); |
|
break; |
|
} |
|
} |
|
} |
} |
|
else if (quote && (c == quote)) |
|
{ quote = 0; |
|
} |
|
else if (c == '\\') |
|
{ backslash = 1; |
|
} |
|
else if (quote) |
|
{ |
|
} |
|
else if ((last == '/') && (c == '*')) |
|
{ comment = 1; |
|
} |
|
else if ((c == '\'') || (c == '"')) |
|
{ quote = c; |
|
} |
|
else if (c == '(') |
|
{ pc ++; |
|
} |
|
else if (c == ')') |
|
{ if (pc > 0) |
|
{ pc --; |
|
} |
|
else |
|
{ accum_regret(acc); |
|
break; |
|
} |
|
} |
|
else if ((c == ',') && (pc == 0)) |
|
{ accum_regret(acc); |
|
break; |
|
} |
|
} |
|
} |
if (i < n) |
if (i < n) |
{ actuals[i] = accum_result(acc); |
{ actuals[i] = accum_result(acc); |
actlens[i] = strlen(actuals[i]); |
actlens[i] = strlen(actuals[i]); |
Line 834 void expand_def(DEF *d) |
|
Line 823 void expand_def(DEF *d) |
|
else if (d->nargs > 0) |
else if (d->nargs > 0) |
{ int i; |
{ int i; |
for (i=0;i<d->nargs;i++) |
for (i=0;i<d->nargs;i++) |
{ outputc((char)(i?',':'(')); |
{ outputc((char)(i?',':'(')); |
outputs(actuals[i]); |
outputs(actuals[i]); |
} |
} |
outputc(')'); |
outputc(')'); |
} |
} |
outputs("-->"); |
outputs("-->"); |
Line 853 void expand_def(DEF *d) |
|
Line 842 void expand_def(DEF *d) |
|
int i; |
int i; |
i = *cp & ~0x80; |
i = *cp & ~0x80; |
for (dp=actuals[i];*dp;dp++) |
for (dp=actuals[i];*dp;dp++) |
{ accum_char(result,*dp); |
{ accum_char(result,*dp); |
} |
} |
} |
} |
else |
else |
{ accum_char(result,*cp); |
{ accum_char(result,*cp); |
Line 878 void expand_def(DEF *d) |
|
Line 867 void expand_def(DEF *d) |
|
{ if (!incomm && (last == '/') && (*ep == '*')) |
{ if (!incomm && (last == '/') && (*ep == '*')) |
{ incomm = 1; |
{ incomm = 1; |
if (!keep_comments || (strncmp(ep,"**/",3) == 0)) |
if (!keep_comments || (strncmp(ep,"**/",3) == 0)) |
{ accum_regret(result); |
{ accum_regret(result); |
ok = 0; |
ok = 0; |
} |
} |
} |
} |
if (ok) |
if (ok) |
{ accum_char(result,*ep); |
{ accum_char(result,*ep); |
Line 925 void expand_def(DEF *d) |
|
Line 914 void expand_def(DEF *d) |
|
#define AND TWOCHAR('&','&') |
#define AND TWOCHAR('&','&') |
#define OR TWOCHAR('|','|') |
#define OR TWOCHAR('|','|') |
|
|
#define ALLBINS \ |
#define ALLBINS \ |
BIN('*',*) \ |
BIN('*',*) \ |
BIN('/',/) \ |
BIN('/',/) \ |
BIN('%',%) \ |
BIN('%',%) \ |
BIN('+',+) \ |
BIN('+',+) \ |
BIN(LSH,<<) \ |
BIN(LSH,<<) \ |
BIN(RSH,>>) \ |
BIN(RSH,>>) \ |
BIN('<',<) \ |
BIN('<',<) \ |
BIN('>',>) \ |
BIN('>',>) \ |
BIN(LEQ,<=) \ |
BIN(LEQ,<=) \ |
BIN(GEQ,>=) \ |
BIN(GEQ,>=) \ |
BIN(EQL,==) \ |
BIN(EQL,==) \ |
BIN(NEQ,!=) \ |
BIN(NEQ,!=) \ |
BIN('&',&) \ |
BIN('&',&) \ |
BIN('^',^) \ |
BIN('^',^) \ |
BIN('|',|) \ |
BIN('|',|) \ |
BIN(AND,&&) \ |
BIN(AND,&&) \ |
BIN(OR ,||) |
BIN(OR ,||) |
|
|
char *Index(char *s, int c); |
char *Index(char *s, int c); |
|
|
Line 962 void free_expr(NODE *n) |
|
Line 951 void free_expr(NODE *n) |
|
break; |
break; |
case '-': |
case '-': |
if (n->left) |
if (n->left) |
{ free_expr(n->left); |
{ free_expr(n->left); |
} |
} |
free_expr(n->right); |
free_expr(n->right); |
break; |
break; |
case '!': |
case '!': |
Line 993 int exec_free(NODE *n) |
|
Line 982 int exec_free(NODE *n) |
|
break; |
break; |
case '-': |
case '-': |
if (n->left) |
if (n->left) |
{ rv = exec_free(n->left); |
{ rv = exec_free(n->left); |
} |
} |
else |
else |
{ rv = 0; |
{ rv = 0; |
} |
} |
rv -= exec_free(n->right); |
rv -= exec_free(n->right); |
break; |
break; |
case '!': |
case '!': |
Line 1028 int exec_nofree(NODE *n) |
|
Line 1017 int exec_nofree(NODE *n) |
|
break; |
break; |
case '-': |
case '-': |
if (n->left) |
if (n->left) |
{ rv = exec_nofree(n->left); |
{ rv = exec_nofree(n->left); |
} |
} |
else |
else |
{ rv = 0; |
{ rv = 0; |
} |
} |
rv -= exec_nofree(n->right); |
rv -= exec_nofree(n->right); |
break; |
break; |
case '!': |
case '!': |
Line 1114 int get_quote_char(void) |
|
Line 1103 int get_quote_char(void) |
|
{ d = (d << 3) + c - '0'; |
{ d = (d << 3) + c - '0'; |
c = Get(); |
c = Get(); |
if ((c >= '0') && (c <= '7')) |
if ((c >= '0') && (c <= '7')) |
{ d = (d << 3) + c - '0'; |
{ d = (d << 3) + c - '0'; |
} |
} |
else |
else |
{ Push(c); |
{ Push(c); |
} |
} |
} |
} |
else |
else |
{ Push(c); |
{ Push(c); |
Line 1169 NODE *read_expr_11(void) |
|
Line 1158 NODE *read_expr_11(void) |
|
NODE *read_expr_(void); |
NODE *read_expr_(void); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("()"); |
{ outputs("()"); |
} |
} |
#endif |
#endif |
n = read_expr_(); |
n = read_expr_(); |
c = getnhsexpand(); |
c = getnhsexpand(); |
if (c != ')') |
if (c != ')') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"expression syntax error -- missing ) supplied\n"); |
fprintf(stderr,"expression syntax error -- missing ) supplied\n"); |
Push(c); |
Push(c); |
} |
} |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
return(n); |
return(n); |
} |
} |
Line 1190 NODE *read_expr_11(void) |
|
Line 1179 NODE *read_expr_11(void) |
|
{ int base; |
{ int base; |
static char digits[] = "0123456789abcdefABCDEF"; |
static char digits[] = "0123456789abcdefABCDEF"; |
static char values[] = |
static char values[] = |
"\0\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\12\13\14\15\16\17"; |
"\0\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\12\13\14\15\16\17"; |
char *d; |
char *d; |
int v; |
int v; |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("N"); |
{ outputs("N"); |
} |
} |
#endif |
#endif |
base = 10; |
base = 10; |
if (c == '0') |
if (c == '0') |
{ base = 8; |
{ base = 8; |
c = Get(); |
c = Get(); |
if ((c == 'x') || (c == 'X')) |
if ((c == 'x') || (c == 'X')) |
{ base = 16; |
{ base = 16; |
c = Get(); |
c = Get(); |
} |
} |
} |
} |
v = 0; |
v = 0; |
while (1) |
while (1) |
{ d = Index(digits,c); |
{ d = Index(digits,c); |
if (d == 0) |
if (d == 0) |
{ Push(c); |
{ Push(c); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputd(v); |
{ outputd(v); |
outputs("~"); |
outputs("~"); |
} |
} |
#endif |
#endif |
return(newleaf(v)); |
return(newleaf(v)); |
} |
|
else if (values[d-digits] >= base) |
|
{ err_head(); |
|
fprintf(stderr,"warning: illegal %sdigit `%c'\n", |
|
(base==16)?"hex ":(base==8)?"octal ":"",c); |
|
} |
|
v = (v * base) + values[d-digits]; |
|
c = Get(); |
|
} |
|
} |
} |
|
else if (values[d-digits] >= base) |
|
{ err_head(); |
|
fprintf(stderr,"warning: illegal %sdigit `%c'\n", |
|
(base==16)?"hex ":(base==8)?"octal ":"",c); |
|
} |
|
v = (v * base) + values[d-digits]; |
|
c = Get(); |
|
} |
|
} |
else if (c == '\'') |
else if (c == '\'') |
{ int i; |
{ int i; |
int j; |
int j; |
Line 1236 NODE *read_expr_11(void) |
|
Line 1225 NODE *read_expr_11(void) |
|
i = 0; |
i = 0; |
n = 0; |
n = 0; |
while (1) |
while (1) |
{ j = get_quote_char(); |
{ j = get_quote_char(); |
if (j < 0) |
if (j < 0) |
{ break; |
{ break; |
} |
} |
i = (i << 8) | j; |
i = (i << 8) | j; |
n ++; |
n ++; |
} |
} |
if (n > 4) |
if (n > 4) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"warning: too many characters in character constant\n"); |
fprintf(stderr,"warning: too many characters in character constant\n"); |
} |
} |
return(newleaf(i)); |
return(newleaf(i)); |
} |
} |
else if ((c == '\n') && !sharp) |
else if ((c == '\n') && !sharp) |
Line 1255 NODE *read_expr_11(void) |
|
Line 1244 NODE *read_expr_11(void) |
|
else |
else |
{ char *id; |
{ char *id; |
if (complain) |
if (complain) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"expression syntax error -- number expected\n"); |
fprintf(stderr,"expression syntax error -- number expected\n"); |
} |
} |
if (isbsymchar(c)) |
if (isbsymchar(c)) |
{ Push(c); |
{ Push(c); |
id = read_ident(); |
id = read_ident(); |
} |
} |
else |
else |
{ id = 0; |
{ id = 0; |
} |
} |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("0("); |
{ outputs("0("); |
outputc(c); |
outputc(c); |
outputs(":"); |
outputs(":"); |
outputs(id?id:"(none)"); |
outputs(id?id:"(none)"); |
outputs(")~"); |
outputs(")~"); |
} |
} |
#endif |
#endif |
if (id) |
if (id) |
{ free(id); |
{ free(id); |
} |
} |
return(newleaf(0)); |
return(newleaf(0)); |
} |
} |
} |
} |
Line 1300 NODE *read_expr_10(void) |
|
Line 1289 NODE *read_expr_10(void) |
|
case '~': |
case '~': |
case '!': |
case '!': |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
n = read_expr_10(); |
n = read_expr_10(); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
return(newnode(0,c,n)); |
return(newnode(0,c,n)); |
break; |
break; |
case 'd': |
case 'd': |
Push(c); |
Push(c); |
input_mark(); |
input_mark(); |
w = read_ident(); |
w = read_ident(); |
if (strcmp(w,"defined") == 0) |
if (strcmp(w,"defined") == 0) |
{ c = getnonspace(); |
{ c = getnonspace(); |
if (c == '(') |
if (c == '(') |
{ char *id; |
{ char *id; |
id = read_ident(); |
id = read_ident(); |
if (id) |
if (id) |
{ c = getnonspace(); |
{ c = getnonspace(); |
if (c == ')') |
if (c == ')') |
{ input_unmark(); |
{ input_unmark(); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("ifdef"); |
{ outputs("ifdef"); |
} |
} |
#endif |
#endif |
return(newname(id)); |
return(newname(id)); |
} |
} |
} |
} |
} |
} |
else if (isbsymchar(c)) |
else if (isbsymchar(c)) |
{ char *id; |
{ char *id; |
Push(c); |
Push(c); |
id = read_ident(); |
id = read_ident(); |
if (id) |
if (id) |
{ input_unmark(); |
{ input_unmark(); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("ifdef"); |
{ outputs("ifdef"); |
} |
} |
#endif |
#endif |
return(newname(id)); |
return(newname(id)); |
} |
} |
} |
} |
} |
} |
input_recover(); |
input_recover(); |
n = read_expr_11(); |
n = read_expr_11(); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
return(n); |
return(n); |
break; |
break; |
default: |
default: |
Push(c); |
Push(c); |
n = read_expr_11(); |
n = read_expr_11(); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
return(n); |
return(n); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1391 NODE *read_expr_9(void) |
|
Line 1380 NODE *read_expr_9(void) |
|
case '/': |
case '/': |
case '%': |
case '%': |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
r = read_expr_10(); |
r = read_expr_10(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1429 NODE *read_expr_8(void) |
|
Line 1418 NODE *read_expr_8(void) |
|
{ case '+': |
{ case '+': |
case '-': |
case '-': |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
r = read_expr_9(); |
r = read_expr_9(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1467 NODE *read_expr_7(void) |
|
Line 1456 NODE *read_expr_7(void) |
|
switch (c) |
switch (c) |
{ case '<': |
{ case '<': |
case '>': |
case '>': |
d = Get(); |
d = Get(); |
if (d == c) |
if (d == c) |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_8(); |
r = read_expr_8(); |
l = newnode(l,(c=='<')?LSH:RSH,r); |
l = newnode(l,(c=='<')?LSH:RSH,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1513 NODE *read_expr_6(void) |
|
Line 1502 NODE *read_expr_6(void) |
|
switch (c) |
switch (c) |
{ case '<': |
{ case '<': |
case '>': |
case '>': |
d = Get(); |
d = Get(); |
if (d == '=') |
if (d == '=') |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_7(); |
r = read_expr_7(); |
l = newnode(l,(c=='<')?LEQ:GEQ,r); |
l = newnode(l,(c=='<')?LEQ:GEQ,r); |
} |
} |
else |
else |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
Push(d); |
Push(d); |
r = read_expr_7(); |
r = read_expr_7(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
} |
} |
break; |
break; |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1568 NODE *read_expr_5(void) |
|
Line 1557 NODE *read_expr_5(void) |
|
switch (c) |
switch (c) |
{ case '=': |
{ case '=': |
case '!': |
case '!': |
d = Get(); |
d = Get(); |
if (d == '=') |
if (d == '=') |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_6(); |
r = read_expr_6(); |
l = newnode(l,(c=='=')?EQL:NEQ,r); |
l = newnode(l,(c=='=')?EQL:NEQ,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1613 NODE *read_expr_4(void) |
|
Line 1602 NODE *read_expr_4(void) |
|
{ c = getnhsexpand(); |
{ c = getnhsexpand(); |
switch (c) |
switch (c) |
{ case '&': |
{ case '&': |
d = Get(); |
d = Get(); |
if (d != '&') |
if (d != '&') |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_5(); |
r = read_expr_5(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1658 NODE *read_expr_3(void) |
|
Line 1647 NODE *read_expr_3(void) |
|
switch (c) |
switch (c) |
{ case '^': |
{ case '^': |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
r = read_expr_4(); |
r = read_expr_4(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1695 NODE *read_expr_2(void) |
|
Line 1684 NODE *read_expr_2(void) |
|
{ c = getnhsexpand(); |
{ c = getnhsexpand(); |
switch (c) |
switch (c) |
{ case '|': |
{ case '|': |
d = Get(); |
d = Get(); |
if (d != '|') |
if (d != '|') |
{ Push(d); |
{ Push(d); |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
} |
} |
#endif |
#endif |
r = read_expr_3(); |
r = read_expr_3(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1739 NODE *read_expr_1(void) |
|
Line 1728 NODE *read_expr_1(void) |
|
{ c = getnhsexpand(); |
{ c = getnhsexpand(); |
switch (c) |
switch (c) |
{ case '&': |
{ case '&': |
d = Get(); |
d = Get(); |
if (d == c) |
if (d == c) |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_2(); |
r = read_expr_2(); |
l = newnode(l,AND,r); |
l = newnode(l,AND,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1784 NODE *read_expr_0(void) |
|
Line 1773 NODE *read_expr_0(void) |
|
{ c = getnhsexpand(); |
{ c = getnhsexpand(); |
switch (c) |
switch (c) |
{ case '|': |
{ case '|': |
d = Get(); |
d = Get(); |
if (d == c) |
if (d == c) |
{ |
{ |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputc(c); |
{ outputc(c); |
outputc(d); |
outputc(d); |
} |
} |
#endif |
#endif |
r = read_expr_1(); |
r = read_expr_1(); |
l = newnode(l,OR,r); |
l = newnode(l,OR,r); |
break; |
break; |
} |
} |
Push(d); |
Push(d); |
/* fall through ... */ |
/* fall through ... */ |
default: |
default: |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
if (debugging) |
if (debugging) |
{ outputs("~"); |
{ outputs("~"); |
} |
} |
#endif |
#endif |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1829 NODE *read_expr_(void) |
|
Line 1818 NODE *read_expr_(void) |
|
switch (c) |
switch (c) |
{ case '\n': |
{ case '\n': |
case ')': |
case ')': |
Push(c); |
Push(c); |
return(l); |
return(l); |
break; |
break; |
case ',': |
case ',': |
r = read_expr_0(); |
r = read_expr_0(); |
l = newnode(l,c,r); |
l = newnode(l,c,r); |
break; |
break; |
default: |
default: |
err_head(); |
err_head(); |
fprintf(stderr,"expression syntax error -- bad operator `%c'\n",c); |
fprintf(stderr,"expression syntax error -- bad operator `%c'\n",c); |
return(l); |
return(l); |
break; |
break; |
} |
} |
} |
} |
} |
} |
Line 1917 void dump_expr(NODE *n) |
|
Line 1906 void dump_expr(NODE *n) |
|
break; |
break; |
case '-': |
case '-': |
if (n->left) |
if (n->left) |
{ dump_expr(n->left); |
{ dump_expr(n->left); |
} |
} |
outputc('-'); |
outputc('-'); |
dump_expr(n->right); |
dump_expr(n->right); |
break; |
break; |
Line 1936 void dump_expr(NODE *n) |
|
Line 1925 void dump_expr(NODE *n) |
|
outputc(')'); |
outputc(')'); |
break; |
break; |
#define BIN(key,op) case key:dump_expr(n->left);\ |
#define BIN(key,op) case key:dump_expr(n->left);\ |
putx(key);\ |
putx(key);\ |
dump_expr(n->right);\ |
dump_expr(n->right);\ |
break; |
break; |
ALLBINS |
ALLBINS |
#undef BIN |
#undef BIN |
} |
} |
Line 1981 void do_if(int expr_sharp) |
|
Line 1970 void do_if(int expr_sharp) |
|
if (sharp) |
if (sharp) |
{ d = '\0'; |
{ d = '\0'; |
do |
do |
{ c = d; |
{ c = d; |
d = Get(); |
d = Get(); |
} while ((c == '\\') || (d != '\n')); |
} while ((c == '\\') || (d != '\n')); |
} |
} |
return; |
return; |
} |
} |
Line 1996 void do_if(int expr_sharp) |
|
Line 1985 void do_if(int expr_sharp) |
|
iffalse(); |
iffalse(); |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputc('>'); |
{ outputc('>'); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
return; |
return; |
} |
} |
Line 2044 void do_ifdef(int expr_sharp) |
|
Line 2033 void do_ifdef(int expr_sharp) |
|
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs("no ident "); |
{ outputs("no ident "); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
iffalse(); |
iffalse(); |
} |
} |
Line 2054 void do_ifdef(int expr_sharp) |
|
Line 2043 void do_ifdef(int expr_sharp) |
|
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs(w); |
{ outputs(w); |
outputc(' '); |
outputc(' '); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
if (find_def(w)) |
if (find_def(w)) |
{ iftrue(); |
{ iftrue(); |
} |
} |
else |
else |
{ iffalse(); |
{ iffalse(); |
} |
} |
free(w); |
free(w); |
} |
} |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
Line 2106 void do_ifndef(int expr_sharp) |
|
Line 2095 void do_ifndef(int expr_sharp) |
|
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs("no ident "); |
{ outputs("no ident "); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
iftrue(); |
iftrue(); |
} |
} |
Line 2116 void do_ifndef(int expr_sharp) |
|
Line 2105 void do_ifndef(int expr_sharp) |
|
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs(w); |
{ outputs(w); |
outputc(' '); |
outputc(' '); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
if (find_def(w)) |
if (find_def(w)) |
{ iffalse(); |
{ iffalse(); |
} |
} |
else |
else |
{ iftrue(); |
{ iftrue(); |
} |
} |
free(w); |
free(w); |
} |
} |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
Line 2156 void do_else(int expr_sharp) |
|
Line 2145 void do_else(int expr_sharp) |
|
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs("top "); |
{ outputs("top "); |
output_ifstate(ifstack->condstate); |
output_ifstate(ifstack->condstate); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
switch (ifstack->condstate) |
switch (ifstack->condstate) |
{ case IFSTATE_TRUE: |
{ case IFSTATE_TRUE: |
ifstack->condstate = IFSTATE_STAYFALSE; |
ifstack->condstate = IFSTATE_STAYFALSE; |
break; |
break; |
case IFSTATE_FALSE: |
case IFSTATE_FALSE: |
ifstack->condstate = IFSTATE_TRUE; |
ifstack->condstate = IFSTATE_TRUE; |
break; |
break; |
} |
} |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs(" now "); |
{ outputs(" now "); |
output_ifstate(ifstack->condstate); |
output_ifstate(ifstack->condstate); |
outputc('>'); |
outputc('>'); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
} |
} |
else |
else |
{ |
{ |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs(" no if>"); |
{ outputs(" no if>"); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
err_head(); |
err_head(); |
fprintf(stderr,"if-less else\n"); |
fprintf(stderr,"if-less else\n"); |
Line 2256 void do_elif(int expr_sharp) |
|
Line 2245 void do_elif(int expr_sharp) |
|
if (sharp) |
if (sharp) |
{ d = '\0'; |
{ d = '\0'; |
do |
do |
{ c = d; |
{ c = d; |
d = Get(); |
d = Get(); |
} while ((c == '\\') || (d != '\n')); |
} while ((c == '\\') || (d != '\n')); |
} |
} |
return; |
return; |
} |
} |
Line 2271 void do_elif(int expr_sharp) |
|
Line 2260 void do_elif(int expr_sharp) |
|
ifstack->condstate = IFSTATE_STAYFALSE; |
ifstack->condstate = IFSTATE_STAYFALSE; |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputs("forcing STAYFALSE>"); |
{ outputs("forcing STAYFALSE>"); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
return; |
return; |
} |
} |
Line 2300 void do_elif(int expr_sharp) |
|
Line 2289 void do_elif(int expr_sharp) |
|
break; |
break; |
case IFSTATE_FALSE: |
case IFSTATE_FALSE: |
if (e) |
if (e) |
{ ifstack->condstate = IFSTATE_TRUE; |
{ ifstack->condstate = IFSTATE_TRUE; |
} |
} |
break; |
break; |
} |
} |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
Line 2451 void do_include(int expr_sharp) |
|
Line 2440 void do_include(int expr_sharp) |
|
DEF *d; |
DEF *d; |
cp = init_accum(); |
cp = init_accum(); |
while (issymchar(c)) |
while (issymchar(c)) |
{ accum_char(cp,c); |
{ accum_char(cp,c); |
c = Get(); |
c = Get(); |
} |
} |
Push(c); |
Push(c); |
cp = accum_result(cp); |
cp = accum_result(cp); |
d = find_def(cp); |
d = find_def(cp); |
if (d) |
if (d) |
{ expand_def(d); |
{ expand_def(d); |
n_hits ++; |
n_hits ++; |
} |
} |
else |
else |
{ char *dp; |
{ char *dp; |
for (dp=cp+strlen(cp);dp>cp;dp--) Push(*dp); |
for (dp=cp+strlen(cp);dp>cp;dp--) Push(*dp); |
n_misses ++; |
n_misses ++; |
} |
} |
} |
} |
else |
else |
{ break; |
{ break; |
Line 2476 void do_include(int expr_sharp) |
|
Line 2465 void do_include(int expr_sharp) |
|
{ while (1) |
{ while (1) |
{ c = Get(); |
{ c = Get(); |
if (c == '\n') |
if (c == '\n') |
{ Push('\n'); |
{ Push('\n'); |
c = '"'; |
c = '"'; |
err_head(); |
err_head(); |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
sharp?'#':'@'); |
sharp?'#':'@'); |
} |
} |
if (c == '"') |
if (c == '"') |
{ break; |
{ break; |
} |
} |
accum_char(acc,c); |
accum_char(acc,c); |
} |
} |
if (sharp) |
if (sharp) |
Line 2496 void do_include(int expr_sharp) |
|
Line 2485 void do_include(int expr_sharp) |
|
{ while (1) |
{ while (1) |
{ c = Get(); |
{ c = Get(); |
if (c == '\n') |
if (c == '\n') |
{ Push('\n'); |
{ Push('\n'); |
c = '>'; |
c = '>'; |
err_head(); |
err_head(); |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
sharp?'#':'@'); |
sharp?'#':'@'); |
} |
} |
if (c == '>') |
if (c == '>') |
{ break; |
{ break; |
} |
} |
accum_char(acc,c); |
accum_char(acc,c); |
} |
} |
if (sharp) |
if (sharp) |
Line 2519 void do_include(int expr_sharp) |
|
Line 2508 void do_include(int expr_sharp) |
|
} |
} |
} |
} |
|
|
#if defined(THINK_C) |
|
#if defined(DELIM) |
|
#undef DELIM |
|
#endif |
|
#define DELIM ':' |
|
#endif |
|
|
|
#if defined(SYSV) |
#if defined(SYSV) |
#else |
#else |
#if defined(DELIM) |
#if defined(DELIM) |
Line 2534 void do_include(int expr_sharp) |
|
Line 2516 void do_include(int expr_sharp) |
|
#define DELIM '/' |
#define DELIM '/' |
#endif |
#endif |
|
|
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
#if defined(DELIM) |
#if defined(DELIM) |
#undef DELIM |
#undef DELIM |
#endif |
#endif |
Line 2570 void read_include_file(char *name, int dohere, int exp |
|
Line 2552 void read_include_file(char *name, int dohere, int exp |
|
{ int i; |
{ int i; |
n = temp; |
n = temp; |
for (i=0;i<nIfiles;i++) |
for (i=0;i<nIfiles;i++) |
{ sprintf(temp,"%s%c%s",Ifiles[i],DELIM,name); |
{ sprintf(temp,"%s%c%s",Ifiles[i],DELIM,name); |
f = fopen(temp,"r"); |
f = fopen(temp,"r"); |
if (f != NULL) |
if (f != NULL) |
{ break; |
{ break; |
} |
|
} |
|
} |
} |
} |
} |
|
} |
|
} |
if (f == NULL) |
if (f == NULL) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"can't find include file %s\n",name); |
fprintf(stderr,"can't find include file %s\n",name); |
Line 2635 char *cur_incldir; |
|
Line 2617 char *cur_incldir; |
|
int cur_lineno; |
int cur_lineno; |
|
|
typedef struct _mark { |
typedef struct _mark { |
struct _mark *link; |
struct _mark *link; |
char *acc; |
char *acc; |
int startdepth; |
int startdepth; |
int incs[MAXFILES]; |
int incs[MAXFILES]; |
int nincs; |
int nincs; |
int nignore; } MARK; |
int nignore; } MARK; |
|
|
static MARK *marks; |
static MARK *marks; |
static int atline; |
static int atline; |
|
|
while (1) |
while (1) |
{ if (cur_npushed > 0) |
{ if (cur_npushed > 0) |
{ do |
{ do |
{ c = GET(); |
{ c = GET(); |
} while (c == NOEXPAND); |
} while (c == NOEXPAND); |
if (c == MARKLINE) |
if (c == MARKLINE) |
{ mark_get_line(); |
{ mark_get_line(); |
continue; |
continue; |
} |
} |
mark_got_from_pushback(c); |
mark_got_from_pushback(c); |
#ifdef DEBUG_IO |
#ifdef DEBUG_IO |
if (debugging) |
if (debugging) |
{ outputc('('); |
{ outputc('('); |
outputs(unctrl(c)); |
outputs(unctrl(c)); |
outputc(')'); |
outputc(')'); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
break; |
break; |
} |
} |
else |
else |
{ c = getc(cur_fstack); |
{ c = getc(cur_fstack); |
if (feof(cur_fstack)) |
if (feof(cur_fstack)) |
{ if (fstackdepth > 0) |
{ if (fstackdepth > 0) |
{ |
{ |
#ifdef DEBUG_INCL |
#ifdef DEBUG_INCL |
if (debugging) |
if (debugging) |
{ outputs("--eof:"); |
{ outputs("--eof:"); |
outputs(cur_fn); |
outputs(cur_fn); |
outputs("--"); |
outputs("--"); |
} |
} |
#endif |
#endif |
fclose(cur_fstack); |
fclose(cur_fstack); |
free(cur_fn); |
free(cur_fn); |
free(cur_incldir); |
free(cur_incldir); |
change_fstackdepth(-1); |
change_fstackdepth(-1); |
mark_file_ending(); |
mark_file_ending(); |
out_at(cur_lineno,cur_fn); |
out_at(cur_lineno,cur_fn); |
autodef_file(curfile()); |
autodef_file(curfile()); |
autodef_line(curline()); |
autodef_line(curline()); |
continue; |
continue; |
} |
} |
else |
else |
{ flush_final_nl(); |
{ flush_final_nl(); |
save_stats(); |
save_stats(); |
#if 0 |
#if 0 |
exit(0); |
exit(0); |
#endif |
#endif |
longjmp(cpp_env,1); |
longjmp(cpp_env,1); |
} |
} |
} |
} |
mark_got_from_file(c); |
mark_got_from_file(c); |
#ifdef DEBUG_IO |
#ifdef DEBUG_IO |
if (debugging) |
if (debugging) |
{ outputc('<'); |
{ outputc('<'); |
outputs(unctrl(c)); |
outputs(unctrl(c)); |
outputc('>'); |
outputc('>'); |
fflush(outfile); |
fflush(outfile); |
} |
} |
#endif |
#endif |
break; |
break; |
} |
} |
Line 2874 char getnhsexpand(void) |
|
Line 2856 char getnhsexpand(void) |
|
if (expr_sharp && (c == '\\')) |
if (expr_sharp && (c == '\\')) |
{ c = Get(); |
{ c = Get(); |
if (c == '\n') |
if (c == '\n') |
{ continue; |
{ continue; |
} |
} |
else |
else |
{ Push(c); |
{ Push(c); |
c = '\\'; |
c = '\\'; |
} |
} |
} |
} |
break; |
break; |
} |
} |
Line 2898 char getexpand(void) |
|
Line 2880 char getexpand(void) |
|
{ char d; |
{ char d; |
d = Get(); |
d = Get(); |
if (d == '*') |
if (d == '*') |
{ d = '\0'; |
{ d = '\0'; |
do |
do |
{ c = d; |
{ c = d; |
d = Get(); |
d = Get(); |
} while ((c != '*') || (d != '/')); |
} while ((c != '*') || (d != '/')); |
continue; |
continue; |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
return('/'); |
return('/'); |
} |
} |
} |
} |
else if (c == NOEXPAND) |
else if (c == NOEXPAND) |
{ c = Get(); |
{ c = Get(); |
if (issymchar(c)) |
if (issymchar(c)) |
{ Push(NOEXPAND); |
{ Push(NOEXPAND); |
} |
} |
return(c); |
return(c); |
} |
} |
else if (! isbsymchar(c)) |
else if (! isbsymchar(c)) |
Line 2934 char getexpand(void) |
|
Line 2916 char getexpand(void) |
|
else |
else |
{ int i; |
{ int i; |
for (i=strlen(str)-1;i>0;i--) |
for (i=strlen(str)-1;i>0;i--) |
{ Push(str[i]); |
{ Push(str[i]); |
} |
} |
Push(NOEXPAND); |
Push(NOEXPAND); |
c = str[0]; |
c = str[0]; |
free(str); |
free(str); |
Line 3019 void outputc(char c) |
|
Line 3001 void outputc(char c) |
|
{ atline += nnls; |
{ atline += nnls; |
nnls = 0; |
nnls = 0; |
if (no_line_lines) |
if (no_line_lines) |
{ fprintf(outfile,"\n"); |
{ fprintf(outfile,"\n"); |
} |
} |
else |
else |
{ fprintf(outfile,"\n# %d \"%s\"\n",atline,atfile); |
{ fprintf(outfile,"\n# %d \"%s\"\n",atline,atfile); |
} |
} |
done_line = 1; |
done_line = 1; |
} |
} |
for (;nnls;nnls--) |
for (;nnls;nnls--) |
Line 3125 void input_recover(void) |
|
Line 3107 void input_recover(void) |
|
while (m->nincs > 0) |
while (m->nincs > 0) |
{ l = m->incs[--m->nincs]; |
{ l = m->incs[--m->nincs]; |
for (;i>=l;i--) |
for (;i>=l;i--) |
{ Push(txt[i]); |
{ Push(txt[i]); |
} |
} |
Push(MARKLEND); |
Push(MARKLEND); |
c = txt[i]; |
c = txt[i]; |
for (i--;txt[i]!=c;i--) |
for (i--;txt[i]!=c;i--) |
{ Push(txt[i]); |
{ Push(txt[i]); |
} |
} |
Push('A'); |
Push('A'); |
Push('@'); |
Push('@'); |
Push('@'); |
Push('@'); |
Line 3181 void mark_file_ending(void) |
|
Line 3163 void mark_file_ending(void) |
|
{ to = m->incs[--m->nincs]; |
{ to = m->incs[--m->nincs]; |
acc = m->acc; |
acc = m->acc; |
for (i=accum_howfar(acc);i>to;i--) |
for (i=accum_howfar(acc);i>to;i--) |
{ accum_regret(acc); |
{ accum_regret(acc); |
} |
} |
} |
} |
} |
} |
} |
} |
|
|
char *incldep_o; |
char *incldep_o; |
int do_at_ctrls; |
int do_at_ctrls; |
extern char *predefs[]; |
extern char *predefs[]; |
|
|
#if defined(SYSV) |
#if defined(SYSV) |
void main(ac,av) |
void main(ac,av) |
#else |
#else |
Line 3333 void cpp_main(int ac, char **av) |
|
Line 3315 void cpp_main(int ac, char **av) |
|
int i; |
int i; |
|
|
if ( setjmp(cpp_env) ) { |
if ( setjmp(cpp_env) ) { |
if ( inf != stdin ) |
if ( inf != stdin ) |
fclose(inf); |
fclose(inf); |
if ( outf == stdout ) |
if ( outf == stdout ) |
fflush(outf); |
fflush(outf); |
else |
else |
fclose(outf); |
fclose(outf); |
return; |
return; |
} |
} |
|
|
init_symtbl(); |
init_symtbl(); |
#define predef(str) ( (cp=copyofstr("1")), \ |
#define predef(str) ( (cp=copyofstr("1")), \ |
check_malloc(cp), \ |
check_malloc(cp), \ |
define((str),-1,(unsigned char *)cp,DEF_PREDEF) ) |
define((str),-1,(unsigned char *)cp,DEF_PREDEF) ) |
for (i=0;predefs[i];i++) |
for (i=0;predefs[i];i++) |
{ predef(predefs[i]); |
{ predef(predefs[i]); |
} |
} |
Line 3362 void cpp_main(int ac, char **av) |
|
Line 3344 void cpp_main(int ac, char **av) |
|
{ if (**av == '-') |
{ if (**av == '-') |
{ rest = 0; |
{ rest = 0; |
if (!strcmp(*av,"-undef")) |
if (!strcmp(*av,"-undef")) |
{ undef_predefs(); |
{ undef_predefs(); |
} |
} |
else |
else |
{ for (++*av;(**av)&&!rest;++*av) |
{ for (++*av;(**av)&&!rest;++*av) |
{ switch (**av) |
{ switch (**av) |
{ case 'C': |
{ case 'C': |
keep_comments = 1; |
keep_comments = 1; |
break; |
break; |
case 'D': |
case 'D': |
rest = 1; |
rest = 1; |
++*av; |
++*av; |
if (strcmp(*av,"@") == 0) |
if (strcmp(*av,"@") == 0) |
{ do_at_ctrls = 1; |
{ do_at_ctrls = 1; |
} |
} |
else |
else |
{ cp = Index(*av,'='); |
{ cp = Index(*av,'='); |
if (cp) |
if (cp) |
{ if (cp != *av) |
{ if (cp != *av) |
{ char *dp; |
{ char *dp; |
*cp++ = '\0'; |
*cp++ = '\0'; |
dp = copyofstr(cp); |
dp = copyofstr(cp); |
check_malloc(dp); |
check_malloc(dp); |
define(*av,-1,(unsigned char *)dp,DEF_CMDLINE); |
define(*av,-1,(unsigned char *)dp,DEF_CMDLINE); |
} |
} |
else |
else |
{ fprintf(stderr,"Must give a name for -D\n"); |
{ fprintf(stderr,"Must give a name for -D\n"); |
} |
} |
} |
} |
else |
else |
{ char *dp; |
{ char *dp; |
dp = copyofstr("1"); |
dp = copyofstr("1"); |
check_malloc(dp); |
check_malloc(dp); |
define(*av,-1,(unsigned char *)dp,DEF_CMDLINE); |
define(*av,-1,(unsigned char *)dp,DEF_CMDLINE); |
} |
} |
} |
} |
break; |
break; |
case 'E': |
case 'E': |
break; |
break; |
case 'I': |
case 'I': |
rest = 1; |
rest = 1; |
++*av; |
++*av; |
if (**av) |
if (**av) |
{ Ifile(*av); |
{ Ifile(*av); |
} |
} |
else |
else |
{ fprintf(stderr,"Must give a directory name for -I\n"); |
{ fprintf(stderr,"Must give a directory name for -I\n"); |
} |
} |
break; |
break; |
case 'M': |
case 'M': |
incldep = 1; |
incldep = 1; |
break; |
break; |
case 'P': |
case 'P': |
no_line_lines = 1; |
no_line_lines = 1; |
break; |
break; |
case 'R': |
case 'R': |
break; |
break; |
case 'U': |
case 'U': |
rest = 1; |
rest = 1; |
++*av; |
++*av; |
if (**av) |
if (**av) |
{ undef(*av); |
{ undef(*av); |
} |
} |
else |
else |
{ fprintf(stderr,"Must give a name for -U\n"); |
{ fprintf(stderr,"Must give a name for -U\n"); |
} |
} |
break; |
break; |
default: |
default: |
fprintf(stderr,"Unknown flag -%c\n",**av); |
fprintf(stderr,"Unknown flag -%c\n",**av); |
break; |
break; |
} |
} |
} |
|
} |
|
} |
} |
|
} |
|
} |
else |
else |
{ switch (argno++) |
{ switch (argno++) |
{ case 0: |
{ case 0: |
if (strcmp(*av,"-") != 0) |
if (strcmp(*av,"-") != 0) |
{ FILE *f; |
{ FILE *f; |
f = fopen(*av,"r"); |
f = fopen(*av,"r"); |
if (f == NULL) |
if (f == NULL) |
{ fprintf(stderr,"Cannot open source file %s\n",*av); |
{ fprintf(stderr,"Cannot open source file %s\n",*av); |
} |
|
else |
|
{ inf = f; |
|
inname = *av; |
|
} |
|
} |
|
break; |
|
case 1: |
|
if (strcmp(*av,"-") != 0) |
|
{ FILE *f; |
|
f = fopen(*av,"w"); |
|
if (f == NULL) |
|
{ fprintf(stderr,"Can't create %s\n",*av); |
|
} |
|
else |
|
{ outf = f; |
|
} |
|
} |
|
break; |
|
default: |
|
fprintf(stderr,"Extra name %s ignored\n",*av); |
|
break; |
|
} |
|
} |
} |
|
else |
|
{ inf = f; |
|
inname = *av; |
|
} |
|
} |
|
break; |
|
case 1: |
|
if (strcmp(*av,"-") != 0) |
|
{ FILE *f; |
|
f = fopen(*av,"w"); |
|
if (f == NULL) |
|
{ fprintf(stderr,"Can't create %s\n",*av); |
|
} |
|
else |
|
{ outf = f; |
|
} |
|
} |
|
break; |
|
default: |
|
fprintf(stderr,"Extra name %s ignored\n",*av); |
|
break; |
} |
} |
|
} |
|
} |
if (incldep && !inname[0]) |
if (incldep && !inname[0]) |
{ fprintf(stderr,"No input file for -M flag\n"); |
{ fprintf(stderr,"No input file for -M flag\n"); |
#if 0 |
#if 0 |
exit(1); |
exit(1); |
#endif |
#endif |
longjmp(cpp_env,1); |
longjmp(cpp_env,1); |
} |
} |
if (do_at_ctrls) |
if (do_at_ctrls) |
{ predef("at_sign_ctrls"); |
{ predef("at_sign_ctrls"); |
Line 3534 void cpp_main(int ac, char **av) |
|
Line 3516 void cpp_main(int ac, char **av) |
|
if (!incldep && (isdigit(c) || (c == '.'))) |
if (!incldep && (isdigit(c) || (c == '.'))) |
{ haddigit = 0; |
{ haddigit = 0; |
while (isdigit(c) || (c == '.')) |
while (isdigit(c) || (c == '.')) |
{ haddigit |= isdigit(c); |
{ haddigit |= isdigit(c); |
maybe_print(c); |
maybe_print(c); |
c = Get(); |
c = Get(); |
} |
} |
if (haddigit && ((c == 'e') || (c == 'E'))) |
if (haddigit && ((c == 'e') || (c == 'E'))) |
{ maybe_print(c); |
{ maybe_print(c); |
c = Get(); |
c = Get(); |
while (isdigit(c)) |
while (isdigit(c)) |
{ maybe_print(c); |
{ maybe_print(c); |
c = Get(); |
c = Get(); |
} |
} |
} |
} |
Push(c); |
Push(c); |
continue; |
continue; |
} |
} |
if (quote) |
if (quote) |
{ if (c == '\\') |
{ if (c == '\\') |
{ maybe_print(c); |
{ maybe_print(c); |
backslash = 1; |
backslash = 1; |
continue; |
continue; |
} |
} |
else if ((c == quote) || (c == '\n')) |
else if ((c == quote) || (c == '\n')) |
{ maybe_print(c); |
{ maybe_print(c); |
quote = 0; |
quote = 0; |
continue; |
continue; |
} |
} |
else |
else |
{ maybe_print(c); |
{ maybe_print(c); |
continue; |
continue; |
} |
} |
} |
} |
if (c == '\\') /* this weirdness is Reiser semantics.... */ |
if (c == '\\') /* this weirdness is Reiser semantics.... */ |
{ backslash = 1; |
{ backslash = 1; |
Line 3582 void cpp_main(int ac, char **av) |
|
Line 3564 void cpp_main(int ac, char **av) |
|
} |
} |
else if (! incldep) |
else if (! incldep) |
{ if (isbsymchar(c) && !in_false_if()) |
{ if (isbsymchar(c) && !in_false_if()) |
{ char *cp; |
{ char *cp; |
DEF *d; |
DEF *d; |
cp = init_accum(); |
cp = init_accum(); |
while (issymchar(c)) |
while (issymchar(c)) |
{ accum_char(cp,c); |
{ accum_char(cp,c); |
c = Get(); |
c = Get(); |
} |
} |
Push(c); |
Push(c); |
cp = accum_result(cp); |
cp = accum_result(cp); |
#ifdef DEBUG_MAIN |
#ifdef DEBUG_MAIN |
if (debugging) |
if (debugging) |
{ outputs("<word:"); |
{ outputs("<word:"); |
outputs(cp); |
outputs(cp); |
outputs(">"); |
outputs(">"); |
} |
} |
#endif |
#endif |
d = find_def(cp); |
d = find_def(cp); |
if (d) |
if (d) |
{ expand_def(d); |
{ expand_def(d); |
n_hits ++; |
n_hits ++; |
} |
} |
else |
else |
{ for (;*cp;cp++) |
{ for (;*cp;cp++) |
{ maybe_print(*cp); |
{ maybe_print(*cp); |
} |
} |
n_misses ++; |
n_misses ++; |
} |
} |
} |
} |
else if (c == '/') |
else if (c == '/') |
{ char d; |
{ char d; |
d = Get(); |
d = Get(); |
if (d == '*') |
if (d == '*') |
{ d = '\0'; |
{ d = '\0'; |
if (keep_comments) |
if (keep_comments) |
{ maybe_print('/'); |
{ maybe_print('/'); |
maybe_print('*'); |
maybe_print('*'); |
} |
} |
do |
do |
{ c = d; |
{ c = d; |
d = Get(); |
d = Get(); |
if ((d == '\n') || keep_comments) |
if ((d == '\n') || keep_comments) |
{ maybe_print(d); |
{ maybe_print(d); |
} |
} |
} while ((c != '*') || (d != '/')); |
} while ((c != '*') || (d != '/')); |
} |
} |
else |
else |
{ Push(d); |
{ Push(d); |
maybe_print(c); |
maybe_print(c); |
} |
} |
} |
} |
else |
else |
{ maybe_print(c); |
{ maybe_print(c); |
} |
} |
} |
} |
} |
} |
} |
} |
Line 3662 void do_pragma(void) |
|
Line 3644 void do_pragma(void) |
|
} |
} |
|
|
char *predefs[] = { |
char *predefs[] = { |
"mc68000", |
"mc68000", |
"unix", |
"unix", |
"NeXT", |
"NeXT", |
"__MACH__", |
"__MACH__", |
0 |
0 |
}; |
}; |
|
|
void do_set(void) |
void do_set(void) |
Line 3747 void do_sharp(void) |
|
Line 3729 void do_sharp(void) |
|
if (strcmp(w,"") == 0) |
if (strcmp(w,"") == 0) |
{ c = Get(); |
{ c = Get(); |
if (c != '\n') |
if (c != '\n') |
{ Push(c); |
{ Push(c); |
} |
} |
else |
else |
{ isnull = 1; |
{ isnull = 1; |
} |
} |
} |
} |
if (!isnull && !in_false_if()) |
if (!isnull && !in_false_if()) |
{ err_head(); |
{ err_head(); |
Line 3784 void flush_sharp_line(void) |
|
Line 3766 void flush_sharp_line(void) |
|
} |
} |
if (comment) |
if (comment) |
{ if (c == '\\') |
{ if (c == '\\') |
{ backslash = 1; |
{ backslash = 1; |
} |
} |
else if ((c == '/') && (lastc == '*')) |
else if ((c == '/') && (lastc == '*')) |
{ comment = 0; |
{ comment = 0; |
} |
} |
continue; |
continue; |
} |
} |
if (quote) |
if (quote) |
{ if (c == '\\') |
{ if (c == '\\') |
{ backslash = 1; |
{ backslash = 1; |
} |
} |
else if (c == quote) |
else if (c == quote) |
{ quote = 0; |
{ quote = 0; |
} |
} |
} |
} |
switch (c) |
switch (c) |
{ case '\\': |
{ case '\\': |
backslash = 1; |
backslash = 1; |
continue; |
continue; |
break; |
break; |
case '"': case '\'': |
case '"': case '\'': |
quote = c; |
quote = c; |
continue; |
continue; |
break; |
break; |
case '*': |
case '*': |
comment = (lastc == '/'); |
comment = (lastc == '/'); |
continue; |
continue; |
break; |
break; |
default: |
default: |
continue; |
continue; |
break; |
break; |
case '\n': |
case '\n': |
break; |
break; |
} |
} |
break; |
break; |
} |
} |
Line 3843 void save_stats(void) |
|
Line 3825 void save_stats(void) |
|
f = fopen("/@larry/u1/mouse/Mouse-C/cpp.stats","a"); |
f = fopen("/@larry/u1/mouse/Mouse-C/cpp.stats","a"); |
if (f) |
if (f) |
{ fprintf(f,"%d def, %d undef, %d hits, %d misses\n", |
{ fprintf(f,"%d def, %d undef, %d hits, %d misses\n", |
n_defines,n_undefines,n_hits,n_misses); |
n_defines,n_undefines,n_hits,n_misses); |
fclose(f); |
fclose(f); |
} |
} |
} |
} |
Line 4021 void undef_predefs(void) |
|
Line 4003 void undef_predefs(void) |
|
while (*D) |
while (*D) |
{ d = *D; |
{ d = *D; |
if (d->how == DEF_PREDEF) |
if (d->how == DEF_PREDEF) |
{ free(d->name); |
{ free(d->name); |
free((char *)d->repl); |
free((char *)d->repl); |
*D = d->link; |
*D = d->link; |
OLD(d); |
OLD(d); |
n_in_table --; |
n_in_table --; |
} |
} |
else |
else |
{ D = &d->link; |
{ D = &d->link; |
} |
} |
} |
} |
} |
} |
} |
} |
|
|
char *_unctrl[0400] = { "^@", |
char *_unctrl[0400] = { "^@", |
"^A", |
"^A", |
"^B", |
"^B", |
"^C", |
"^C", |
"^D", |
"^D", |
"^E", |
"^E", |
"^F", |
"^F", |
"^G", |
"^G", |
"^H", |
"^H", |
"^I", |
"^I", |
"^J", |
"^J", |
"^K", |
"^K", |
"^L", |
"^L", |
"^M", |
"^M", |
"^N", |
"^N", |
"^O", |
"^O", |
"^P", |
"^P", |
"^Q", |
"^Q", |
"^R", |
"^R", |
"^S", |
"^S", |
"^T", |
"^T", |
"^U", |
"^U", |
"^V", |
"^V", |
"^W", |
"^W", |
"^X", |
"^X", |
"^Y", |
"^Y", |
"^Z", |
"^Z", |
"^[", |
"^[", |
"^\\", |
"^\\", |
"^]", |
"^]", |
"^^", |
"^^", |
"^_", |
"^_", |
" ", |
" ", |
"!", |
"!", |
"\"", |
"\"", |
"#", |
"#", |
"$", |
"$", |
"%", |
"%", |
"&", |
"&", |
"'", |
"'", |
"(", |
"(", |
")", |
")", |
"*", |
"*", |
"+", |
"+", |
",", |
",", |
"-", |
"-", |
".", |
".", |
"/", |
"/", |
"0", |
"0", |
"1", |
"1", |
"2", |
"2", |
"3", |
"3", |
"4", |
"4", |
"5", |
"5", |
"6", |
"6", |
"7", |
"7", |
"8", |
"8", |
"9", |
"9", |
":", |
":", |
";", |
";", |
"<", |
"<", |
"=", |
"=", |
">", |
">", |
"?", |
"?", |
"@", |
"@", |
"A", |
"A", |
"B", |
"B", |
"C", |
"C", |
"D", |
"D", |
"E", |
"E", |
"F", |
"F", |
"G", |
"G", |
"H", |
"H", |
"I", |
"I", |
"J", |
"J", |
"K", |
"K", |
"L", |
"L", |
"M", |
"M", |
"N", |
"N", |
"O", |
"O", |
"P", |
"P", |
"Q", |
"Q", |
"R", |
"R", |
"S", |
"S", |
"T", |
"T", |
"U", |
"U", |
"V", |
"V", |
"W", |
"W", |
"X", |
"X", |
"Y", |
"Y", |
"Z", |
"Z", |
"[", |
"[", |
"\\", |
"\\", |
"]", |
"]", |
"^", |
"^", |
"_", |
"_", |
"`", |
"`", |
"a", |
"a", |
"b", |
"b", |
"c", |
"c", |
"d", |
"d", |
"e", |
"e", |
"f", |
"f", |
"g", |
"g", |
"h", |
"h", |
"i", |
"i", |
"j", |
"j", |
"k", |
"k", |
"l", |
"l", |
"m", |
"m", |
"n", |
"n", |
"o", |
"o", |
"p", |
"p", |
"q", |
"q", |
"r", |
"r", |
"s", |
"s", |
"t", |
"t", |
"u", |
"u", |
"v", |
"v", |
"w", |
"w", |
"x", |
"x", |
"y", |
"y", |
"z", |
"z", |
"{"/*}*/, |
"{"/*}*/, |
"|", |
"|", |
/*{*/"}", |
/*{*/"}", |
"~", |
"~", |
"^?", |
"^?", |
"|^@", |
"|^@", |
"|^A", |
"|^A", |
"|^B", |
"|^B", |
"|^C", |
"|^C", |
"|^D", |
"|^D", |
"|^E", |
"|^E", |
"|^F", |
"|^F", |
"|^G", |
"|^G", |
"|^H", |
"|^H", |
"|^I", |
"|^I", |
"|^J", |
"|^J", |
"|^K", |
"|^K", |
"|^L", |
"|^L", |
"|^M", |
"|^M", |
"|^N", |
"|^N", |
"|^O", |
"|^O", |
"|^P", |
"|^P", |
"|^Q", |
"|^Q", |
"|^R", |
"|^R", |
"|^S", |
"|^S", |
"|^T", |
"|^T", |
"|^U", |
"|^U", |
"|^V", |
"|^V", |
"|^W", |
"|^W", |
"|^X", |
"|^X", |
"|^Y", |
"|^Y", |
"|^Z", |
"|^Z", |
"|^[", |
"|^[", |
"|^\\", |
"|^\\", |
"|^]", |
"|^]", |
"|^^", |
"|^^", |
"|^_", |
"|^_", |
"| ", |
"| ", |
"|!", |
"|!", |
"|\"", |
"|\"", |
"|#", |
"|#", |
"|$", |
"|$", |
"|%", |
"|%", |
"|&", |
"|&", |
"|'", |
"|'", |
"|(", |
"|(", |
"|)", |
"|)", |
"|*", |
"|*", |
"|+", |
"|+", |
"|,", |
"|,", |
"|-", |
"|-", |
"|.", |
"|.", |
"|/", |
"|/", |
"|0", |
"|0", |
"|1", |
"|1", |
"|2", |
"|2", |
"|3", |
"|3", |
"|4", |
"|4", |
"|5", |
"|5", |
"|6", |
"|6", |
"|7", |
"|7", |
"|8", |
"|8", |
"|9", |
"|9", |
"|:", |
"|:", |
"|;", |
"|;", |
"|<", |
"|<", |
"|=", |
"|=", |
"|>", |
"|>", |
"|?", |
"|?", |
"|@", |
"|@", |
"|A", |
"|A", |
"|B", |
"|B", |
"|C", |
"|C", |
"|D", |
"|D", |
"|E", |
"|E", |
"|F", |
"|F", |
"|G", |
"|G", |
"|H", |
"|H", |
"|I", |
"|I", |
"|J", |
"|J", |
"|K", |
"|K", |
"|L", |
"|L", |
"|M", |
"|M", |
"|N", |
"|N", |
"|O", |
"|O", |
"|P", |
"|P", |
"|Q", |
"|Q", |
"|R", |
"|R", |
"|S", |
"|S", |
"|T", |
"|T", |
"|U", |
"|U", |
"|V", |
"|V", |
"|W", |
"|W", |
"|X", |
"|X", |
"|Y", |
"|Y", |
"|Z", |
"|Z", |
"|[", |
"|[", |
"|\\", |
"|\\", |
"|]", |
"|]", |
"|^", |
"|^", |
"|_", |
"|_", |
"|`", |
"|`", |
"|a", |
"|a", |
"|b", |
"|b", |
"|c", |
"|c", |
"|d", |
"|d", |
"|e", |
"|e", |
"|f", |
"|f", |
"|g", |
"|g", |
"|h", |
"|h", |
"|i", |
"|i", |
"|j", |
"|j", |
"|k", |
"|k", |
"|l", |
"|l", |
"|m", |
"|m", |
"|n", |
"|n", |
"|o", |
"|o", |
"|p", |
"|p", |
"|q", |
"|q", |
"|r", |
"|r", |
"|s", |
"|s", |
"|t", |
"|t", |
"|u", |
"|u", |
"|v", |
"|v", |
"|w", |
"|w", |
"|x", |
"|x", |
"|y", |
"|y", |
"|z", |
"|z", |
"|{"/*}*/, |
"|{"/*}*/, |
"||", |
"||", |
/*{*/"|}", |
/*{*/"|}", |
"|~", |
"|~", |
"|^?" }; |
"|^?" }; |
|
|
char *_Unctrl[0400] = { "^@", |
char *_Unctrl[0400] = { "^@", |
"^A", |
"^A", |
"^B", |
"^B", |
"^C", |
"^C", |
"^D", |
"^D", |
"^E", |
"^E", |
"^F", |
"^F", |
"^G", |
"^G", |
"^H", |
"^H", |
"^I", |
"^I", |
"^J", |
"^J", |
"^K", |
"^K", |
"^L", |
"^L", |
"^M", |
"^M", |
"^N", |
"^N", |
"^O", |
"^O", |
"^P", |
"^P", |
"^Q", |
"^Q", |
"^R", |
"^R", |
"^S", |
"^S", |
"^T", |
"^T", |
"^U", |
"^U", |
"^V", |
"^V", |
"^W", |
"^W", |
"^X", |
"^X", |
"^Y", |
"^Y", |
"^Z", |
"^Z", |
"^[", |
"^[", |
"^\\", |
"^\\", |
"^]", |
"^]", |
"^^", |
"^^", |
"^_", |
"^_", |
"sp", |
"sp", |
"!", |
"!", |
"\"", |
"\"", |
"#", |
"#", |
"$", |
"$", |
"%", |
"%", |
"&", |
"&", |
"'", |
"'", |
"(", |
"(", |
")", |
")", |
"*", |
"*", |
"+", |
"+", |
",", |
",", |
"-", |
"-", |
".", |
".", |
"/", |
"/", |
"0", |
"0", |
"1", |
"1", |
"2", |
"2", |
"3", |
"3", |
"4", |
"4", |
"5", |
"5", |
"6", |
"6", |
"7", |
"7", |
"8", |
"8", |
"9", |
"9", |
":", |
":", |
";", |
";", |
"<", |
"<", |
"=", |
"=", |
">", |
">", |
"?", |
"?", |
"@", |
"@", |
"A", |
"A", |
"B", |
"B", |
"C", |
"C", |
"D", |
"D", |
"E", |
"E", |
"F", |
"F", |
"G", |
"G", |
"H", |
"H", |
"I", |
"I", |
"J", |
"J", |
"K", |
"K", |
"L", |
"L", |
"M", |
"M", |
"N", |
"N", |
"O", |
"O", |
"P", |
"P", |
"Q", |
"Q", |
"R", |
"R", |
"S", |
"S", |
"T", |
"T", |
"U", |
"U", |
"V", |
"V", |
"W", |
"W", |
"X", |
"X", |
"Y", |
"Y", |
"Z", |
"Z", |
"[", |
"[", |
"\\", |
"\\", |
"]", |
"]", |
"^", |
"^", |
"_", |
"_", |
"`", |
"`", |
"a", |
"a", |
"b", |
"b", |
"c", |
"c", |
"d", |
"d", |
"e", |
"e", |
"f", |
"f", |
"g", |
"g", |
"h", |
"h", |
"i", |
"i", |
"j", |
"j", |
"k", |
"k", |
"l", |
"l", |
"m", |
"m", |
"n", |
"n", |
"o", |
"o", |
"p", |
"p", |
"q", |
"q", |
"r", |
"r", |
"s", |
"s", |
"t", |
"t", |
"u", |
"u", |
"v", |
"v", |
"w", |
"w", |
"x", |
"x", |
"y", |
"y", |
"z", |
"z", |
"{"/*}*/, |
"{"/*}*/, |
"|", |
"|", |
/*{*/"}", |
/*{*/"}", |
"~", |
"~", |
"^?", |
"^?", |
"|^@", |
"|^@", |
"|^A", |
"|^A", |
"|^B", |
"|^B", |
"|^C", |
"|^C", |
"|^D", |
"|^D", |
"|^E", |
"|^E", |
"|^F", |
"|^F", |
"|^G", |
"|^G", |
"|^H", |
"|^H", |
"|^I", |
"|^I", |
"|^J", |
"|^J", |
"|^K", |
"|^K", |
"|^L", |
"|^L", |
"|^M", |
"|^M", |
"|^N", |
"|^N", |
"|^O", |
"|^O", |
"|^P", |
"|^P", |
"|^Q", |
"|^Q", |
"|^R", |
"|^R", |
"|^S", |
"|^S", |
"|^T", |
"|^T", |
"|^U", |
"|^U", |
"|^V", |
"|^V", |
"|^W", |
"|^W", |
"|^X", |
"|^X", |
"|^Y", |
"|^Y", |
"|^Z", |
"|^Z", |
"|^[", |
"|^[", |
"|^\\", |
"|^\\", |
"|^]", |
"|^]", |
"|^^", |
"|^^", |
"|^_", |
"|^_", |
"|sp", |
"|sp", |
"|!", |
"|!", |
"|\"", |
"|\"", |
"|#", |
"|#", |
"|$", |
"|$", |
"|%", |
"|%", |
"|&", |
"|&", |
"|'", |
"|'", |
"|(", |
"|(", |
"|)", |
"|)", |
"|*", |
"|*", |
"|+", |
"|+", |
"|,", |
"|,", |
"|-", |
"|-", |
"|.", |
"|.", |
"|/", |
"|/", |
"|0", |
"|0", |
"|1", |
"|1", |
"|2", |
"|2", |
"|3", |
"|3", |
"|4", |
"|4", |
"|5", |
"|5", |
"|6", |
"|6", |
"|7", |
"|7", |
"|8", |
"|8", |
"|9", |
"|9", |
"|:", |
"|:", |
"|;", |
"|;", |
"|<", |
"|<", |
"|=", |
"|=", |
"|>", |
"|>", |
"|?", |
"|?", |
"|@", |
"|@", |
"|A", |
"|A", |
"|B", |
"|B", |
"|C", |
"|C", |
"|D", |
"|D", |
"|E", |
"|E", |
"|F", |
"|F", |
"|G", |
"|G", |
"|H", |
"|H", |
"|I", |
"|I", |
"|J", |
"|J", |
"|K", |
"|K", |
"|L", |
"|L", |
"|M", |
"|M", |
"|N", |
"|N", |
"|O", |
"|O", |
"|P", |
"|P", |
"|Q", |
"|Q", |
"|R", |
"|R", |
"|S", |
"|S", |
"|T", |
"|T", |
"|U", |
"|U", |
"|V", |
"|V", |
"|W", |
"|W", |
"|X", |
"|X", |
"|Y", |
"|Y", |
"|Z", |
"|Z", |
"|[", |
"|[", |
"|\\", |
"|\\", |
"|]", |
"|]", |
"|^", |
"|^", |
"|_", |
"|_", |
"|`", |
"|`", |
"|a", |
"|a", |
"|b", |
"|b", |
"|c", |
"|c", |
"|d", |
"|d", |
"|e", |
"|e", |
"|f", |
"|f", |
"|g", |
"|g", |
"|h", |
"|h", |
"|i", |
"|i", |
"|j", |
"|j", |
"|k", |
"|k", |
"|l", |
"|l", |
"|m", |
"|m", |
"|n", |
"|n", |
"|o", |
"|o", |
"|p", |
"|p", |
"|q", |
"|q", |
"|r", |
"|r", |
"|s", |
"|s", |
"|t", |
"|t", |
"|u", |
"|u", |
"|v", |
"|v", |
"|w", |
"|w", |
"|x", |
"|x", |
"|y", |
"|y", |
"|z", |
"|z", |
"|{"/*}*/, |
"|{"/*}*/, |
"||", |
"||", |
/*{*/"|}", |
/*{*/"|}", |
"|~", |
"|~", |
"|^?" }; |
"|^?" }; |
|
|
void do_undef(int expr_sharp) |
void do_undef(int expr_sharp) |
{ |
{ |
Line 4560 void do_undef(int expr_sharp) |
|
Line 4542 void do_undef(int expr_sharp) |
|
} |
} |
else |
else |
{ if (undef(mac)) |
{ if (undef(mac)) |
{ n_undefines ++; |
{ n_undefines ++; |
} |
} |
} |
} |
} |
} |
if (sharp) |
if (sharp) |
Line 4606 void do_endwhile(void) |
|
Line 4588 void do_endwhile(void) |
|
|
|
char *Index(char *s, int c) |
char *Index(char *s, int c) |
{ |
{ |
return strchr(s,c); |
return strchr(s,c); |
} |
} |
|
|
char *Rindex(char *s, int c) |
char *Rindex(char *s, int c) |
{ |
{ |
return strrchr(s,c); |
return strrchr(s,c); |
} |
} |
|
|
void Bcopy(char *from, char *to, int len) |
void Bcopy(char *from, char *to, int len) |
{ |
{ |
#if defined(GO32) |
#if defined(GO32) |
bcopy(from,to,len); |
bcopy(from,to,len); |
#else |
#else |
memmove((void *)from,(void *)to,(int)len); |
memmove((void *)from,(void *)to,(int)len); |
#endif |
#endif |
} |
} |