1*48236Sbostic /*-
2*48236Sbostic * Copyright (c) 1991 The Regents of the University of California.
3*48236Sbostic * All rights reserved.
4*48236Sbostic *
5*48236Sbostic * %sccs.include.proprietary.c%
6*48236Sbostic */
7*48236Sbostic
814474Ssam #ifndef lint
9*48236Sbostic char copyright[] =
10*48236Sbostic "@(#) Copyright (c) 1991 The Regents of the University of California.\n\
11*48236Sbostic All rights reserved.\n";
12*48236Sbostic #endif /* not lint */
136675Smckusick
14*48236Sbostic #ifndef lint
15*48236Sbostic static char sccsid[] = "@(#)proc.c 4.4 (Berkeley) 04/17/91";
16*48236Sbostic #endif /* not lint */
17*48236Sbostic
186675Smckusick #include "awk.h"
196675Smckusick #define NULL 0
206675Smckusick struct xx
216675Smckusick { int token;
226675Smckusick char *name;
236675Smckusick char *pname;
246675Smckusick } proc[] = {
256675Smckusick { PROGRAM, "program", NULL},
266675Smckusick { BOR, "boolop", " || "},
276675Smckusick { AND, "boolop", " && "},
286675Smckusick { NOT, "boolop", " !"},
296675Smckusick { NE, "relop", " != "},
306675Smckusick { EQ, "relop", " == "},
316675Smckusick { LE, "relop", " <= "},
326675Smckusick { LT, "relop", " < "},
336675Smckusick { GE, "relop", " >= "},
346675Smckusick { GT, "relop", " > "},
356675Smckusick { ARRAY, "array", NULL},
366675Smckusick { INDIRECT, "indirect", "$("},
376675Smckusick { SUBSTR, "substr", "substr"},
386675Smckusick { INDEX, "sindex", "sindex"},
396675Smckusick { SPRINTF, "asprintf", "sprintf "},
406675Smckusick { ADD, "arith", " + "},
416675Smckusick { MINUS, "arith", " - "},
426675Smckusick { MULT, "arith", " * "},
436675Smckusick { DIVIDE, "arith", " / "},
446675Smckusick { MOD, "arith", " % "},
456675Smckusick { UMINUS, "arith", " -"},
466675Smckusick { PREINCR, "incrdecr", "++"},
476675Smckusick { POSTINCR, "incrdecr", "++"},
486675Smckusick { PREDECR, "incrdecr", "--"},
496675Smckusick { POSTDECR, "incrdecr", "--"},
506675Smckusick { CAT, "cat", " "},
516675Smckusick { PASTAT, "pastat", NULL},
526675Smckusick { PASTAT2, "dopa2", NULL},
536675Smckusick { MATCH, "matchop", " ~ "},
546675Smckusick { NOTMATCH, "matchop", " !~ "},
556675Smckusick { PRINTF, "aprintf", "printf"},
566675Smckusick { PRINT, "print", "print"},
576675Smckusick { SPLIT, "split", "split"},
586675Smckusick { ASSIGN, "assign", " = "},
596675Smckusick { ADDEQ, "assign", " += "},
606675Smckusick { SUBEQ, "assign", " -= "},
616675Smckusick { MULTEQ, "assign", " *= "},
626675Smckusick { DIVEQ, "assign", " /= "},
636675Smckusick { MODEQ, "assign", " %= "},
646675Smckusick { IF, "ifstat", "if("},
656675Smckusick { WHILE, "whilestat", "while("},
666675Smckusick { FOR, "forstat", "for("},
676675Smckusick { IN, "instat", "instat"},
686675Smckusick { NEXT, "jump", "next"},
696675Smckusick { EXIT, "jump", "exit"},
706675Smckusick { BREAK, "jump", "break"},
716675Smckusick { CONTINUE, "jump", "continue"},
726675Smckusick { FNCN, "fncn", "fncn"},
736675Smckusick { GETLINE, "getline", "getline"},
746675Smckusick { 0, ""},
756675Smckusick };
766675Smckusick #define SIZE LASTTOKEN - FIRSTTOKEN
776675Smckusick char *table[SIZE];
786675Smckusick char *names[SIZE];
main()796675Smckusick main()
806675Smckusick { struct xx *p;
816675Smckusick int i;
826675Smckusick printf("#include \"awk.def\"\n");
836675Smckusick printf("obj nullproc();\n");
846675Smckusick for(p=proc;p->token!=0;p++)
856675Smckusick if(p==proc || strcmp(p->name, (p-1)->name))
866675Smckusick printf("extern obj %s();\n",p->name);
876675Smckusick for(p=proc;p->token!=0;p++)
886675Smckusick table[p->token-FIRSTTOKEN]=p->name;
896675Smckusick printf("obj (*proctab[%d])() = {\n", SIZE);
906675Smckusick for(i=0;i<SIZE;i++)
916675Smckusick if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN));
926675Smckusick else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]);
936675Smckusick printf("};\n");
946675Smckusick printf("char *printname[%d] = {\n", SIZE);
956675Smckusick for(p=proc; p->token!=0; p++)
966675Smckusick names[p->token-FIRSTTOKEN] = p->pname;
976675Smckusick for(i=0; i<SIZE; i++)
9810794Ssam printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),
9910794Ssam names[i]?names[i]:"");
1006675Smckusick printf("};\n");
1016675Smckusick exit(0);
1026675Smckusick }
103