rip out SHELL_ESCAPE define
[unix-history] / usr / src / usr.bin / window / var.c
index 69770eb..2837588 100644 (file)
@@ -1,6 +1,23 @@
+/*
+ * Copyright (c) 1983 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.
+ */
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)var.c       3.3 84/01/12";
-#endif
+static char sccsid[] = "@(#)var.c      3.10 (Berkeley) %G%";
+#endif /* not lint */
 
 #include "value.h"
 #include "var.h"
 
 #include "value.h"
 #include "var.h"
@@ -9,7 +26,8 @@ static char *sccsid = "@(#)var.c       3.3 84/01/12";
 char *malloc();
 
 struct var *
 char *malloc();
 
 struct var *
-var_set(name, v)
+var_set1(head, name, v)
+struct var **head;
 char *name;
 struct value *v;
 {
 char *name;
 struct value *v;
 {
@@ -19,9 +37,10 @@ struct value *v;
 
        /* do this first, easier to recover */
        val = *v;
 
        /* do this first, easier to recover */
        val = *v;
-       if (val.v_type == V_STR && (val.v_str = str_cpy(val.v_str)) == 0)
+       if (val.v_type == V_STR && val.v_str != 0 &&
+           (val.v_str = str_cpy(val.v_str)) == 0)
                return 0;
                return 0;
-       if (*(p = var_lookup1(name)) == 0) {
+       if (*(p = var_lookup1(head, name)) == 0) {
                r = (struct var *) malloc(sizeof (struct var));
                if (r == 0) {
                        val_free(val);
                r = (struct var *) malloc(sizeof (struct var));
                if (r == 0) {
                        val_free(val);
@@ -43,7 +62,8 @@ struct value *v;
 }
 
 struct var *
 }
 
 struct var *
-var_setstr(name, str)
+var_setstr1(head, name, str)
+struct var **head;
 char *name;
 char *str;
 {
 char *name;
 char *str;
 {
@@ -51,11 +71,12 @@ char *str;
 
        v.v_type = V_STR;
        v.v_str = str;
 
        v.v_type = V_STR;
        v.v_str = str;
-       return var_set(name, &v);
+       return var_set1(head, name, &v);
 }
 
 struct var *
 }
 
 struct var *
-var_setnum(name, num)
+var_setnum1(head, name, num)
+struct var **head;
 char *name;
 int num;
 {
 char *name;
 int num;
 {
@@ -63,16 +84,17 @@ int num;
 
        v.v_type = V_NUM;
        v.v_num = num;
 
        v.v_type = V_NUM;
        v.v_num = num;
-       return var_set(name, &v);
+       return var_set1(head, name, &v);
 }
 
 }
 
-var_unset(name)
+var_unset1(head, name)
+struct var **head;
 char *name;
 {
        register struct var **p;
        register struct var *r;
 
 char *name;
 {
        register struct var **p;
        register struct var *r;
 
-       if (*(p = var_lookup1(name)) == 0)
+       if (*(p = var_lookup1(head, name)) == 0)
                return -1;
        r = *p;
        *p = r->r_left;
                return -1;
        r = *p;
        *p = r->r_left;
@@ -86,13 +108,13 @@ char *name;
 }
 
 struct var **
 }
 
 struct var **
-var_lookup1(name)
+var_lookup1(p, name)
+register struct var **p;
 register char *name;
 {
 register char *name;
 {
-       register struct var **p;
        register cmp;
 
        register cmp;
 
-       for (p = &var_head; *p != 0;) {
+       while (*p != 0) {
                if ((cmp = strcmp(name, (*p)->r_name)) < 0)
                        p = &(*p)->r_left;
                else if (cmp > 0)
                if ((cmp = strcmp(name, (*p)->r_name)) < 0)
                        p = &(*p)->r_left;
                else if (cmp > 0)
@@ -103,13 +125,14 @@ register char *name;
        return p;
 }
 
        return p;
 }
 
-var_walk1(r, func)
+var_walk1(r, func, a)
 register struct var *r;
 int (*func)();
 {
        if (r == 0)
 register struct var *r;
 int (*func)();
 {
        if (r == 0)
-               return;
-       var_walk1(r->r_left, func);
-       (*func)(r);
-       var_walk1(r->r_right, func);
+               return 0;
+       if (var_walk1(r->r_left, func, a) < 0 || (*func)(a, r) < 0
+           || var_walk1(r->r_right, func, a) < 0)
+               return -1;
+       return 0;
 }
 }