xref: /plan9-contrib/sys/src/cmd/mk/var.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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