1 #include "mk.h" 2 3 void 4 setvar(char *name, char *value) 5 { 6 symlook(name, S_VAR, value)->value = value; 7 symlook(name, S_MAKEVAR, ""); 8 } 9 10 static Envy *nextv; 11 12 static void 13 vcopy(Symtab *s) 14 { 15 char **p; 16 extern char *myenv[]; 17 18 if(symlook(s->name, S_NOEXPORT, (char *)0)) 19 return; 20 for(p = myenv; *p; p++) 21 if(strcmp(*p, s->name) == 0) 22 return; 23 envinsert(s->name, (Word *) s->value); 24 } 25 26 void 27 vardump(void) 28 { 29 symtraverse(S_VAR, vcopy); 30 envinsert(0, 0); 31 } 32 33 static void 34 print1(Symtab *s) 35 { 36 Word *w; 37 38 Bprint(&stdout, "\t%s=", s->name); 39 for (w = (Word *) s->value; w; w = w->next) 40 Bprint(&stdout, "'%s'", w->s); 41 Bprint(&stdout, "\n"); 42 } 43 44 void 45 dumpv(char *s) 46 { 47 Bprint(&stdout, "%s:\n", s); 48 symtraverse(S_VAR, print1); 49 } 50 51 char * 52 shname(char *a) 53 { 54 Rune r; 55 int n; 56 57 while (*a) { 58 n = chartorune(&r, a); 59 if (!WORDCHR(r)) 60 break; 61 a += n; 62 } 63 return a; 64 } 65