From 716151b46f2812581e146fe79c399a3f7b7496cc Mon Sep 17 00:00:00 2001 From: Serge Date: Thu, 26 May 2022 00:23:40 -0700 Subject: [PATCH] Update awk and libm. --- include/inttypes.h | 2 + src/cmd/awk/awk.def.h | 20 +++++++-- src/cmd/awk/awk.g.y | 50 ++++++++++++++--------- src/cmd/awk/awk.lx.l | 89 +++++++++++++++++++++-------------------- src/cmd/awk/b.c | 34 +++++++++++----- src/cmd/awk/freeze.c | 10 +++-- src/cmd/awk/lib.c | 14 +++++-- src/cmd/awk/main.c | 14 ++++--- src/cmd/awk/parse.c | 2 +- src/cmd/awk/proc.c | 1 + src/cmd/awk/run.c | 20 ++++++--- src/cmd/awk/tokenscript | 1 + src/cmd/awk/tran.c | 13 ++++-- src/libm/asin.c | 2 - src/libm/erf.c | 2 +- src/libm/exp.c | 1 - src/libm/j0.c | 1 - src/libm/j1.c | 1 - src/libm/jn.c | 2 - src/libm/log.c | 2 - src/libm/pow.c | 2 - src/libm/sqrt.c | 2 - src/libm/tan.c | 2 - 23 files changed, 175 insertions(+), 112 deletions(-) create mode 100644 include/inttypes.h diff --git a/include/inttypes.h b/include/inttypes.h new file mode 100644 index 0000000..08f4578 --- /dev/null +++ b/include/inttypes.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/src/cmd/awk/awk.def.h b/src/cmd/awk/awk.def.h index 7765e0c..7b8be5f 100644 --- a/src/cmd/awk/awk.def.h +++ b/src/cmd/awk/awk.def.h @@ -68,7 +68,7 @@ typedef struct { cell *optr; } obj; -#define BOTCH 1 +#define BOTCH 0 struct nd { char ntype; char subtype; @@ -127,9 +127,23 @@ extern int pairstack[], paircnt; #define istemp(n) (n.otype == OCELL && n.osub == CTEMP) #define isfld(n) (!donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval==EMPTY) #define isrec(n) (donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval!=EMPTY) -obj nullproc(); -obj relop(); +obj nullproc(void); +obj relop(node **a, int n); #define MAXSYM 50 #define HAT 0177 /* matches ^ in regular expr */ /* watch out for mach dep */ +struct fa; +void yyerror(char *s); +void error(int f, char *s, ...); +void syminit(void); +int freeze(char *s); +int thaw(char *s); +void run(void); +void recbld(void); +int isnumber(char *s); +int getrec(void); +int member(char c, char *s); +void fldbld(void); +void freesymtab(cell *ap); +int match(struct fa *pfa, char *p); diff --git a/src/cmd/awk/awk.g.y b/src/cmd/awk/awk.g.y index 1c0162a..61d4bc5 100644 --- a/src/cmd/awk/awk.g.y +++ b/src/cmd/awk/awk.g.y @@ -1,4 +1,8 @@ /* awk.g.y 4.1 82/05/07 */ +%code requires { +#define YYSTYPE node * +#define YYSTYPE_IS_DECLARED 1 +} %token FIRSTTOKEN /*must be first*/ %token FINAL FATAL @@ -37,14 +41,22 @@ #ifndef DEBUG # define PUTS(x) #endif -#define YYSTYPE node * int yylex(void); -void yyerror(char *s); node *valtonode(cell *a, int b); +node *stat1(int a, node *b); node *stat2(int a, node *b, node *c); node *stat3(int a, node *b, node *c, node *d); +node *stat4(int a, node *b, node *c, node *d, node *e); node *op1(int a, node *b); node *op2(int a, node *b, node *c); +node *op3(int a, node *b, node *c, node *d); +node *genprint(void); +node *pa2stat(node *a, node *b, node *c); +node *linkum(node *a, node *b); +struct fa *makedfa(node *p); +char *cclenter(char *p); +node *exptostat(node *a); +void startreg(void); %} %% @@ -91,7 +103,7 @@ else: ; field: - FIELD { PUTS("field"); $$ = valtonode($1, CFLD); } + FIELD { PUTS("field"); $$ = valtonode((cell *) $1, CFLD); } | INDIRECT term { PUTS("ind field"); $$ = op1(INDIRECT, $2); } ; @@ -100,14 +112,14 @@ if: ; lex_expr: - expr MATCHOP regular_expr { PUTS("expr~re"); $$ = op2($2, $1, makedfa($3)); } + expr MATCHOP regular_expr { PUTS("expr~re"); $$ = op2((int) $2, $1, (node *) makedfa($3)); } | '(' lex_expr ')' { PUTS("(lex_expr)"); $$ = $2; } ; var: - NUMBER {PUTS("number"); $$ = valtonode($1, CCON); } - | STRING { PUTS("string"); $$ = valtonode($1, CCON); } - | VAR { PUTS("var"); $$ = valtonode($1, CVAR); } + NUMBER {PUTS("number"); $$ = valtonode((cell *) $1, CCON); } + | STRING { PUTS("string"); $$ = valtonode((cell *) $1, CCON); } + | VAR { PUTS("var"); $$ = valtonode((cell *) $1, CVAR); } | VAR '[' expr ']' { PUTS("array[]"); $$ = op2(ARRAY, $1, $3); } | field ; @@ -121,7 +133,7 @@ term: $$ = op2(FNCN, $1, valtonode(lookup("$record", symtab, 0), CFLD)); } | FNCN '(' expr ')' { PUTS("func(expr)"); $$ = op2(FNCN, $1, $3); } - | SPRINTF print_list { PUTS("sprintf"); $$ = op1($1, $2); } + | SPRINTF print_list { PUTS("sprintf"); $$ = op1((int) $1, $2); } | SUBSTR '(' expr ',' expr ',' expr ')' { PUTS("substr(e,e,e)"); $$ = op3(SUBSTR, $3, $5, $7); } | SUBSTR '(' expr ',' expr ')' @@ -149,7 +161,7 @@ term: expr: term { PUTS("term"); } | expr term { PUTS("expr term"); $$ = op2(CAT, $1, $2); } - | var ASGNOP expr { PUTS("var=expr"); $$ = stat2($2, $1, $3); } + | var ASGNOP expr { PUTS("var=expr"); $$ = stat2((int) $2, $1, $3); } ; optNL: @@ -174,7 +186,7 @@ pa_stats: pattern: regular_expr { PUTS("regex"); - $$ = op2(MATCH, valtonode(lookup("$record", symtab, 0), CFLD), makedfa($1)); + $$ = op2(MATCH, valtonode(lookup("$record", symtab, 0), CFLD), (node *) makedfa($1)); } | rel_expr { PUTS("relexpr"); } | lex_expr { PUTS("lexexpr"); } @@ -207,10 +219,10 @@ regular_expr: r: CHAR { PUTS("regex CHAR"); $$ = op2(CHAR, (node *) 0, $1); } | DOT { PUTS("regex DOT"); $$ = op2(DOT, (node *) 0, (node *) 0); } - | CCL { PUTS("regex CCL"); $$ = op2(CCL, (node *) 0, cclenter($1)); } - | NCCL { PUTS("regex NCCL"); $$ = op2(NCCL, (node *) 0, cclenter($1)); } - | '^' { PUTS("regex ^"); $$ = op2(CHAR, (node *) 0, HAT); } - | '$' { PUTS("regex $"); $$ = op2(CHAR, (node *) 0 ,(node *) 0); } + | CCL { PUTS("regex CCL"); $$ = op2(CCL, (node *) 0, (node *) cclenter((char*)$1)); } + | NCCL { PUTS("regex NCCL"); $$ = op2(NCCL, (node *) 0, (node *) cclenter((char*)$1)); } + | '^' { PUTS("regex ^"); $$ = op2(CHAR, (node *) 0, (node *) HAT); } + | '$' { PUTS("regex $"); $$ = op2(CHAR, (node *) 0, (node *) 0); } | r OR r { PUTS("regex OR"); $$ = op2(OR, $1, $3); } | r r %prec CAT { PUTS("regex CAT"); $$ = op2(CAT, $1, $2); } @@ -222,7 +234,7 @@ r: rel_expr: expr RELOP expr - { PUTS("expr relop expr"); $$ = op2($2, $1, $3); } + { PUTS("expr relop expr"); $$ = op2((int) $2, $1, $3); } | '(' rel_expr ')' { PUTS("(relexpr)"); $$ = $2; } ; @@ -234,13 +246,13 @@ st: simple_stat: PRINT print_list redir expr - { PUTS("print>stat"); $$ = stat3($1, $2, $3, $4); } + { PUTS("print>stat"); $$ = stat3((int) $1, $2, $3, $4); } | PRINT print_list - { PUTS("print list"); $$ = stat3($1, $2, nullstat, nullstat); } + { PUTS("print list"); $$ = stat3((int) $1, $2, nullstat, nullstat); } | PRINTF print_list redir expr - { PUTS("printf>stat"); $$ = stat3($1, $2, $3, $4); } + { PUTS("printf>stat"); $$ = stat3((int) $1, $2, $3, $4); } | PRINTF print_list - { PUTS("printf list"); $$ = stat3($1, $2, nullstat, nullstat); } + { PUTS("printf list"); $$ = stat3((int) $1, $2, nullstat, nullstat); } | expr { PUTS("expr"); $$ = exptostat($1); } | { PUTS("null simple statement"); $$ = nullstat; } | error { yyclearin; yyerror("illegal statement"); } diff --git a/src/cmd/awk/awk.lx.l b/src/cmd/awk/awk.lx.l index 2e45d26..34ef9c2 100644 --- a/src/cmd/awk/awk.lx.l +++ b/src/cmd/awk/awk.lx.l @@ -3,17 +3,18 @@ %Start A str chc sc reg comment %{ -#include "awk.h" #include "awk.def.h" +#include "awk.h" #define YY_NO_INPUT /* defeat lex */ -extern int yylval; extern int mustfld; int lineno = 1; -#define CADD cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long", cbuf); BEGIN A;} +#define CADD cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long"); BEGIN A;} #define CBUFLEN 150 char cbuf[CBUFLEN]; int clen, cflag; + +cell *fieldadr(int n); %} A [a-zA-Z_] @@ -42,36 +43,36 @@ WS [ \t] PROGEND return(EOF); "&&" return(AND); "!" return(NOT); -"!=" { yylval = NE; return(RELOP); } -"~" { yylval = MATCH; return(MATCHOP); } -"!~" { yylval = NOTMATCH; return(MATCHOP); } -"<" { yylval = LT; return(RELOP); } -"<=" { yylval = LE; return(RELOP); } -"==" { yylval = EQ; return(RELOP); } -">=" { yylval = GE; return(RELOP); } -">" { yylval = GT; return(RELOP); } -">>" { yylval = APPEND; return(RELOP); } -"++" { yylval = INCR; return(INCR); } -"--" { yylval = DECR; return(DECR); } -"+=" { yylval = ADDEQ; return(ASGNOP); } -"-=" { yylval = SUBEQ; return(ASGNOP); } -"*=" { yylval = MULTEQ; return(ASGNOP); } -"/=" { yylval = DIVEQ; return(ASGNOP); } -"%=" { yylval = MODEQ; return(ASGNOP); } -"=" { yylval = ASSIGN; return(ASGNOP); } +"!=" { yylval = (node *) NE; return(RELOP); } +"~" { yylval = (node *) MATCH; return(MATCHOP); } +"!~" { yylval = (node *) NOTMATCH; return(MATCHOP); } +"<" { yylval = (node *) LT; return(RELOP); } +"<=" { yylval = (node *) LE; return(RELOP); } +"==" { yylval = (node *) EQ; return(RELOP); } +">=" { yylval = (node *) GE; return(RELOP); } +">" { yylval = (node *) GT; return(RELOP); } +">>" { yylval = (node *) APPEND; return(RELOP); } +"++" { yylval = (node *) INCR; return(INCR); } +"--" { yylval = (node *) DECR; return(DECR); } +"+=" { yylval = (node *) ADDEQ; return(ASGNOP); } +"-=" { yylval = (node *) SUBEQ; return(ASGNOP); } +"*=" { yylval = (node *) MULTEQ; return(ASGNOP); } +"/=" { yylval = (node *) DIVEQ; return(ASGNOP); } +"%=" { yylval = (node *) MODEQ; return(ASGNOP); } +"=" { yylval = (node *) ASSIGN; return(ASGNOP); } "$"{D}+ { if (atoi(yytext+1)==0) { - yylval = (hack)lookup("$record", symtab, 0); + yylval = (node *) lookup("$record", symtab, 0); return(STRING); } else { - yylval = fieldadr(atoi(yytext+1)); + yylval = (node *) fieldadr(atoi(yytext+1)); return(FIELD); } } "$"{WS}* { return(INDIRECT); } -NF { mustfld=1; yylval = (hack)setsymtab(yytext, EMPTY, 0.0, NUM, symtab); return(VAR); } +NF { mustfld=1; yylval = (node *) setsymtab(yytext, EMPTY, 0.0, NUM, symtab); return(VAR); } ({D}+("."?){D}*|"."{D}+)((e|E)("+"|-)?{D}+)? { - yylval = (hack)setsymtab(yytext, EMPTY, atof(yytext), CON|NUM, symtab); return(NUMBER); } + yylval = (node *) setsymtab(yytext, EMPTY, atof(yytext), CON|NUM, symtab); return(NUMBER); } "}"{WS}*\n { BEGIN sc; lineno++; return(';'); } "}" { BEGIN sc; return(';'); } ;\n { lineno++; return(';'); } @@ -84,27 +85,27 @@ WS [ \t] exit return(EXIT); break return(BREAK); continue return(CONTINUE); -print { yylval = PRINT; return(PRINT); } -printf { yylval = PRINTF; return(PRINTF); } -sprintf { yylval = SPRINTF; return(SPRINTF); } -split { yylval = SPLIT; return(SPLIT); } +print { yylval = (node *) PRINT; return(PRINT); } +printf { yylval = (node *) PRINTF; return(PRINTF); } +sprintf { yylval = (node *) SPRINTF; return(SPRINTF); } +split { yylval = (node *) SPLIT; return(SPLIT); } substr return(SUBSTR); index return(INDEX); in return(IN); getline return(GETLINE); -length { yylval = FLENGTH; return(FNCN); } -log { yylval = FLOG; return(FNCN); } -int { yylval = FINT; return(FNCN); } -exp { yylval = FEXP; return(FNCN); } -sqrt { yylval = FSQRT; return(FNCN); } -{A}{B}* { yylval = (hack)setsymtab(yytext, tostring(""), 0.0, STR|NUM, symtab); return(VAR); } +length { yylval = (node *) FLENGTH; return(FNCN); } +log { yylval = (node *) FLOG; return(FNCN); } +int { yylval = (node *) FINT; return(FNCN); } +exp { yylval = (node *) FEXP; return(FNCN); } +sqrt { yylval = (node *) FSQRT; return(FNCN); } +{A}{B}* { yylval = (node *) setsymtab(yytext, tostring(""), 0.0, STR|NUM, symtab); return(VAR); } \" { BEGIN str; clen=0; } # { BEGIN comment; } \n { BEGIN A; lineno++; return(NL); } . ; -. { yylval = yytext[0]; return(yytext[0]); } +. { yylval = (node *) (int) yytext[0]; return(yytext[0]); } "[" { BEGIN chc; clen=0; cflag=0; } "[^" { BEGIN chc; clen=0; cflag=1; } @@ -118,19 +119,19 @@ WS [ \t] ")" return(')'); "^" return('^'); "$" return('$'); -\\{D}{D}{D} { sscanf(yytext+1, "%o", &yylval); return(CHAR); } -\\. { if (yytext[1]=='n') yylval = '\n'; - else if (yytext[1] == 't') yylval = '\t'; - else yylval = yytext[1]; +\\{D}{D}{D} { sscanf(yytext+1, "%o", (int *) &yylval); return(CHAR); } +\\. { if (yytext[1]=='n') yylval = (node *) '\n'; + else if (yytext[1] == 't') yylval = (node *) '\t'; + else yylval = (node *) (int) yytext[1]; return(CHAR); } "/" { BEGIN A; unput('/'); } \n { yyerror("newline in regular expression"); lineno++; BEGIN A; } -. { yylval = yytext[0]; return(CHAR); } +. { yylval = (node *) (int) yytext[0]; return(CHAR); } \" { char *s; BEGIN A; cbuf[clen]=0; s = tostring(cbuf); cbuf[clen] = ' '; cbuf[++clen] = 0; - yylval = (hack)setsymtab(cbuf, s, 0.0, CON|STR, symtab); return(STRING); } + yylval = (node *) setsymtab(cbuf, s, 0.0, CON|STR, symtab); return(STRING); } \n { yyerror("newline in string"); lineno++; BEGIN A; } "\\\"" { cbuf[clen++]='"'; } "\\"n { cbuf[clen++]='\n'; } @@ -139,7 +140,7 @@ WS [ \t] . { CADD; } "\\""]" { cbuf[clen++]=']'; } -"]" { BEGIN reg; cbuf[clen]=0; yylval = (hack)tostring(cbuf); +"]" { BEGIN reg; cbuf[clen]=0; yylval = (node *) tostring(cbuf); if (cflag==0) { return(CCL); } else { return(NCCL); } } \n { yyerror("newline in character class"); lineno++; BEGIN A; } @@ -147,9 +148,10 @@ WS [ \t] %% +int input() { - register c; + int c; extern char *lexprog; if (yyin == NULL) @@ -163,6 +165,7 @@ input() return(c); } +void startreg() { BEGIN reg; diff --git a/src/cmd/awk/b.c b/src/cmd/awk/b.c index 8b02d27..b9c815c 100644 --- a/src/cmd/awk/b.c +++ b/src/cmd/awk/b.c @@ -38,6 +38,12 @@ node *point[MAXLIN]; int setcnt; int line; +void follow(node *v); +int notin(int **array, int n, int *prev); +void cfoll(node *v); +void overflo(void); +void freetr(node *p); +void penter(node *p); struct fa *makedfa(p) /* returns dfa for tree pointed to by p */ node *p; @@ -58,6 +64,7 @@ node *p; return(fap); } +void penter(p) /* set up parent pointers and leaf indices */ node *p; { @@ -83,6 +90,7 @@ node *p; } } +void freetr(p) /* free parse tree and follow sets */ node *p; { @@ -109,7 +117,7 @@ node *p; char *cclenter(p) register char *p; { - register i, c; + int i, c; char *op; op = p; @@ -137,15 +145,17 @@ register char *p; return(tostring(chars)); } +void overflo() { error(FATAL, "regular expression too long\n"); } +void cfoll(v) /* enter follow set of each leaf of vertex v into foll[leaf] */ register node *v; { - register i; + int i; int prev; int *add(); @@ -174,10 +184,11 @@ register node *v; } } +int first(p) /* collects initially active leaves of p into setvec */ register node *p; /* returns 0 or 1 depending on whether p matches empty string */ { - register b; + int b; switch(type(p)) { LEAF @@ -208,6 +219,7 @@ register node *p; /* returns 0 or 1 depending on whether p matches empty string return(-1); } +void follow(v) node *v; /* collects leaves that can follow v into setvec */ { @@ -243,8 +255,8 @@ node *v; /* collects leaves that can follow v into setvec */ } } -member(c, s) /* is c in s? */ -register char c, *s; +int +member(char c, char *s) /* is c in s? */ { while (*s) if (c == *s++) @@ -252,10 +264,11 @@ register char c, *s; return(0); } +int notin(array, n, prev) /* is setvec in array[0] thru array[n]? */ int **array; int *prev; { - register i, j; + int i, j; int *ptr; for (i=0; i<=n; i++) { ptr = array[i]; @@ -272,7 +285,7 @@ int *prev; { int *add(n) { /* remember setvec */ int *ptr, *p; - register i; + int i; if ((p = ptr = (int *) malloc((n+1)*sizeof(int))) == NULL) overflo(); *ptr = n; @@ -288,8 +301,8 @@ int *add(n) { /* remember setvec */ struct fa *cgotofn() { - register i, k; - register int *ptr; + int i, k; + int *ptr; char c; char *p; node *cp; @@ -505,11 +518,12 @@ struct fa *cgotofn() return(where[0]); } +int match(pfa, p) register struct fa *pfa; register char *p; { - register count; + int count; char c; if (p == 0) return(0); if (pfa->cch == 1) { /* fast test for first character, if possible */ diff --git a/src/cmd/awk/freeze.c b/src/cmd/awk/freeze.c index e5b171a..f805ba3 100644 --- a/src/cmd/awk/freeze.c +++ b/src/cmd/awk/freeze.c @@ -1,12 +1,15 @@ -#include "stdio.h" +#include +#include +#include +int freeze(s) char *s; { int fd; - unsigned int *len; + size_t len; - len = (unsigned int *)sbrk(0); + len = (size_t) sbrk(0); if((fd = creat(s, 0666)) < 0) { perror(s); return(1); @@ -17,6 +20,7 @@ freeze(s) return(0); } +int thaw(s) char *s; { diff --git a/src/cmd/awk/lib.c b/src/cmd/awk/lib.c index 6e5b2b0..87a89f7 100644 --- a/src/cmd/awk/lib.c +++ b/src/cmd/awk/lib.c @@ -30,6 +30,8 @@ cell fldtab[MAXFLD] = { /*room for fields */ }; int maxfld = 0; /* last used field */ +void setclvar(char *s); + void error(int f, char *s, ...) { @@ -46,12 +48,13 @@ error(int f, char *s, ...) exit(2); } +int getrec() { register char *rr; extern int svargc; extern char **svargv; - register c, sep; + int c, sep; dprintf("**RS=%o, **FS=%o\n", **RS, **FS, NULL); donefld = 0; @@ -108,6 +111,7 @@ getrec() return(0); /* true end of file */ } +void setclvar(s) /* set var=value from s */ char *s; { @@ -122,6 +126,7 @@ char *s; dprintf("command line set %s to |%s|\n", s, p, NULL); } +void fldbld() { register char *r, *fr, sep; @@ -183,6 +188,7 @@ fldbld() printf("field %d: |%s|\n", i, fldtab[i].sval); } +void recbld() { int i; @@ -193,7 +199,7 @@ recbld() r = record; for (i = 1; i <= *NF; i++) { p = getsval(&fldtab[i]); - while (*r++ = *p++) + while ((*r++ = *p++)) ; *(r-1) = **OFS; } @@ -223,6 +229,7 @@ yyerror(s) errorflag = 2; } +void PUTS(s) char *s; { @@ -231,10 +238,11 @@ PUTS(s) #define MAXEXPON 38 /* maximum exponenet for fp number */ +int isnumber(s) register char *s; { - register d1, d2; + int d1, d2; int point; char *es; diff --git a/src/cmd/awk/main.c b/src/cmd/awk/main.c index 066bcf4..cdb68f3 100644 --- a/src/cmd/awk/main.c +++ b/src/cmd/awk/main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "awk.def.h" #include "awk.h" @@ -13,12 +14,12 @@ int svargc; char **svargv, **xargv; extern FILE *yyin; /* lex input file */ char *lexprog; /* points to program argument if it exists */ -extern errorflag; /* non-zero if any syntax errors; set by yyerror */ int filefd, symnum, ansfd; char *filelist; -extern int maxsym, errno; +extern int maxsym; +int main(argc, argv) int argc; char *argv[]; @@ -29,10 +30,10 @@ main(argc, argv) while (argc > 1) { argc--; argv++; - /* this nonsense is because gcos argument handling */ - /* folds -F into -f. accordingly, one checks the next - /* character after f to see if it's -f file or -Fx. - */ + /* this nonsense is because gcos argument handling + * folds -F into -f. accordingly, one checks the next + * character after f to see if it's -f file or -Fx. + */ if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f' && argv[0][2] == '\0') { yyin = fopen(argv[1], "r"); if (yyin == NULL) @@ -92,6 +93,7 @@ main(argc, argv) exit(errorflag); } +int yywrap() { return(1); diff --git a/src/cmd/awk/parse.c b/src/cmd/awk/parse.c index 9136486..91ad149 100644 --- a/src/cmd/awk/parse.c +++ b/src/cmd/awk/parse.c @@ -119,7 +119,7 @@ node *stat4(a,b,c,d,e) node *b, *c, *d, *e; node *valtonode(a, b) cell *a; { register node *x; - x = node0(a); + x = node0((int) a); x->ntype = NVALUE; x->subtype = b; return(x); diff --git a/src/cmd/awk/proc.c b/src/cmd/awk/proc.c index fd63e5b..247015b 100644 --- a/src/cmd/awk/proc.c +++ b/src/cmd/awk/proc.c @@ -1,6 +1,7 @@ #include #include #include +#include "awk.def.h" #include "awk.h" struct tok diff --git a/src/cmd/awk/run.c b/src/cmd/awk/run.c index cddf07d..7e8b623 100644 --- a/src/cmd/awk/run.c +++ b/src/cmd/awk/run.c @@ -31,6 +31,10 @@ static cell nullval = { EMPTY, EMPTY, 0.0, NUM, 0 }; obj true = { OBOOL, BTRUE, 0 }; obj false = { OBOOL, BFALSE, 0 }; +void redirprint(char *s, int a, node *b); +void tempfree(obj a); + +void run() { register int i; @@ -40,7 +44,7 @@ run() /* Wait for children to complete if output to a pipe. */ for (i=0; isval; else s = getsval(x.optr); tempfree(x); - i = match(a[1], s); + i = match((struct fa*) a[1], s); if (n==MATCH && i==1 || n==NOTMATCH && i==0) return(true); else @@ -224,6 +228,7 @@ obj relop(a,n) node **a; } } +void tempfree(a) obj a; { if (!istemp(a)) return; @@ -397,7 +402,7 @@ char *format(s,a) char *s; node *a; return(buf); } -obj asprintf(a,n) node **a; +obj asprintf1(a,n) node **a; { obj x; node *y; @@ -592,7 +597,7 @@ obj aprintf(a,n) node **a; { obj x; - x = asprintf(a,n); + x = asprintf1(a,n); if (a[1]==NULL) { printf("%s", x.optr->sval); tempfree(x); @@ -840,7 +845,11 @@ obj print(a,n) node **a; return(false); } -obj nullproc() {} +obj nullproc() +{ + static const obj zero; + return zero; +} obj nodetoobj(a) node *a; { @@ -853,6 +862,7 @@ obj nodetoobj(a) node *a; return(x); } +void redirprint(s, a, b) char *s; node *b; { register int i; diff --git a/src/cmd/awk/tokenscript b/src/cmd/awk/tokenscript index 4646c8f..ec36853 100644 --- a/src/cmd/awk/tokenscript +++ b/src/cmd/awk/tokenscript @@ -1,5 +1,6 @@ e y.tab.h 1,$g!/#define /d +1,$g/YYSTYPE/d 1,$s/# *define *// 1,$s/^/{"/ 1,$s/ /", / diff --git a/src/cmd/awk/tran.c b/src/cmd/awk/tran.c index 68da665..651fa09 100644 --- a/src/cmd/awk/tran.c +++ b/src/cmd/awk/tran.c @@ -19,6 +19,10 @@ cell *recloc; /* location of record */ cell *nrloc; /* NR */ cell *nfloc; /* NF */ +void checkval(cell *vp); +int hash(char *s); + +void syminit() { setsymtab("0", tostring("0"), 0.0, NUM|STR|CON|FLD, symtab); @@ -51,6 +55,7 @@ cell **makesymtab() return(cp); } +void freesymtab(ap) /* free symbol table */ cell *ap; { @@ -76,7 +81,7 @@ awkfloat f; unsigned t; cell **tab; { - register h; + int h; register cell *p; cell *lookup(); @@ -101,13 +106,14 @@ cell **tab; return(p); } +int hash(s) /* form hash value for string s */ -register unsigned char *s; +char *s; { register int hashval; for (hashval = 0; *s != '\0'; ) - hashval += *s++; + hashval += (unsigned char) *s++; return(hashval % MAXSYM); } @@ -206,6 +212,7 @@ register cell *vp; return(vp->sval); } +void checkval(vp) register cell *vp; { diff --git a/src/libm/asin.c b/src/libm/asin.c index 8373f93..1f9a459 100644 --- a/src/libm/asin.c +++ b/src/libm/asin.c @@ -7,8 +7,6 @@ #include #include -int errno; - static double pio2 = 1.570796326794896619; double diff --git a/src/libm/erf.c b/src/libm/erf.c index e83bbd3..9ecaace 100644 --- a/src/libm/erf.c +++ b/src/libm/erf.c @@ -19,11 +19,11 @@ * Coefficients for large x are #5667 from Hart & Cheney (18.72D). */ #include +#include #define M 7 #define N 9 -int errno; static double torp = 1.1283791670955125738961589031; static double p1[] = { 0.804373630960840172832162e5, diff --git a/src/libm/exp.c b/src/libm/exp.c index e145f08..2b6c95b 100644 --- a/src/libm/exp.c +++ b/src/libm/exp.c @@ -8,7 +8,6 @@ #include #include -int errno; static double p0 = .2080384346694663001443843411e7; static double p1 = .3028697169744036299076048876e5; static double p2 = .6061485330061080841615584556e2; diff --git a/src/libm/j0.c b/src/libm/j0.c index 92ef074..3e482f3 100644 --- a/src/libm/j0.c +++ b/src/libm/j0.c @@ -39,7 +39,6 @@ #include #include -int errno; static double pzero, qzero; static double tpi = .6366197723675813430755350535e0; static double pio4 = .7853981633974483096156608458e0; diff --git a/src/libm/j1.c b/src/libm/j1.c index ce513f7..51c91d0 100644 --- a/src/libm/j1.c +++ b/src/libm/j1.c @@ -39,7 +39,6 @@ #include #include -int errno; static double pzero, qzero; static double tpi = .6366197723675813430755350535e0; static double pio4 = .7853981633974483096156608458e0; diff --git a/src/libm/jn.c b/src/libm/jn.c index a5c4e0c..6e0bc86 100644 --- a/src/libm/jn.c +++ b/src/libm/jn.c @@ -29,8 +29,6 @@ #include #include -int errno; - double jn(n,x) int n; double x;{ int i; diff --git a/src/libm/log.c b/src/libm/log.c index ac0fb81..7921d9f 100644 --- a/src/libm/log.c +++ b/src/libm/log.c @@ -9,8 +9,6 @@ #include #include -int errno; - static double _log2 = 0.693147180559945309e0; static double ln10 = 2.302585092994045684; static double sqrto2 = 0.707106781186547524e0; diff --git a/src/libm/pow.c b/src/libm/pow.c index 31caed4..9b732e0 100644 --- a/src/libm/pow.c +++ b/src/libm/pow.c @@ -5,8 +5,6 @@ #include #include -int errno; - double pow(arg1,arg2) double arg1, arg2; diff --git a/src/libm/sqrt.c b/src/libm/sqrt.c index a025bbe..8c6bdc9 100644 --- a/src/libm/sqrt.c +++ b/src/libm/sqrt.c @@ -7,8 +7,6 @@ #include #include -int errno; - double sqrt(arg) double arg; diff --git a/src/libm/tan.c b/src/libm/tan.c index fb9bf3b..1c5cd53 100644 --- a/src/libm/tan.c +++ b/src/libm/tan.c @@ -7,8 +7,6 @@ #include #include -int errno; - static double invpi = 1.27323954473516268; static double p0 = -0.1306820264754825668269611177e+5; static double p1 = 0.1055970901714953193602353981e+4;