diff options
Diffstat (limited to 'usr/src/cmd/awk/maketab.c')
| -rw-r--r-- | usr/src/cmd/awk/maketab.c | 78 |
1 files changed, 56 insertions, 22 deletions
diff --git a/usr/src/cmd/awk/maketab.c b/usr/src/cmd/awk/maketab.c index 5c7d8601ea..9c625aabcc 100644 --- a/usr/src/cmd/awk/maketab.c +++ b/usr/src/cmd/awk/maketab.c @@ -1,4 +1,28 @@ /* + * Copyright (C) Lucent Technologies 1997 + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby + * granted, provided that the above copyright notice appear in all + * copies and that both that the copyright notice and this + * permission notice and warranty disclaimer appear in supporting + * documentation, and that the name Lucent Technologies or any of + * its entities not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. + * + * LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. + * IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + */ + +/* * CDDL HEADER START * * The contents of this file are subject to the terms of the @@ -26,6 +50,12 @@ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ +/* + * this program makes the table to link function names + * and type indices that is used by execute() in run.c. + * it finds the indices in ytab.h, produced by yacc. + */ + #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -35,8 +65,8 @@ struct xx { int token; - char *name; - char *pname; + const char *name; + const char *pname; } proc[] = { { PROGRAM, "program", NULL }, { BOR, "boolop", " || " }, @@ -54,13 +84,14 @@ struct xx { { SUB, "sub", "sub" }, { GSUB, "gsub", "gsub" }, { INDEX, "sindex", "sindex" }, - { SPRINTF, "a_sprintf", "sprintf " }, + { SPRINTF, "awksprintf", "sprintf " }, { ADD, "arith", " + " }, { MINUS, "arith", " - " }, { MULT, "arith", " * " }, { DIVIDE, "arith", " / " }, { MOD, "arith", " % " }, { UMINUS, "arith", " -" }, + { UPLUS, "arith", " +" }, { POWER, "arith", " **" }, { PREINCR, "incrdecr", "++" }, { POSTINCR, "incrdecr", "++" }, @@ -73,10 +104,10 @@ struct xx { { NOTMATCH, "matchop", " !~ " }, { MATCHFCN, "matchop", "matchop" }, { INTEST, "intest", "intest" }, - { PRINTF, "aprintf", "printf" }, - { PRINT, "print", "print" }, + { PRINTF, "awkprintf", "printf" }, + { PRINT, "printstat", "print" }, { CLOSE, "closefile", "closefile" }, - { DELETE, "delete", "delete" }, + { DELETE, "awkdelete", "awkdelete" }, { SPLIT, "split", "split" }, { ASSIGN, "assign", " = " }, { ADDEQ, "assign", " += " }, @@ -92,6 +123,7 @@ struct xx { { DO, "dostat", "do" }, { IN, "instat", "instat" }, { NEXT, "jump", "next" }, + { NEXTFILE, "jump", "nextfile" }, { EXIT, "jump", "exit" }, { BREAK, "jump", "break" }, { CONTINUE, "jump", "continue" }, @@ -100,23 +132,24 @@ struct xx { { CALL, "call", "call" }, { ARG, "arg", "arg" }, { VARNF, "getnf", "NF" }, - { GETLINE, "getaline", "getline" }, + { GETLINE, "awkgetline", "getline" }, { 0, "", "" }, }; -#define SIZE LASTTOKEN - FIRSTTOKEN + 1 -char *table[SIZE]; +#define SIZE (LASTTOKEN - FIRSTTOKEN + 1) +const char *table[SIZE]; char *names[SIZE]; int -main() +main(int argc, char *argv[]) { - struct xx *p; + const struct xx *p; int i, n, tok; char c; FILE *fp; - char buf[100], name[100], def[100]; + char buf[200], name[200], def[200]; + printf("#include <stdio.h>\n"); printf("#include \"awk.h\"\n"); printf("#include \"y.tab.h\"\n\n"); @@ -124,28 +157,29 @@ main() fprintf(stderr, gettext("maketab can't open y.tab.h!\n")); exit(1); } - printf("static uchar *printname[%d] = {\n", SIZE); + printf("static char *printname[%d] = {\n", SIZE); i = 0; while (fgets(buf, sizeof (buf), fp) != NULL) { n = sscanf(buf, "%1c %s %s %d", &c, def, name, &tok); - /* not a valid #define? */ - if (c != '#' || n != 4 && strcmp(def, "define") != 0) + if (c != '#' || (n != 4 && strcmp(def, "define") != 0)) { + /* not a valid #define */ continue; + } if (tok < FIRSTTOKEN || tok > LASTTOKEN) { fprintf(stderr, gettext("maketab funny token %d %s\n"), tok, buf); exit(1); } - names[tok-FIRSTTOKEN] = malloc(strlen(name)+1); + names[tok-FIRSTTOKEN] = (char *)malloc(strlen(name)+1); strcpy(names[tok-FIRSTTOKEN], name); - printf("\t(uchar *) \"%s\",\t/* %d */\n", name, tok); + printf("\t(char *) \"%s\",\t/* %d */\n", name, tok); i++; } printf("};\n\n"); for (p = proc; p->token != 0; p++) table[p->token-FIRSTTOKEN] = p->name; - printf("\nCell *(*proctab[%d])() = {\n", SIZE); + printf("\nCell *(*proctab[%d])(Node **, int) = {\n", SIZE); for (i = 0; i < SIZE; i++) if (table[i] == 0) printf("\tnullproc,\t/* %s */\n", names[i]); @@ -153,14 +187,14 @@ main() printf("\t%s,\t/* %s */\n", table[i], names[i]); printf("};\n\n"); - printf("uchar *\ntokname(int n)\n"); /* print a tokname() function */ + printf("char *\ntokname(int n)\n"); /* print a tokname() function */ printf("{\n"); printf(" static char buf[100];\n\n"); printf(" if (n < FIRSTTOKEN || n > LASTTOKEN) {\n"); printf(" (void) sprintf(buf, \"token %%d\", n);\n"); - printf(" return ((uchar *)buf);\n"); + printf(" return (buf);\n"); printf(" }\n"); - printf(" return printname[n-257];\n"); + printf(" return printname[n-FIRSTTOKEN];\n"); printf("}\n"); - exit(0); + return (0); } |
