Annotation of 41BSD/cmd/awk/proc.c, revision 1.1.1.1

1.1       root        1: #include "awk.h"
                      2: #define NULL 0
                      3: struct xx
                      4: {      int token;
                      5:        char *name;
                      6:        char *pname;
                      7: } proc[] = {
                      8:        { PROGRAM, "program", NULL},
                      9:        { BOR, "boolop", " || "},
                     10:        { AND, "boolop", " && "},
                     11:        { NOT, "boolop", " !"},
                     12:        { NE, "relop", " != "},
                     13:        { EQ, "relop", " == "},
                     14:        { LE, "relop", " <= "},
                     15:        { LT, "relop", " < "},
                     16:        { GE, "relop", " >= "},
                     17:        { GT, "relop", " > "},
                     18:        { ARRAY, "array", NULL},
                     19:        { INDIRECT, "indirect", "$("},
                     20:        { SUBSTR, "substr", "substr"},
                     21:        { INDEX, "sindex", "sindex"},
                     22:        { SPRINTF, "asprintf", "sprintf "},
                     23:        { ADD, "arith", " + "},
                     24:        { MINUS, "arith", " - "},
                     25:        { MULT, "arith", " * "},
                     26:        { DIVIDE, "arith", " / "},
                     27:        { MOD, "arith", " % "},
                     28:        { UMINUS, "arith", " -"},
                     29:        { PREINCR, "incrdecr", "++"},
                     30:        { POSTINCR, "incrdecr", "++"},
                     31:        { PREDECR, "incrdecr", "--"},
                     32:        { POSTDECR, "incrdecr", "--"},
                     33:        { CAT, "cat", " "},
                     34:        { PASTAT, "pastat", NULL},
                     35:        { PASTAT2, "dopa2", NULL},
                     36:        { MATCH, "matchop", " ~ "},
                     37:        { NOTMATCH, "matchop", " !~ "},
                     38:        { PRINTF, "aprintf", "printf"},
                     39:        { PRINT, "print", "print"},
                     40:        { SPLIT, "split", "split"},
                     41:        { ASSIGN, "assign", " = "},
                     42:        { ADDEQ, "assign", " += "},
                     43:        { SUBEQ, "assign", " -= "},
                     44:        { MULTEQ, "assign", " *= "},
                     45:        { DIVEQ, "assign", " /= "},
                     46:        { MODEQ, "assign", " %= "},
                     47:        { IF, "ifstat", "if("},
                     48:        { WHILE, "whilestat", "while("},
                     49:        { FOR, "forstat", "for("},
                     50:        { IN, "instat", "instat"},
                     51:        { NEXT, "jump", "next"},
                     52:        { EXIT, "jump", "exit"},
                     53:        { BREAK, "jump", "break"},
                     54:        { CONTINUE, "jump", "continue"},
                     55:        { FNCN, "fncn", "fncn"},
                     56:        { GETLINE, "getline", "getline"},
                     57:        { 0, ""},
                     58: };
                     59: #define SIZE   LASTTOKEN - FIRSTTOKEN
                     60: char *table[SIZE];
                     61: char *names[SIZE];
                     62: main()
                     63: {      struct xx *p;
                     64:        int i;
                     65:        printf("#include \"awk.def\"\n");
                     66:        printf("obj nullproc();\n");
                     67:        for(p=proc;p->token!=0;p++)
                     68:                if(p==proc || strcmp(p->name, (p-1)->name))
                     69:                        printf("extern obj %s();\n",p->name);
                     70:        for(p=proc;p->token!=0;p++)
                     71:                table[p->token-FIRSTTOKEN]=p->name;
                     72:        printf("obj (*proctab[%d])() = {\n", SIZE);
                     73:        for(i=0;i<SIZE;i++)
                     74:                if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN));
                     75:                else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]);
                     76:        printf("};\n");
                     77:        printf("char *printname[%d] = {\n", SIZE);
                     78:        for(p=proc; p->token!=0; p++)
                     79:                names[p->token-FIRSTTOKEN] = p->pname;
                     80:        for(i=0; i<SIZE; i++)
                     81:                printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),names[i]);
                     82:        printf("};\n");
                     83:        exit(0);
                     84: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.