386BSD 0.1 development
[unix-history] / usr / src / usr.sbin / config / lang.l
index 96725de..a69d4bb 100644 (file)
@@ -1,5 +1,38 @@
 %{
 %{
-/*     lang.l  1.2     81/02/24        */
+/*-
+ * Copyright (c) 1980 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)lang.l      5.8 (Berkeley) 4/19/91
+ */
 
 #include <ctype.h>
 #include "y.tab.h"
 
 #include <ctype.h>
 #include "y.tab.h"
@@ -7,8 +40,6 @@
 
 #define tprintf if (do_trace) printf
 
 
 #define tprintf if (do_trace) printf
 
-int yylval;
-
 /*
  * Key word table
  */
 /*
  * Key word table
  */
@@ -17,12 +48,64 @@ 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", CONTROLLER, "slave", SLAVE, "at", AT,
-       0,0,
+       { "and",        AND },
+       { "args",       ARGS },
+       { "at",         AT },
+#if MACHINE_I386
+       { "bio",        BIO },
+#endif MACHINE_I386
+       { "config",     CONFIG },
+       { "controller", CONTROLLER },
+       { "cpu",        CPU },
+       { "csr",        CSR },
+       { "device",     DEVICE },
+       { "disk",       DISK },
+       { "drive",      DRIVE },
+#if    MACHINE_I386
+       { "drq",        DRQ },
+#endif MACHINE_I386
+       { "dst",        DST },
+       { "dumps",      DUMPS },
+       { "flags",      FLAGS },
+       { "hz",         HZ },
+       { "ident",      IDENT },
+#if MACHINE_I386
+       { "iomem",      IOMEM },
+       { "iosiz",      IOSIZ },
+       { "irq",        IRQ },
+#endif MACHINE_I386
+       { "machine",    MACHINE },
+       { "major",      MAJOR },
+       { "makeoptions", MAKEOPTIONS },
+       { "master",     MASTER },
+       { "maxusers",   MAXUSERS },
+       { "minor",      MINOR },
+#if MACHINE_I386
+       { "net",        NET },
+#endif MACHINE_I386
+       { "nexus",      NEXUS },
+       { "on",         ON },
+       { "options",    OPTIONS },
+#if MACHINE_I386
+       { "port",       PORT },
+#endif MACHINE_I386
+       { "priority",   PRIORITY },
+       { "pseudo-device",PSEUDO_DEVICE },
+       { "root",       ROOT },
+#if MACHINE_HP300
+       { "scode",      NEXUS },
+#endif
+       { "size",       SIZE },
+       { "slave",      SLAVE },
+       { "swap",       SWAP },
+       { "tape",       DEVICE },
+#if MACHINE_I386
+       { "tty",        TTY },
+#endif MACHINE_I386
+       { "timezone",   TIMEZONE },
+       { "trace",      TRACE },
+       { "vector",     VECTOR },
+       { 0, 0 },
 };
 %}
 WORD   [A-Za-z_][-A-Za-z_]*
 };
 %}
 WORD   [A-Za-z_][-A-Za-z_]*
@@ -32,30 +115,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 +164,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 +199,7 @@ char *str;
 {
        int num;
 
 {
        int num;
 
-       sscanf(str, "%o", &num);
+       (void) sscanf(str, "%o", &num);
        return num;
 }
 
        return num;
 }
 
@@ -107,6 +208,6 @@ char *str;
 {
        int num;
 
 {
        int num;
 
-       sscanf(str, "%x", &num);
+       (void) sscanf(str+2, "%x", &num);
        return num;
 }
        return num;
 }