|
|
1.1 ! root 1: %{ ! 2: /* config.l 1.14 83/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: /* ! 11: * Key word table ! 12: */ ! 13: ! 14: struct kt { ! 15: char *kt_name; ! 16: int kt_val; ! 17: } key_words[] = { ! 18: { "and", AND }, ! 19: { "args", ARGS }, ! 20: { "at", AT }, ! 21: { "config", CONFIG }, ! 22: { "controller", CONTROLLER }, ! 23: { "cpu", CPU }, ! 24: { "csr", CSR }, ! 25: { "device", DEVICE }, ! 26: { "disk", DISK }, ! 27: { "drive", DRIVE }, ! 28: { "dst", DST }, ! 29: { "dumps", DUMPS }, ! 30: { "flags", FLAGS }, ! 31: { "hz", HZ }, ! 32: { "ident", IDENT }, ! 33: { "machine", MACHINE }, ! 34: { "major", MAJOR }, ! 35: { "master", MASTER }, ! 36: { "maxusers", MAXUSERS }, ! 37: { "mba", MBA }, ! 38: { "minor", MINOR }, ! 39: { "nexus", NEXUS }, ! 40: { "on", ON }, ! 41: { "options", OPTIONS }, ! 42: { "priority", PRIORITY }, ! 43: { "pseudo-device",PSEUDO_DEVICE }, ! 44: { "root", ROOT }, ! 45: { "size", SIZE }, ! 46: { "slave", SLAVE }, ! 47: { "swap", SWAP }, ! 48: { "tape", DEVICE }, ! 49: { "timezone", TIMEZONE }, ! 50: { "trace", TRACE }, ! 51: { "uba", UBA }, ! 52: { "vector", VECTOR }, ! 53: { 0, 0 }, ! 54: }; ! 55: %} ! 56: WORD [A-Za-z_][-A-Za-z_]* ! 57: %% ! 58: {WORD} { ! 59: int i; ! 60: ! 61: if ((i = kw_lookup(yytext)) == -1) ! 62: { ! 63: yylval.str = yytext; ! 64: tprintf("id(%s) ", yytext); ! 65: return ID; ! 66: } ! 67: tprintf("(%s) ", yytext); ! 68: return i; ! 69: } ! 70: \"[^"]+\" { ! 71: yytext[strlen(yytext)-1] = '\0'; ! 72: yylval.str = yytext + 1; ! 73: return ID; ! 74: } ! 75: 0[0-7]* { ! 76: yylval.val = octal(yytext); ! 77: tprintf("#O:%o ", yylval.val); ! 78: return NUMBER; ! 79: } ! 80: 0x[0-9a-fA-F]+ { ! 81: yylval.val = hex(yytext); ! 82: tprintf("#X:%x ", yylval.val); ! 83: return NUMBER; ! 84: } ! 85: [1-9][0-9]* { ! 86: yylval.val = atoi(yytext); ! 87: tprintf("#D:%d ", yylval.val); ! 88: return NUMBER; ! 89: } ! 90: [0-9]"."[0-9]* { ! 91: double atof(); ! 92: yylval.val = (int) (60 * atof(yytext) + 0.5); ! 93: return FPNUMBER; ! 94: } ! 95: "-" { ! 96: return MINUS; ! 97: } ! 98: "?" { ! 99: yylval.val = -1; ! 100: tprintf("? "); ! 101: return NUMBER; ! 102: } ! 103: \n/[ \t] { ! 104: yyline++; ! 105: tprintf("\n... "); ! 106: } ! 107: \n { ! 108: yyline++; ! 109: tprintf("\n"); ! 110: return SEMICOLON; ! 111: } ! 112: #.* { /* Ignored (comment) */; } ! 113: [ \t]* { /* Ignored (white space) */; } ! 114: ";" { return SEMICOLON; } ! 115: "," { return COMMA; } ! 116: "=" { return EQUALS; } ! 117: "@" { return AT; } ! 118: . { return yytext[0]; } ! 119: ! 120: %% ! 121: /* ! 122: * kw_lookup ! 123: * Look up a string in the keyword table. Returns a -1 if the ! 124: * string is not a keyword otherwise it returns the keyword number ! 125: */ ! 126: ! 127: kw_lookup(word) ! 128: register char *word; ! 129: { ! 130: register struct kt *kp; ! 131: ! 132: for (kp = key_words; kp->kt_name != 0; kp++) ! 133: if (eq(word, kp->kt_name)) ! 134: return kp->kt_val; ! 135: return -1; ! 136: } ! 137: ! 138: /* ! 139: * Number conversion routines ! 140: */ ! 141: ! 142: octal(str) ! 143: char *str; ! 144: { ! 145: int num; ! 146: ! 147: (void) sscanf(str, "%o", &num); ! 148: return num; ! 149: } ! 150: ! 151: hex(str) ! 152: char *str; ! 153: { ! 154: int num; ! 155: ! 156: (void) sscanf(str+2, "%x", &num); ! 157: return num; ! 158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.