aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/rc/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/rc/exec.c')
-rw-r--r--sys/cmd/rc/exec.c137
1 files changed, 68 insertions, 69 deletions
diff --git a/sys/cmd/rc/exec.c b/sys/cmd/rc/exec.c
index 15d1cdf..fdb63cf 100644
--- a/sys/cmd/rc/exec.c
+++ b/sys/cmd/rc/exec.c
@@ -12,21 +12,20 @@ int lastc;
int kidpid;
int mypid;
-thread *runq;
-code *codebuf; /* compiler output */
-int ntrap; /* number of outstanding traps */
-int trap[NSIG]; /* number of outstanding traps per type */
-
-int eflagok; /* kludge flag so that -e doesn't exit in startup */
+Thread *runq;
+Code *codebuf; /* compiler output */
+int ntrap; /* number of outstanding traps */
+int trap[NSIG]; /* number of outstanding traps per type */
+int eflagok; /* kludge flag so that -e doesn't exit in startup */
char **argp;
char **args;
-int nerror; /* number of errors encountered during compilation */
+int nerror; /* number of errors encountered during compilation */
void
-start(code *c, int pc, var *local)
+start(Code *c, int pc, Var *local)
{
- struct thread *p = new(struct thread);
+ struct Thread *p = new(struct Thread);
p->code = codecopy(c);
p->pc = pc;
@@ -42,10 +41,10 @@ start(code *c, int pc, var *local)
runq = p;
}
-word*
-newword(char *wd, word *next)
+Word*
+newword(char *wd, Word *next)
{
- word *p = new(word);
+ Word *p = new(Word);
p->word = strdup(wd);
p->next = next;
return p;
@@ -62,7 +61,7 @@ pushword(char *wd)
void
popword(void)
{
- word *p;
+ Word *p;
if(runq->argv==0)
panic("popword but no argv!", 0);
p = runq->argv->words;
@@ -74,9 +73,9 @@ popword(void)
}
void
-freelist(word *w)
+freelist(Word *w)
{
- word *nw;
+ Word *nw;
while(w){
nw = w->next;
efree(w->word);
@@ -88,7 +87,7 @@ freelist(word *w)
void
pushlist(void)
{
- list *p = new(list);
+ Words *p = new(Words);
p->next = runq->argv;
p->words = 0;
runq->argv = p;
@@ -97,7 +96,7 @@ pushlist(void)
void
poplist(void)
{
- list *p = runq->argv;
+ Words *p = runq->argv;
if(p==0)
panic("poplist but no argv", 0);
freelist(p->words);
@@ -106,7 +105,7 @@ poplist(void)
}
int
-count(word *w)
+count(Word *w)
{
int n;
for(n = 0;w;n++) w = w->next;
@@ -116,7 +115,7 @@ count(word *w)
void
pushredir(int type, int from, int to)
{
- redir * rp = new(redir);
+ Redir * rp = new(Redir);
rp->type = type;
rp->from = from;
rp->to = to;
@@ -124,10 +123,10 @@ pushredir(int type, int from, int to)
runq->redir = rp;
}
-var*
-newvar(char *name, var *next)
+Var*
+newvar(char *name, Var *next)
{
- var *v = new(var);
+ Var *v = new(Var);
v->name = name;
v->val = 0;
v->fn = 0;
@@ -147,7 +146,7 @@ newvar(char *name, var *next)
int
main(int argc, char *argv[])
{
- code bootstrap[32];
+ Code bootstrap[32];
char num[12], *rcmain;
int i;
@@ -166,10 +165,10 @@ main(int argc, char *argv[])
Vinit();
inttoascii(num, mypid = getpid());
pathinit();
- setvar("pid", newword(num, (word *)0));
- setvar("cflag", flag['c']?newword(flag['c'][0], (word *)0)
- :(word *)0);
- setvar("rcname", newword(argv[0], (word *)0));
+ setvar("pid", newword(num, (Word *)0));
+ setvar("cflag", flag['c']?newword(flag['c'][0], (Word *)0)
+ :(Word *)0);
+ setvar("rcname", newword(argv[0], (Word *)0));
i = 0;
memset(bootstrap, 0, sizeof bootstrap);
bootstrap[i++].i = 1;
@@ -189,7 +188,7 @@ main(int argc, char *argv[])
bootstrap[i++].f = Xsimple;
bootstrap[i++].f = Xexit;
bootstrap[i].i = 0;
- start(bootstrap, 1, (var *)0);
+ start(bootstrap, 1, (Var *)0);
/* prime bootstrap argv */
pushlist();
argv0 = strdup(argv[0]);
@@ -313,8 +312,8 @@ Xeflag(void)
void
Xexit(void)
{
- struct var *trapreq;
- struct word *starval;
+ struct Var *trapreq;
+ struct Word *starval;
static int beenhere = 0;
if(getpid()==mypid && !beenhere){
trapreq = vlook("sigexit");
@@ -322,9 +321,9 @@ Xexit(void)
beenhere = 1;
--runq->pc;
starval = vlook("*")->val;
- start(trapreq->fn, trapreq->pc, (struct var *)0);
+ start(trapreq->fn, trapreq->pc, (struct Var *)0);
runq->local = newvar(strdup("*"), runq->local);
- runq->local->val = copywords(starval, (struct word *)0);
+ runq->local->val = copywords(starval, (struct Word *)0);
runq->local->changed = 1;
runq->redir = runq->startredir = 0;
return;
@@ -431,7 +430,7 @@ turfredir(void)
void
Xpopredir(void)
{
- struct redir *rp = runq->redir;
+ struct Redir *rp = runq->redir;
if(rp==0)
panic("turfredir null!", 0);
runq->redir = rp->next;
@@ -443,7 +442,7 @@ Xpopredir(void)
void
Xreturn(void)
{
- struct thread *p = runq;
+ struct Thread *p = runq;
turfredir();
while(p->argv) poplist();
codefree(p->code);
@@ -507,11 +506,11 @@ Xwrite(void)
}
char*
-list2str(word *words)
+list2str(Word *words)
{
char *value, *s, *t;
int len = 0;
- word *ap;
+ Word *ap;
for(ap = words;ap;ap = ap->next)
len+=1+strlen(ap->word);
value = emalloc(len+1);
@@ -529,7 +528,7 @@ list2str(word *words)
void
Xmatch(void)
{
- word *p;
+ Word *p;
char *subject;
subject = list2str(runq->argv->words);
setstatus("no match");
@@ -546,7 +545,7 @@ Xmatch(void)
void
Xcase(void)
{
- word *p;
+ Word *p;
char *s;
int ok = 0;
s = list2str(runq->argv->next->words);
@@ -564,11 +563,11 @@ Xcase(void)
poplist();
}
-word*
-conclist(word *lp, word *rp, word *tail)
+Word*
+conclist(Word *lp, Word *rp, Word *tail)
{
char *buf;
- word *v;
+ Word *v;
if(lp->next || rp->next)
tail = conclist(lp->next==0?lp:lp->next, rp->next==0?rp:rp->next,
tail);
@@ -583,9 +582,9 @@ conclist(word *lp, word *rp, word *tail)
void
Xconc(void)
{
- word *lp = runq->argv->words;
- word *rp = runq->argv->next->words;
- word *vp = runq->argv->next->next->words;
+ Word *lp = runq->argv->words;
+ Word *rp = runq->argv->next->words;
+ Word *vp = runq->argv->next->next->words;
int lc = count(lp), rc = count(rp);
if(lc!=0 || rc!=0){
if(lc==0 || rc==0){
@@ -606,7 +605,7 @@ Xconc(void)
void
Xassign(void)
{
- var *v;
+ Var *v;
if(count(runq->argv->words)!=1){
Xerror1("variable name not singleton!");
return;
@@ -627,10 +626,10 @@ Xassign(void)
* copy arglist a, adding the copy to the front of tail
*/
-word*
-copywords(word *a, word *tail)
+Word*
+copywords(Word *a, Word *tail)
{
- word *v = 0, **end;
+ Word *v = 0, **end;
for(end=&v;a;a = a->next,end=&(*end)->next)
*end = newword(a->word, 0);
*end = tail;
@@ -640,7 +639,7 @@ copywords(word *a, word *tail)
void
Xdol(void)
{
- word *a, *star;
+ Word *a, *star;
char *s, *t;
int n;
if(count(runq->argv->words)!=1){
@@ -668,7 +667,7 @@ Xdol(void)
void
Xqdol(void)
{
- word *a, *p;
+ Word *a, *p;
char *s;
int n;
if(count(runq->argv->words)!=1){
@@ -699,10 +698,10 @@ Xqdol(void)
efree(s);
}
-word*
-copynwords(word *a, word *tail, int n)
+Word*
+copynwords(Word *a, Word *tail, int n)
{
- word *v, **end;
+ Word *v, **end;
v = 0;
end = &v;
@@ -715,8 +714,8 @@ copynwords(word *a, word *tail, int n)
return v;
}
-word*
-subwords(word *val, int len, word *sub, word *a)
+Word*
+subwords(Word *val, int len, Word *sub, Word *a)
{
int n, m;
char *s;
@@ -750,7 +749,7 @@ subwords(word *val, int len, word *sub, word *a)
void
Xsub(void)
{
- word *a, *v;
+ Word *a, *v;
char *s;
if(count(runq->argv->next->words)!=1){
Xerror1("variable name not singleton!");
@@ -769,7 +768,7 @@ Xsub(void)
void
Xcount(void)
{
- word *a;
+ Word *a;
char *s, *t;
int n;
char num[12];
@@ -802,7 +801,7 @@ Xlocal(void)
}
deglob(runq->argv->words->word);
runq->local = newvar(strdup(runq->argv->words->word), runq->local);
- runq->local->val = copywords(runq->argv->next->words, (word *)0);
+ runq->local->val = copywords(runq->argv->next->words, (Word *)0);
runq->local->changed = 1;
poplist();
poplist();
@@ -811,7 +810,7 @@ Xlocal(void)
void
Xunlocal(void)
{
- var *v = runq->local, *hid;
+ Var *v = runq->local, *hid;
if(v==0)
panic("Xunlocal: no locals!", 0);
runq->local = v->next;
@@ -823,9 +822,9 @@ Xunlocal(void)
}
void
-freewords(word *w)
+freewords(Word *w)
{
- word *nw;
+ Word *nw;
while(w){
efree(w->word);
nw = w->next;
@@ -837,8 +836,8 @@ freewords(word *w)
void
Xfn(void)
{
- var *v;
- word *a;
+ Var *v;
+ Word *a;
int end;
end = runq->code[runq->pc].i;
for(a = runq->argv->words;a;a = a->next){
@@ -856,8 +855,8 @@ Xfn(void)
void
Xdelfn(void)
{
- var *v;
- word *a;
+ Var *v;
+ Word *a;
for(a = runq->argv->words;a;a = a->next){
v = gvlook(a->word);
if(v->fn)
@@ -900,8 +899,8 @@ Xpipewait(void)
void
Xrdcmds(void)
{
- struct thread *p = runq;
- word *prompt;
+ struct Thread *p = runq;
+ Word *prompt;
flush(err);
nerror = 0;
if(flag['s'] && !truestatus())
@@ -964,13 +963,13 @@ Xerror1(char *s)
void
setstatus(char *s)
{
- setvar("status", newword(s, (word *)0));
+ setvar("status", newword(s, (Word *)0));
}
char*
getstatus(void)
{
- var *status = vlook("status");
+ Var *status = vlook("status");
return status->val?status->val->word:"";
}