make sure unavailable mode bits are not set,
[unix-history] / usr / src / usr.bin / window / parser1.c
index 9caa9cc..48ba1f5 100644 (file)
@@ -1,7 +1,13 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)parser1.c   3.12 84/04/05";
+static char sccsid[] = "@(#)parser1.c  3.18 %G%";
 #endif
 
 #endif
 
+/*
+ * Copyright (c) 1983 Regents of the University of California,
+ * All rights reserved.  Redistribution permitted subject to
+ * the terms of the Berkeley Software License Agreement.
+ */
+
 #include "parser.h"
 
 p_start()
 #include "parser.h"
 
 p_start()
@@ -36,26 +42,14 @@ char flag;
 p_statement(flag)
 char flag;
 {
 p_statement(flag)
 char flag;
 {
-#ifdef DEBUG
-       error("statement: %d.", flag);
-#endif
        switch (token) {
        case T_EOL:
        switch (token) {
        case T_EOL:
-#ifdef DEBUG
-               error("statement: EOL.", flag);
-#endif
                (void) s_gettok();
                return 0;
        case T_IF:
                (void) s_gettok();
                return 0;
        case T_IF:
-#ifdef DEBUG
-               error("statement: IF.", flag);
-#endif
                return p_if(flag);
        default:
                return p_if(flag);
        default:
-#ifdef DEBUG
-               error("statement: command.", flag);
-#endif
-               return p_command(flag);
+               return p_expression(flag);
        }
 }
 
        }
 }
 
@@ -77,7 +71,7 @@ top:
                true = !true && t.v_num != 0;
                break;
        case V_STR:
                true = !true && t.v_num != 0;
                break;
        case V_STR:
-               p_error("Numeric value required for if.");
+               p_error("if: Numeric value required.");
                str_free(t.v_str);
        case V_ERR:
                flag = 0;
                str_free(t.v_str);
        case V_ERR:
                flag = 0;
@@ -113,21 +107,14 @@ top:
        return -1;
 }
 
        return -1;
 }
 
-p_command(flag)
+p_expression(flag)
 char flag;
 {
        struct value t;
        char *cmd;
 char flag;
 {
        struct value t;
        char *cmd;
+       int p_function(), p_assign();
 
 
-#ifdef DEBUG
-       error("command: %d.", flag);
-#endif
        switch (token) {
        switch (token) {
-       case T_MOD:
-               t.v_type = V_STR;
-               t.v_str = str_cpy("%");
-               (void) s_gettok();
-               break;
        case T_NUM:
                t.v_type = V_NUM;
                t.v_num = token_num;
        case T_NUM:
                t.v_type = V_NUM;
                t.v_num = token_num;
@@ -142,44 +129,20 @@ char flag;
                if (p_expr(&t, flag) < 0)
                        return -1;
                if (token == T_EOF) {
                if (p_expr(&t, flag) < 0)
                        return -1;
                if (token == T_EOF) {
-#ifdef DEBUG
-                       error("command: expression.");
-#endif
                        val_free(t);
                        return 0;
                }
        }
                        val_free(t);
                        return 0;
                }
        }
-       switch (t.v_type) {
-       case V_ERR:
-               cmd = 0;
-               break;
-       case V_STR:
-               cmd = t.v_str;
-               break;
-       case V_NUM:
-               if ((cmd = str_itoa(t.v_num)) == 0) {
-                       p_memerror();
-                       return -1;
-               }
-       }
-       if (token == T_ASSIGN) {
-#ifdef DEBUG
-               error("command: assignment %s.", cmd == 0 ? "ERR" : cmd);
-#endif
-               if (p_assign(cmd, &t, flag) < 0) {
-                       str_free(cmd);
-                       return -1;
-               }
-       } else {
-#ifdef DEBUG
-               error("command: function %s.", cmd == 0 ? "ERR" : cmd);
-#endif
-               if (p_function(cmd, &t, flag) < 0) {
+       if (token != T_ASSIGN && p_convstr(&t) < 0)
+               return -1;
+       cmd = t.v_type == V_STR ? t.v_str : 0;
+       if ((*(token == T_ASSIGN ? p_assign : p_function))(cmd, &t, flag) < 0) {
+               if (cmd)
                        str_free(cmd);
                        str_free(cmd);
-                       return -1;
-               }
+               return -1;
        }
        }
-       str_free(cmd);
+       if (cmd)
+               str_free(cmd);
        val_free(t);
        if (token == T_EOL)
                (void) s_gettok();
        val_free(t);
        if (token == T_EOL)
                (void) s_gettok();