install correct aliases file
[unix-history] / usr / src / usr.sbin / config / lang.l
index 83e695a..4eb8290 100644 (file)
@@ -1,5 +1,23 @@
 %{
 %{
-/*     lang.l  1.3     81/02/25        */
+
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)lang.l      5.5 (Berkeley) %G%
+ */
 
 #include <ctype.h>
 #include "y.tab.h"
 
 #include <ctype.h>
 #include "y.tab.h"
@@ -7,8 +25,6 @@
 
 #define tprintf if (do_trace) printf
 
 
 #define tprintf if (do_trace) printf
 
-int yylval;
-
 /*
  * Key word table
  */
 /*
  * Key word table
  */
@@ -17,12 +33,41 @@ struct kt {
        char *kt_name;
        int kt_val;
 } key_words[] = {
        char *kt_name;
        int kt_val;
 } key_words[] = {
-       "cpu", CPU, "ident", IDENT, "config", CONFIG, "options", OPTIONS,
-       "device", DEVICE, "controller", CONTROLLER, "uba", UBA, "mba", MBA,
-       "csr", CSR, "nexus", NEXUS, "drive", DRIVE, "vector", VECTOR,
-       "pseudo-device", PSEUDO_DEVICE, "flags", FLAGS, "trace", TRACE,
-       "disk", DISK, "tape", DEVICE, "slave", SLAVE, "at", AT,
-       0,0,
+       { "and",        AND },
+       { "args",       ARGS },
+       { "at",         AT },
+       { "config",     CONFIG },
+       { "controller", CONTROLLER },
+       { "cpu",        CPU },
+       { "csr",        CSR },
+       { "device",     DEVICE },
+       { "disk",       DISK },
+       { "drive",      DRIVE },
+       { "dst",        DST },
+       { "dumps",      DUMPS },
+       { "flags",      FLAGS },
+       { "hz",         HZ },
+       { "ident",      IDENT },
+       { "machine",    MACHINE },
+       { "major",      MAJOR },
+       { "makeoptions", MAKEOPTIONS },
+       { "master",     MASTER },
+       { "maxusers",   MAXUSERS },
+       { "minor",      MINOR },
+       { "nexus",      NEXUS },
+       { "on",         ON },
+       { "options",    OPTIONS },
+       { "priority",   PRIORITY },
+       { "pseudo-device",PSEUDO_DEVICE },
+       { "root",       ROOT },
+       { "size",       SIZE },
+       { "slave",      SLAVE },
+       { "swap",       SWAP },
+       { "tape",       DEVICE },
+       { "timezone",   TIMEZONE },
+       { "trace",      TRACE },
+       { "vector",     VECTOR },
+       { 0, 0 },
 };
 %}
 WORD   [A-Za-z_][-A-Za-z_]*
 };
 %}
 WORD   [A-Za-z_][-A-Za-z_]*
@@ -32,30 +77,43 @@ WORD        [A-Za-z_][-A-Za-z_]*
 
                        if ((i = kw_lookup(yytext)) == -1)
                        {
 
                        if ((i = kw_lookup(yytext)) == -1)
                        {
-                               yylval = (int) yytext;
+                               yylval.str = yytext;
                                tprintf("id(%s) ", yytext);
                                return ID;
                        }
                        tprintf("(%s) ", yytext);
                        return i;
                }
                                tprintf("id(%s) ", yytext);
                                return ID;
                        }
                        tprintf("(%s) ", yytext);
                        return i;
                }
+\"[^"]+\"      {
+                       yytext[strlen(yytext)-1] = '\0';
+                       yylval.str = yytext + 1;
+                       return ID;
+               }
 0[0-7]*                {
 0[0-7]*                {
-                       yylval = octal(yytext);
-                       tprintf("#O:%o ", yylval);
+                       yylval.val = octal(yytext);
+                       tprintf("#O:%o ", yylval.val);
                        return NUMBER;
                }
                        return NUMBER;
                }
-0x[0-9a-f]+    {
-                       yylval = hex(yytext);
-                       tprintf("#X:%x ", yylval);
+0x[0-9a-fA-F]+ {
+                       yylval.val = hex(yytext);
+                       tprintf("#X:%x ", yylval.val);
                        return NUMBER;
                }
 [1-9][0-9]*    {
                        return NUMBER;
                }
 [1-9][0-9]*    {
-                       yylval = atoi(yytext);
-                       tprintf("#D:%d ", yylval);
+                       yylval.val = atoi(yytext);
+                       tprintf("#D:%d ", yylval.val);
                        return NUMBER;
                }
                        return NUMBER;
                }
+[0-9]"."[0-9]* {
+                       double atof();
+                       yylval.val = (int) (60 * atof(yytext) + 0.5);
+                       return FPNUMBER;
+               }
+"-"            {
+                       return MINUS;
+               }
 "?"            {
 "?"            {
-                       yylval = -1;
+                       yylval.val = -1;
                        tprintf("? ");
                        return NUMBER;
                }
                        tprintf("? ");
                        return NUMBER;
                }
@@ -68,9 +126,14 @@ WORD        [A-Za-z_][-A-Za-z_]*
                        tprintf("\n");
                        return SEMICOLON;
                }
                        tprintf("\n");
                        return SEMICOLON;
                }
-^#.*           {       /* Ignored (comment) */;        }
+#.*            {       /* Ignored (comment) */;        }
 [ \t]*         {       /* Ignored (white space) */;    }
 ";"            {       return SEMICOLON;               }
 [ \t]*         {       /* Ignored (white space) */;    }
 ";"            {       return SEMICOLON;               }
+","            {       return COMMA;                   }
+"="            {       return EQUALS;                  }
+"@"            {       return AT;                      }
+.              {       return yytext[0];               }
+
 %%
 /*
  * kw_lookup
 %%
 /*
  * kw_lookup
@@ -98,7 +161,7 @@ char *str;
 {
        int num;
 
 {
        int num;
 
-       sscanf(str, "%o", &num);
+       (void) sscanf(str, "%o", &num);
        return num;
 }
 
        return num;
 }
 
@@ -107,6 +170,6 @@ char *str;
 {
        int num;
 
 {
        int num;
 
-       sscanf(str, "%x", &num);
+       (void) sscanf(str+2, "%x", &num);
        return num;
 }
        return num;
 }