Annotation of researchv9/sys/conf/src/config/config.l, revision 1.1

1.1     ! root        1: %{
        !             2: /*     config.l        1.8     81/05/18        */
        !             3: 
        !             4: #include <ctype.h>
        !             5: #include "y.tab.h"
        !             6: #include "config.h"
        !             7: 
        !             8: #define tprintf if (do_trace) printf
        !             9: 
        !            10: YYSTYPE yylval;
        !            11: 
        !            12: /*
        !            13:  * Key word table
        !            14:  */
        !            15: 
        !            16: struct kt {
        !            17:        char *kt_name;
        !            18:        int kt_val;
        !            19: } key_words[] = {
        !            20:        "cpu", CPU, "ident", IDENT, "config", CONFIG, "options", OPTIONS,
        !            21:        "device", DEVICE, "controller", CONTROLLER, "uba", UBA, "mba", MBA,
        !            22:        "csr", CSR, "nexus", NEXUS, "drive", DRIVE, "vector", VECTOR,
        !            23:        "pseudo-device", PSEUDO_DEVICE, "flags", FLAGS, "trace", TRACE,
        !            24:        "disk", DISK, "tape", DEVICE, "slave", SLAVE, "at", AT,
        !            25:        "hz", HZ, "timezone", TIMEZONE, "dst", DST, "maxusers", MAXUSERS,
        !            26:        "master", MASTER, "mkfile", MAKEFILE,
        !            27:        "machine", MACHINE, "priority", PRIORITY,
        !            28:        0,0,
        !            29: };
        !            30: %}
        !            31: WORD   [A-Za-z_][-A-Za-z_]*
        !            32: %%
        !            33: {WORD}         {
        !            34:                        int i;
        !            35: 
        !            36:                        if ((i = kw_lookup(yytext)) == -1)
        !            37:                        {
        !            38:                                yylval.cp = yytext;
        !            39:                                tprintf("id(%s) ", yytext);
        !            40:                                return ID;
        !            41:                        }
        !            42:                        tprintf("(%s) ", yytext);
        !            43:                        return i;
        !            44:                }
        !            45: \"[^"]+\"      {
        !            46:                        yytext[strlen(yytext)-1] = '\0';
        !            47:                        yylval.cp = yytext + 1;
        !            48:                        return ID;
        !            49:                }
        !            50: 0[0-7]*                {
        !            51:                        yylval.i = octal(yytext);
        !            52:                        tprintf("#O:%o ", yylval.i);
        !            53:                        return NUMBER;
        !            54:                }
        !            55: 0x[0-9a-f]+    {
        !            56:                        yylval.i = hex(yytext);
        !            57:                        tprintf("#X:%x ", yylval.i);
        !            58:                        return NUMBER;
        !            59:                }
        !            60: [1-9][0-9]*    {
        !            61:                        yylval.i = atoi(yytext);
        !            62:                        tprintf("#D:%d ", yylval.i);
        !            63:                        return NUMBER;
        !            64:                }
        !            65: [0-9]"."[0-9]* {
        !            66:                        double atof();
        !            67:                        yylval.i = (int) (60 * atof(yytext) + 0.5);
        !            68:                        return FPNUMBER;
        !            69:                }
        !            70: "-"            {
        !            71:                        return MINUS;
        !            72:                }
        !            73: "?"            {
        !            74:                        yylval.i = QUES;
        !            75:                        tprintf("? ");
        !            76:                        return NUMBER;
        !            77:                }
        !            78: \n/[ \t]       {
        !            79:                        yyline++;
        !            80:                        tprintf("\n... ");
        !            81:                }
        !            82: \n             {
        !            83:                        yyline++;
        !            84:                        tprintf("\n");
        !            85:                        return SEMICOLON;
        !            86:                }
        !            87: #.*            {       /* Ignored (comment) */;        }
        !            88: [ \t]*         {       /* Ignored (white space) */;    }
        !            89: ";"            {       return SEMICOLON;               }
        !            90: ","            {       return COMMA;                   }
        !            91: vme16          {       return VME16D16;                }
        !            92: vme24          {       return VME24D16;                }
        !            93: vme32          {       return VME32D32;                }
        !            94: vme16d16       {       return VME16D16;                }
        !            95: vme24d16       {       return VME24D16;                }
        !            96: vme32d16       {       return VME32D16;                }
        !            97: vme16d32       {       return VME16D32;                }
        !            98: vme24d32       {       return VME24D32;                }
        !            99: vme32d32       {       return VME32D32;                }
        !           100: %%
        !           101: /*
        !           102:  * kw_lookup
        !           103:  *     Look up a string in the keyword table.  Returns a -1 if the
        !           104:  *     string is not a keyword otherwise it returns the keyword number
        !           105:  */
        !           106: 
        !           107: kw_lookup(word)
        !           108: register char *word;
        !           109: {
        !           110:        register struct kt *kp;
        !           111: 
        !           112:        for (kp = key_words; kp->kt_name != 0; kp++)
        !           113:                if (eq(word, kp->kt_name))
        !           114:                        return kp->kt_val;
        !           115:        return -1;
        !           116: }
        !           117: 
        !           118: /*
        !           119:  * Number conversion routines
        !           120:  */
        !           121: 
        !           122: octal(str)
        !           123: char *str;
        !           124: {
        !           125:        int num;
        !           126: 
        !           127:        sscanf(str, "%o", &num);
        !           128:        return num;
        !           129: }
        !           130: 
        !           131: hex(str)
        !           132: char *str;
        !           133: {
        !           134:        int num;
        !           135: 
        !           136:        sscanf(str+2, "%x", &num);
        !           137:        return num;
        !           138: }

unix.superglobalmegacorp.com

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