64-bit safe. [rsc] --rw-rw-r-- M 323293 glenda sys 13457 Nov 4 08:15 sys/src/cmd/bc.y /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:6,13 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:6,13 #define bsp_max 5000 Biobuf *in; - Biobuf stdin; - Biobuf stdout; + Biobuf bstdin; + Biobuf bstdout; char cary[1000]; char* cp = { cary }; char string[1000]; /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:17,23 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:17,23 int bindx = 0; int lev = 0; int ln; - int* ttp; + char* ttp; char* ss = ""; int bstack[10] = { 0 }; char* numb[15] = /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:26,33 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:26,33 " 6", " 7", " 8", " 9", " 10", " 11", " 12", " 13", " 14" }; - int* pre; - int* post; + char* pre; + char* post; long peekc = -1; int sargc; /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:59,81 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:59,81 "u","v","w","x","y","z" }; char* dot = { "." }; - int bspace[bsp_max]; - int* bsp_nxt = { bspace }; + char* bspace[bsp_max]; + char** bsp_nxt = bspace; int bdebug = 0; int lflag; int cflag; int sflag; - int* bundle(int, ...); - void conout(int*, char*); + char* bundle(int, ...); + void conout(char*, char*); int cpeek(int, int, int); int getch(void); - int* geta(char*); - int* getf(char*); + char* geta(char*); + char* getf(char*); void getout(void); - void output(int*); + void output(char*); void pp(char*); - void routput(int*); + void routput(char*); void tp(char*); void yyerror(char*, ...); int yyparse(void); /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:86,98 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:86,97 %} %union { - int* iptr; char* cptr; int cc; } - %type pstat stat stat1 def slist dlets e ase nase - %type slist re fprefix cargs eora cons constant lora + %type pstat stat stat1 def slist dlets e ase nase + %type slist re fprefix cargs eora cons constant lora %type crs %token LETTER EQOP _AUTO DOT /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:122,128 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:121,127 ttp = bundle(6, pre, $6, post , "0", numb[lev], "Q"); conout(ttp, (char*)$1); rcrs = crs; - output((int*)""); /* this is horse puk!! */ + output(""); lev = bindx = 0; } /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:548,555 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:547,554 _DEFINE LETTER '(' { $$ = getf($2); - pre = (int*)""; - post = (int*)""; + pre = (char*)""; + post = (char*)""; lev = 1; bindx = 0; bstack[bindx] = 0; /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:791,797 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:790,796 if(ifile > sargc) { if(ifile >= sargc+2) getout(); - in = &stdin; + in = &bstdin; Binit(in, 0, OREAD); ln = 0; goto loop; /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:807,819 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:806,820 return 0; /* shut up ken */ } - int* + char* bundle(int a, ...) { - int i, *p, *q; - - p = &a; - i = *p++; + int i; + char **q; + va_list arg; + + i = a; + va_start(arg, a); q = bsp_nxt; if(bdebug) fprint(2, "bundle %d elements at %lx\n", i, q); /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:820,863 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:821,868 while(i-- > 0) { if(bsp_nxt >= &bspace[bsp_max]) yyerror("bundling space exceeded"); - *bsp_nxt++ = *p++; + *bsp_nxt++ = va_arg(arg, char*); } *bsp_nxt++ = 0; - yyval.iptr = q; - return q; + va_end(arg); + yyval.cptr = (char*)q; + return (char*)q; } void - routput(int *p) + routput(char *p) { + char **pp; + if(bdebug) fprint(2, "routput(%lx)\n", p); - if(p >= &bspace[0] && p < &bspace[bsp_max]) { + if((char**)p >= &bspace[0] && (char**)p < &bspace[bsp_max]) { /* part of a bundle */ - while(*p != 0) - routput((int*)(*p++)); + pp = (char**)p; + while(*pp != 0) + routput(*pp++); } else - Bprint(&stdout, (char*)p); /* character string */ + Bprint(&bstdout, p); /* character string */ } void - output(int *p) + output(char *p) { routput(p); bsp_nxt = &bspace[0]; - Bprint(&stdout, "\n"); - Bflush(&stdout); + Bprint(&bstdout, "\n"); + Bflush(&bstdout); cp = cary; crs = rcrs; } void - conout(int *p, char *s) + conout(char *p, char *s) { - Bprint(&stdout, "["); + Bprint(&bstdout, "["); routput(p); - Bprint(&stdout, "]s%s\n", s); - Bflush(&stdout); + Bprint(&bstdout, "]s%s\n", s); + Bflush(&bstdout); lev--; } /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:866,873 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:871,878 { if(ifile > sargc) ss = "teletype"; - Bprint(&stdout, "c[%s on line %d, %s]pc\n", s, ln+1, ss); - Bflush(&stdout); + Bprint(&bstdout, "c[%s on line %d, %s]pc\n", s, ln+1, ss); + Bflush(&bstdout); cp = cary; crs = rcrs; bindx = 0; /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:880,888 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:885,893 { /* puts the relevant stuff on pre and post for the letter s */ bundle(3, "S", s, pre); - pre = yyval.iptr; + pre = yyval.cptr; bundle(4, post, "L", s, "s."); - post = yyval.iptr; + post = yyval.cptr; } void /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:890,908 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:895,913 { /* same as pp, but for temps */ bundle(3, "0S", s, pre); - pre = yyval.iptr; + pre = yyval.cptr; bundle(4, post, "L", s, "s."); - post = yyval.iptr; + post = yyval.cptr; } void yyinit(int argc, char **argv) { - Binit(&stdout, 1, OWRITE); + Binit(&bstdout, 1, OWRITE); sargv = argv; sargc = argc - 1; if(sargc == 0) { - in = &stdin; + in = &bstdin; Binit(in, 0, OREAD); } else if((in = Bopen(sargv[1], OREAD)) == 0) yyerror("cannot open input file"); /n/sourcesdump/2005/1104/plan9/sys/src/cmd/bc.y:914,934 - /n/sourcesdump/2005/1105/plan9/sys/src/cmd/bc.y:919,939 void getout(void) { - Bprint(&stdout, "q"); - Bflush(&stdout); + Bprint(&bstdout, "q"); + Bflush(&bstdout); exits(0); } - int* + char* getf(char *p) { - return (int*)funtab[*p - 'a']; + return funtab[*p - 'a']; } - int* + char* geta(char *p) { - return (int*)atab[*p - 'a']; + return atab[*p - 'a']; } void