# 2.11BSD#431 - /usr/src/ucb/window/var.c

##### Functions

    var_lookup1       X
    var_set1          X
    var_setnum1       X
    var_setstr1       X
    var_unset1        X
    var_walk1         X

       1: #if defined(DOSCCS) && !defined(lint)
       2: static char sccsid[] = "@(#)var.c	3.9 1/1/94";
       3: #endif
       4:
       5: /*
       6:  * Copyright (c) 1983 Regents of the University of California,
       7:  * All rights reserved.  Redistribution permitted subject to
       8:  * the terms of the Berkeley Software License Agreement.
       9:  */
      10:
      11: #include "value.h"
      12: #include "var.h"
      13: #include "string.h"
      14:
      15: char *malloc();
      16:
      17: struct var *
      18: var_set1(head, name, v)
      19: struct var **head;
      20: char *name;
      21: struct value *v;
      22: {
      23:     register struct var **p;
      24:     register struct var *r;
      25:     struct value val;
      26:
      27:     /* do this first, easier to recover */
      28:     val = *v;
      29:     if (val.v_type == V_STR && val.v_str != 0 &&
      30:         (val.v_str = str_cpy(val.v_str)) == 0)
      31:         return 0;
      32:     if (*(p = var_lookup1(head, name)) == 0) {
      33:         r = (struct var *) malloc(sizeof (struct var));
      34:         if (r == 0) {
      35:             val_free(val);
      36:             return 0;
      37:         }
      38:         if ((r->r_name = str_cpy(name)) == 0) {
      39:             val_free(val);
      40:             free((char *) r);
      41:             return 0;
      42:         }
      43:         r->r_left = r->r_right = 0;
      44:         *p = r;
      45:     } else {
      46:         r = *p;
      47:         val_free(r->r_val);
      48:     }
      49:     r->r_val = val;
      50:     return r;
      51: }
      52:
      53: struct var *
      54: var_setstr1(head, name, str)
      55: struct var **head;
      56: char *name;
      57: char *str;
      58: {
      59:     struct value v;
      60:
      61:     v.v_type = V_STR;
      62:     v.v_str = str;
      63:     return var_set1(head, name, &v);
      64: }
      65:
      66: struct var *
      67: var_setnum1(head, name, num)
      68: struct var **head;
      69: char *name;
      70: int num;
      71: {
      72:     struct value v;
      73:
      74:     v.v_type = V_NUM;
      75:     v.v_num = num;
      76:     return var_set1(head, name, &v);
      77: }
      78:
      79: var_unset1(head, name)
      80: struct var **head;
      81: char *name;
      82: {
      83:     register struct var **p;
      84:     register struct var *r;
      85:
      86:     if (*(p = var_lookup1(head, name)) == 0)
      87:         return -1;
      88:     r = *p;
      89:     *p = r->r_left;
      90:     while (*p != 0)
      91:         p = &(*p)->r_right;
      92:     *p = r->r_right;
      93:     val_free(r->r_val);
      94:     str_free(r->r_name);
      95:     free((char *) r);
      96:     return 0;
      97: }
      98:
      99: struct var **
     100: var_lookup1(p, name)
     101: register struct var **p;
     102: register char *name;
     103: {
     104:     register cmp;
     105:
     106:     while (*p != 0) {
     107:         if ((cmp = strcmp(name, (*p)->r_name)) < 0)
     108:             p = &(*p)->r_left;
     109:         else if (cmp > 0)
     110:             p = &(*p)->r_right;
     111:         else
     112:             break;
     113:     }
     114:     return p;
     115: }
     116:
     117: var_walk1(r, func, a)
     118: register struct var *r;
     119: int (*func)();
     120: {
     121:     if (r == 0)
     122:         return 0;
     123:     if (var_walk1(r->r_left, func, a) < 0 || (*func)(a, r) < 0
     124:         || var_walk1(r->r_right, func, a) < 0)
     125:         return -1;
     126:     return 0;
     127: }

#### Defined functions

var_lookup1 defined in line 99; used 5 times

- in line 32, 86
- in /usr/src/ucb/window/alias.h line 22
- in /usr/src/ucb/window/var.h line 21, 27

var_set1 defined in line 17; used 4 times

- in line 63, 76
- in /usr/src/ucb/window/var.h line 18-23(2)

var_setnum1 defined in line 66; used 2 times

- in /usr/src/ucb/window/var.h line 20-25(2)

var_setstr1 defined in line 53; used 3 times

- in /usr/src/ucb/window/alias.h line 19
- in /usr/src/ucb/window/var.h line 19-24(2)

var_unset1 defined in line 79; used 2 times

- in /usr/src/ucb/window/alias.h line 21
- in /usr/src/ucb/window/var.h line 26

var_walk1 defined in line 117; used 4 times

- in line 123-124(2)
- in /usr/src/ucb/window/alias.h line 20
- in /usr/src/ucb/window/var.h line 28

#### Defined variables

sccsid defined in line 2; never used

Last modified: 1994-01-01 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 637 |