📄 env.c
字号:
#include "mk.h"enum { ENVQUANTA=10};Envy *envy;static int nextv;static char *myenv[] ={ "target", "stem", "prereq", "pid", "nproc", "newprereq", "alltarget", "newmember", "stem0", /* must be in order from here */ "stem1", "stem2", "stem3", "stem4", "stem5", "stem6", "stem7", "stem8", "stem9", 0,};voidinitenv(void){ char **p; for(p = myenv; *p; p++) symlook(*p, S_INTERNAL, (void *)""); readenv(); /* o.s. dependent */}static voidenvinsert(char *name, Word *value){ static int envsize; if (nextv >= envsize) { envsize += ENVQUANTA; envy = (Envy *) Realloc((char *) envy, envsize*sizeof(Envy)); } envy[nextv].name = name; envy[nextv++].values = value;}static voidenvupd(char *name, Word *value){ Envy *e; for(e = envy; e->name; e++) if(strcmp(name, e->name) == 0){ delword(e->values); e->values = value; return; } e->name = name; e->values = value; envinsert(0,0);}static voidecopy(Symtab *s){ char **p; if(symlook(s->name, S_NOEXPORT, 0)) return; for(p = myenv; *p; p++) if(strcmp(*p, s->name) == 0) return; envinsert(s->name, s->u.ptr);}voidexecinit(void){ char **p; nextv = 0; for(p = myenv; *p; p++) envinsert(*p, stow("")); symtraverse(S_VAR, ecopy); envinsert(0, 0);}Envy*buildenv(Job *j, int slot){ char **p, *cp, *qp; Word *w, *v, **l; int i; char buf[256]; envupd("target", wdup(j->t)); if(j->r->attr®EXP) envupd("stem",newword("")); else envupd("stem", newword(j->stem)); envupd("prereq", wdup(j->p)); sprint(buf, "%d", getpid()); envupd("pid", newword(buf)); sprint(buf, "%d", slot); envupd("nproc", newword(buf)); envupd("newprereq", wdup(j->np)); envupd("alltarget", wdup(j->at)); l = &v; v = w = wdup(j->np); while(w){ cp = strchr(w->s, '('); if(cp){ qp = strchr(cp+1, ')'); if(qp){ *qp = 0; strcpy(w->s, cp+1); l = &w->next; w = w->next; continue; } } *l = w->next; free(w->s); free(w); w = *l; } envupd("newmember", v); /* update stem0 -> stem9 */ for(p = myenv; *p; p++) if(strcmp(*p, "stem0") == 0) break; for(i = 0; *p; i++, p++){ if((j->r->attr®EXP) && j->match[i]) envupd(*p, newword(j->match[i])); else envupd(*p, newword("")); } return envy;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -