sh: finish ansifying and fix up for other compilers
authorAlan Cox <alan@linux.intel.com>
Mon, 11 May 2015 20:32:26 +0000 (21:32 +0100)
committerAlan Cox <alan@linux.intel.com>
Mon, 11 May 2015 20:32:26 +0000 (21:32 +0100)
There are still a fair number of FIXMEs to address and probably
it would be worth looking at later versions of sh (2.11BSD etc)
for any fixes there.

Running size (not that it's exactly runnable yet) is about 28K on
Z80 and 6809, and a bit more (33K or so) on 6502.

22 files changed:
Applications/V7/cmd/sh/Makefile.6502 [new file with mode: 0644]
Applications/V7/cmd/sh/Makefile.6809
Applications/V7/cmd/sh/Makefile.z80 [new file with mode: 0644]
Applications/V7/cmd/sh/args.c
Applications/V7/cmd/sh/blok.c
Applications/V7/cmd/sh/cmd.c
Applications/V7/cmd/sh/defs.h
Applications/V7/cmd/sh/expand.c
Applications/V7/cmd/sh/fault.c
Applications/V7/cmd/sh/glob.c
Applications/V7/cmd/sh/io.c
Applications/V7/cmd/sh/macro.c
Applications/V7/cmd/sh/main.c
Applications/V7/cmd/sh/mode.h
Applications/V7/cmd/sh/msg.c
Applications/V7/cmd/sh/name.c
Applications/V7/cmd/sh/name.h
Applications/V7/cmd/sh/service.c
Applications/V7/cmd/sh/stak.c
Applications/V7/cmd/sh/stak.h
Applications/V7/cmd/sh/word.c
Applications/V7/cmd/sh/xec.c

diff --git a/Applications/V7/cmd/sh/Makefile.6502 b/Applications/V7/cmd/sh/Makefile.6502
new file mode 100644 (file)
index 0000000..2a49044
--- /dev/null
@@ -0,0 +1,32 @@
+CC = cl65
+PLATFORM = --target fuzixtg
+#PLATFORM = -tzx128
+
+.SUFFIXES: .c .o
+
+SRCS  = args.c blok.c builtin.c cmd.c ctype.c error.c expand.c fault.c io.c \
+        macro.c main.c msg.c name.c print.c service.c setbrk.c stak.c \
+        string.c word.c xec.c glob.c
+
+INCS  = brkincr.h ctype.h defs.h dup.h mac.h mode.h name.h stak.h sym.h timeout.h
+
+OBJS = $(SRCS:.c=.o)
+
+LIBS = ../../../../Library/libs/c6502.lib
+
+all: sh
+
+sh: $(OBJS)
+       $(CC) $(PLATFORM) ../../../../Library/libs/crt0_6502.o $(OBJS) $(LIBS) -o $@
+
+$(OBJS): $(INCS)
+
+.c.o:
+       $(CC) -O2 $(PLATFORM) -D __STDC__ -c -I ../../../../Library/include/6502 -I ../../../../Library/include $<
+
+clean: 
+       rm -f $(OBJS) sh *~ core
+
+rmbak:
+       rm -f *~ core
+
index e51101e..67fd2c4 100644 (file)
@@ -29,7 +29,7 @@ OBJS_HARD = $(SRCS_HARD:.c=.o)
 
 all: sh
 
-$(OBJS): $(SRCS) $(CRT0)
+$(OBJS): $(SRCS)
 
 $(OBJS): %.o : %.c
        $(CC) -c $(CFLAGS) $(COPT) $<
diff --git a/Applications/V7/cmd/sh/Makefile.z80 b/Applications/V7/cmd/sh/Makefile.z80
new file mode 100644 (file)
index 0000000..1e8be6c
--- /dev/null
@@ -0,0 +1,39 @@
+CC = sdcc
+ASM = sdasz80
+AR = sdar
+LINKER = sdcc
+FCC = ../../../../Library/tools/fcc -O2
+PLATFORM =
+#PLATFORM = -tzx128
+
+.SUFFIXES: .c .rel
+
+SRCS  = args.c blok.c builtin.c cmd.c ctype.c error.c expand.c fault.c io.c \
+        macro.c main.c msg.c name.c print.c service.c setbrk.c stak.c \
+        string.c word.c xec.c glob.c
+
+INCS  = brkincr.h ctype.h defs.h dup.h mac.h mode.h name.h stak.h sym.h timeout.h
+
+OBJS = $(SRCS:.c=.rel)
+
+LIBS = ../../../../Library/libs/syslib.lib
+
+all: sh
+
+sh: $(OBJS)
+       $(FCC) $(PLATFORM) $(OBJS) -o $@
+
+$(OBJS): $(INCS)
+
+.c.rel:
+       $(FCC) $(PLATFORM) -c $<
+
+%: %.rel
+       $(FCC) $(PLATFORM) $< -o $@
+
+clean:
+       rm -f $(OBJS) sh $(SRCS:.c=) core *~ *.asm *.lst *.sym *.map *.noi *.lk *.ihx *.tmp *.bin
+
+rmbak:
+       rm -f *~ core
+
index e02e645..895c069 100644 (file)
@@ -13,7 +13,7 @@
 #include <stdlib.h>
 #include       "defs.h"
 
-static STRING *copyargs(const char *from[], int n);
+static const char **copyargs(const char *from[], int n);
 static DOLPTR dolh;
 
 CHAR flagadr[10];
@@ -30,7 +30,7 @@ int flagval[] = {
 /* ========    option handling ======== */
 
 
-int options(int argc, const char **argv)
+int options(int argc, const char *argv[])
 {
        register const char *cp;
        register const char **argp = argv;
@@ -91,40 +91,39 @@ void setargs(const char *argi[])
 
 DOLPTR freeargs(DOLPTR blk)
 {
-       register STRING *argp;
+       register char **argp;
        register DOLPTR argr = 0;
        register DOLPTR argblk;
 
        if (argblk = blk) {
                argr = argblk->dolnxt;
                if ((--argblk->doluse) == 0) {
-                       for (argp = (STRING *) argblk->dolarg;
+                       for (argp = (char **) argblk->dolarg;
                             Rcheat(*argp) != ENDARGS; argp++) {
-                               free(*argp);
+                               sh_free(*argp);
                        }
-                       free(argblk);
-                       ;
-               };
+                       sh_free(argblk);
+               }
        }
        return (argr);
 }
 
-static STRING *copyargs(const char *from[], int n)
+static const char **copyargs(const char *from[], int n)
 {
-       register char **np =
-           (STRING *) alloc(sizeof(STRING *) * n + 3 * BYTESPERWORD);
+       register const char **np =
+           (const char **) alloc(sizeof(char *) * n + 3 * BYTESPERWORD);
        register const char **fp = from;
-       register char **pp = np;
+       register const char **pp = np;
 
        ((DOLPTR) np)->doluse = 1;      /* use count */
-       np = (STRING *) ((DOLPTR) np)->dolarg;
+       np = (const char **) ((DOLPTR) np)->dolarg;
        dolv = np;
 
        while (n--) {
                *np++ = make(*fp++);
        }
        *np++ = ENDARGS;
-       return (pp);
+       return pp;
 }
 
 void clearup(void)
index cc45690..e1b012f 100644 (file)
@@ -87,14 +87,12 @@ void addblok(POS reqd)
        }
 }
 
-void free(void *ap)
+void sh_free(void *ap)
 {
        BLKPTR p;
 
-       if ((p = ap) && p < bloktop) {
+       if ((p = ap) && p < bloktop)
                Lcheat((--p)->word) &= ~BUSY;
-               ;
-       }
 }
 
 #ifdef DEBUG
index d37e352..4e01828 100644 (file)
@@ -266,7 +266,7 @@ static TREPTR item(BOOL flag)
                p = (PARPTR) getstak(PARTYPE);
                p->partre = cmd(')', NLFLG);
                p->partyp = TPAR;
-               t = makefork(0, p);
+               t = makefork(0, /*FIXME*/(void *)p);
                break;
        }
 
index eb02b74..aaa7459 100644 (file)
@@ -1,9 +1,10 @@
 /* UNIX V7 source code: see /COPYRIGHT or www.tuhs.org for details. */
 /* Changes: Copyright (c) 1999 Robert Nordier. All rights reserved. */
 
-//#include <stdint.h>
+#include <stdint.h>
 #include <stddef.h>
 #include <unistd.h>
+#include <stdlib.h>
 
 /*
  *     UNIX shell
 
 /* result type declarations */
 extern void *setbrk(intptr_t);
-extern void sh_getenv(void);
 extern char **sh_setenv(void);
 
 
-#define alloc malloc
-ADDRESS alloc();
-void addblok();
-STRING make();
-STRING movstr();
-TREPTR cmd();
-TREPTR makefork();
-NAMPTR lookup();
-void setname();
-DOLPTR useargs();
-DOLPTR freeargs();
-REAL expr();
-STRING macro();
-void exname();
-void printnam();
-void printflg();
-
 #define attrib(n,f)    (n->namflg |= f)
 #define round(a,b)     (((int)((ADR(a)+b)-1))&~((b)-1))
 #define closepipe(x)   (close(x[INPIPE]), close(x[OTPIPE]))
@@ -120,7 +103,7 @@ extern IOPTR iopend;                /* documents waiting to be read at NL */
 
 /* substitution */
 extern int dolc;
-extern STRING *dolv;
+extern const char **dolv;
 extern DOLPTR argfor;
 extern ARGPTR gchain;
 
@@ -168,11 +151,11 @@ extern NAMNOD ps2nod;
 
 /* special names */
 extern char flagadr[10];
-extern STRING cmdadr;
-extern STRING exitadr;
-extern STRING dolladr;
-extern STRING pcsadr;
-extern STRING pidadr;
+extern char * cmdadr;
+extern char * exitadr;
+extern char * dolladr;
+extern char * pcsadr;
+extern char * pidadr;
 
 extern const char defpath[];
 
@@ -187,7 +170,7 @@ extern const char ps2name[];
 
 /* transput */
 extern CHAR tmpout[];
-extern STRING tmpnam;
+extern char * tmpnam;
 extern int serial;
 #define                TMPNAM 7
 extern FILE standin;
@@ -235,13 +218,12 @@ extern POS brkincr;
 #define SIGSET 4
 #define SIGMOD 8
 
-void fault();
 extern BOOL trapnote;
-extern STRING trapcom[];
+extern char * trapcom[];
 extern BOOL trapflg[];
 
 /* name tree and words */
-extern STRING *environ;
+extern char * *environ;
 extern CHAR numbuf[];
 extern const char export[];
 extern const char readonly[];
@@ -292,10 +274,10 @@ extern DOLPTR useargs(void);
 /* blok.c */
 ADDRESS alloc(POS nbytes);
 extern void addblok(POS reqd);
-extern void free(void *ap);    /* FIXME: rename sh_free */
-extern chkbptr(BLKPTR ptr);
+extern void sh_free(void *ap);
+extern int chkbptr(BLKPTR ptr);
 /* builtin.c */
-extern int builtin(int argn, STRING *cmd);
+extern int builtin(int argn, char * *cmd);
 /* cmd.c */
 extern TREPTR makefork(int flgs, TREPTR i);
 extern TREPTR cmd(int sym, int flg);
@@ -307,11 +289,56 @@ extern void error(const char *s);
 extern void exitsh(int xno);
 extern void done(void);
 extern void rmtemp(IOPTR base);
+/* expand.c */
+extern int expand(char *as, int rflg);
+extern int gmatch(register char *s, register char *p);
+extern void makearg(register char *args);
+/* fault.c */
+extern void fault(register int sig);
+extern void stdsigs(void);
+extern int ignsig(int n);
+extern void getsig(int n);
+extern void oldsigs(void);
+extern void clrsig(int i);
+extern void chktrap(void);
+/* io.c */
+extern void initf(UFD fd);
+extern int estabf(register const char *s);
+extern void push(FILE af);
+extern int pop(void);
+extern void chkpipe(int *pv);
+extern int chkopen(const char *idf);
+extern void sh_rename(register int f1, register int f2);
+extern int create(const char *s);
+extern int tmpfil(void);
+extern void copy(IOPTR ioparg);
+/* macro.c */
+extern char *macro(char *as);
+extern void subst(int in, int ot);
 /* main.c */
 extern int main(int c, const char *v[]);
 extern void chkpr(char eor);
 extern void settmp(void);
 extern void Ldup(register int fa, register int fb);
+/* name.c */
+extern int syslook(char *w, SYSTAB syswds);
+extern void setlist(register ARGPTR arg, int xp);
+extern void setname(char *argi, int xp);
+extern void replace(char **a, const char *v);
+extern void dfault(NAMPTR n, const char *v);
+extern void assign(NAMPTR n, const char *v);
+extern int readvar(char **names);
+extern void assnum(char **p, int i);
+extern char *make(const char *v);
+extern NAMPTR lookup(register char *nam);
+extern void namscan(void (*fn)(NAMPTR));
+extern void printnam(NAMPTR n);
+extern void exname(register NAMPTR n);
+extern void printflg(register NAMPTR n);
+extern void sh_getenv(void);
+extern void countnam(NAMPTR n);
+extern void pushnam(NAMPTR n);
+extern char **sh_setenv(void);
 /* print.c */
 extern void newline(void);
 extern void blank(void);
@@ -327,7 +354,7 @@ extern void initio(IOPTR iop);
 extern const char *getpath(const char *s);
 extern int pathopen(const char *path, const char *name);
 extern const char *catpath(register const char *path, const char *name);
-extern void execa(const char *at[]);
+extern void execa(const char **at);
 extern void postclr(void);
 extern void post(int pcsid);
 extern void await(int i);
@@ -336,15 +363,22 @@ extern char *mactrim(char *s);
 extern char **scan(int argn);
 extern int getarg(COMPTR ac);
 /* stak.c */
-extern STKPTR getstak(int asize);
-extern STKPTR locstak(void);
-extern STKPTR savstak(void);
-extern STKPTR endstak(register STRING argp);
-extern void tdystak(register STKPTR x);
+extern char * getstak(int asize);
+extern char * locstak(void);
+extern char * savstak(void);
+extern char * endstak(register char * argp);
+extern void tdystak(register char * x);
 extern void stakchk(void);
-extern STKPTR cpystak(STKPTR x);
+extern char *cpystak(const char *x);
 /* string.c */
 extern char *movstr(register const char *a, register char *b);
 extern int any(char c, const char *s);
 extern int cf(register const char *s1, register const char *s2);
 extern int length(const char *as);
+/* word.c */
+extern int word(void);
+extern int nextc(char quote);
+extern int readc(void);
+/* xec.c */
+extern int execute(TREPTR argt, int execflg, int *pf1, int *pf2);
+extern void execexp(char *s, UFD f);
index 7c5a48c..e468336 100644 (file)
  *
  */
 
-static void addg();
+static void addg(const char *as1, char *as2, const char *as3);
 
 
-int expand(as, rflg)
-STRING as;
+int expand(char *as, int rflg)
 {
        int count, dirf;
        BOOL dir = 0;
        STRING rescan = 0;
-       register STRING s, cs;
+       register char *s, *cs;
        ARGPTR schain = gchain;
        struct dirent entry;
        STATBUF statb;
 
-       if (trapnote & SIGSET) {
-               return (0);;
-       }
+       if (trapnote & SIGSET)
+               return (0);
 
        s = cs = as;
        entry.d_name[DIRSIZ - 1] = 0;   /* to end the string */
@@ -52,8 +50,7 @@ STRING as;
        {
                register BOOL slash;
                slash = 0;
-               while (!fngchar(*cs)
-                   ) {
+               while (!fngchar(*cs)) {
                        if (*cs++ == 0) {
                                if (rflg && slash) {
                                        break;
@@ -62,14 +59,13 @@ STRING as;
                                }
                        } else if (*cs == '/') {
                                slash++;
-                               ;
-                       };
+                       }
                }
        }
 
        for (;;) {
                if (cs == s) {
-                       s = nullstr;
+                       s = (char *)nullstr;
                        break;
                } else if (*--cs == '/') {
                        *cs = 0;
@@ -77,21 +73,19 @@ STRING as;
                                s = "/";
                        }
                        break;
-                       ;
                }
        }
        if (stat(s, &statb) >= 0
            && (statb.st_mode & S_IFMT) == S_IFDIR
            && (dirf = open(s, 0)) > 0) {
                dir++;
-               ;
        }
        count = 0;
        if (*cs == 0) {
                *cs++ = 0200;
        }
        if (dir) {              /* check for rescan */
-               register STRING rs;
+               register char *rs;
                rs = cs;
 
                do {
@@ -103,20 +97,13 @@ STRING as;
                } while (*rs++);
 
                // FIXME: readdir
-               while (read(dirf, (void *) &entry, 32) == 32
-                      && (trapnote & SIGSET) == 0) {
-                       if (entry.d_ino == 0
-                           || (*entry.d_name == '.' && *cs != '.')
-                           ) {
+               while (read(dirf, (void *) &entry, 32) == 32 && (trapnote & SIGSET) == 0) {
+                       if (entry.d_ino == 0 || (*entry.d_name == '.' && *cs != '.'))
                                continue;
-                               ;
-                       }
-                       if (gmatch(entry.d_name, cs)
-                           ) {
+                       if (gmatch(entry.d_name, cs)) {
                                addg(s, entry.d_name, rescan);
                                count++;
-                               ;
-                       };
+                       }
                }
                close(dirf);
 
@@ -129,36 +116,30 @@ STRING as;
                                while (rchain) {
                                        count += expand(rchain->argval, 1);
                                        rchain = rchain->argnxt;
-                                       ;
                                }
-                               ;
                        }
                        *rescan = '/';
-                       ;
-               };
+               }
        }
 
        {
-               register CHAR c;
+               register char c;
                s = as;
-               while (c = *s) {
+               while (c = *s)
                        *s++ = (c & STRIP ? c : '/');
-               }
        }
-       return (count);
+       return count;
 }
 
-gmatch(s, p)
-register STRING s, p;
+int gmatch(register char *s, register char *p)
 {
        register int scc;
-       CHAR c;
+       char c;
 
        if (scc = *s++) {
                if ((scc &= STRIP) == 0) {
                        scc = 0200;
-                       ;
-               };
+               }
        }
        switch (c = *p++) {
        case '[':
@@ -177,42 +158,38 @@ register STRING s, p;
                                } else {
                                        if (scc == (lc = (c & STRIP))) {
                                                ok++;
-                                       };
+                                       }
                                }
-                               ;
                        }
                        return (0);
                }
 
        default:
-               if ((c & STRIP) != scc) {
+               if ((c & STRIP) != scc)
                        return (0);
-               }
 
        case '?':
                return (scc ? gmatch(s, p) : 0);
 
        case '*':
-               if (*p == 0) {
-                       return (1);
-               }
+               if (*p == 0)
+                       return 1;
                --s;
                while (*s) {
-                       if (gmatch(s++, p)) {
-                               return (1);
-                       };
+                       if (gmatch(s++, p))
+                               return 1;
                }
-               return (0);
+               return 0;
 
        case 0:
                return (scc == 0);
        }
 }
 
-static void addg(as1, as2, as3)
-STRING as1, as2, as3;
+static void addg(const char *as1, char *as2, const char *as3)
 {
-       register STRING s1, s2;
+       register const char *s1;
+       register char *s2;
        register int c;
 
        s2 = locstak() + BYTESPERWORD;
@@ -225,7 +202,6 @@ STRING as1, as2, as3;
                        ;
                }
                *s2++ = c;
-               ;
        }
        s1 = as2;
        while (*s2 = *s1++) {
@@ -234,13 +210,11 @@ STRING as1, as2, as3;
        if (s1 = as3) {
                *s2++ = '/';
                while (*s2++ = *++s1);
-               ;
        }
        makearg(endstak(s2));
 }
 
-makearg(args)
-register STRING args;
+void makearg(register char *args)
 {
        ((ARGPTR) args)->argnxt = gchain;
        gchain = (ARGPTR) args;
index b24dd97..c35c755 100644 (file)
@@ -19,31 +19,25 @@ BOOL trapflg[MAXTRAP];
 /* ========    fault handling routines    ======== */
 
 
-void fault(sig)
-register int sig;
+void fault(register int sig)
 {
        register int flag;
 
        signal(sig, fault);
        if (sig == MEMF) {
-               if (setbrk(brkincr) == -1) {
+               if (setbrk(brkincr) == (void *)-1)
                        error(nospace);
-                       ;
-               }
        } else if (sig == ALARM) {
-               if (flags & waiting) {
+               if (flags & waiting)
                        done();
-                       ;
-               }
        } else {
                flag = (trapcom[sig] ? TRAPSET : SIGSET);
                trapnote |= flag;
                trapflg[sig] |= flag;
-               ;
        }
 }
 
-stdsigs()
+void stdsigs(void)
 {
        ignsig(QUIT);
        getsig(INTR);
@@ -51,20 +45,19 @@ stdsigs()
        getsig(ALARM);
 }
 
-ignsig(n)
+int ignsig(int n)
 {
        register int s, i;
 #if 0
        // FIXME: need to do proper SIG_IGN checks/handling
        if ((s = signal(i = n, 1) & 01) == 0) {
                trapflg[i] |= SIGMOD;
-               ;
        }
 #endif
        return (s);
 }
 
-getsig(n)
+void getsig(int n)
 {
        register int i;
 
@@ -74,37 +67,32 @@ getsig(n)
        }
 }
 
-oldsigs()
+void oldsigs(void)
 {
        register int i;
-       register STRING t;
+       register char *t;
 
        i = MAXTRAP;
        while (i--) {
                t = trapcom[i];
-               if (t == 0 || *t) {
+               if (t == 0 || *t)
                        clrsig(i);
-                       ;
-               }
                trapflg[i] = 0;
-               ;
        }
        trapnote = 0;
 }
 
-clrsig(i)
-int i;
+void clrsig(int i)
 {
-       free(trapcom[i]);
+       sh_free(trapcom[i]);
        trapcom[i] = 0;
        if (trapflg[i] & SIGMOD) {
                signal(i, fault);
                trapflg[i] &= ~SIGMOD;
-               ;
        }
 }
 
-chktrap()
+void chktrap(void)
 {
        /* check for traps */
        register int i = MAXTRAP;
@@ -114,14 +102,12 @@ chktrap()
        while (--i) {
                if (trapflg[i] & TRAPSET) {
                        trapflg[i] &= ~TRAPSET;
-                       if (t = trapcom[i]
-                           ) {
+                       if (t = trapcom[i]) {
                                int savxit = exitval;
                                execexp(t, 0);
                                exitval = savxit;
                                exitset();
-                               ;
-                       };
-               };
+                       }
+               }
        }
 }
index fd083b4..1011da8 100644 (file)
@@ -1,39 +1,43 @@
+#include "defs.h"
+
 int wdval;
-int iopend;
 int flags;
 int peekc;
-char *comdiv;
+const char *comdiv;
 int breakcnt;
 int loopcnt;
-int execbrk;
+BOOL execbrk;
 int exitval;
 int dolc;
-char **dolv;
+const char **dolv;
 /* FIXME */
-void *argfor;
-void *gchain;
-int iotemp;
-int iopend;
+DOLPTR argfor;
+ARGPTR gchain;
+IOPTR iotemp;
+IOPTR iopend;
 int ioset;
-int output;
 char *pidadr;
 char *dolladr;
 char *pcsadr;
-char *pidadr;
 char *exitadr;
 char *cmdadr;
 int wdset;
-void *wdarg;
-int reserv;
+ARGPTR wdarg;
+BOOL reserv;
 int wdnum;
-int trapnote;
-int end;
+BOOL trapnote;
+address end[1];                /* FIXME */
 int serial;
+BLKPTR stakbsy;
+STKPTR stakbas;
+STKPTR brkend;
+STKPTR staktop;
 
 #include <setjmp.h>
 jmp_buf subshell;
 jmp_buf errshell;
 
+#if 0
 /* FIXME */
 
 int setjmp(jmp_buf bar)
@@ -43,3 +47,4 @@ int setjmp(jmp_buf bar)
 void longjmp(jmp_buf bar, int foo)
 {
 }
+#endif
index 1a9e811..ff5c08c 100644 (file)
@@ -15,8 +15,7 @@
 
 /* ========    input output and file copying ======== */
 
-initf(fd)
-UFD fd;
+void initf(UFD fd)
 {
        register FILE f = standin;
 
@@ -28,19 +27,17 @@ UFD fd;
        f->feof = FALSE;
 }
 
-estabf(s)
-register STRING s;
+int estabf(register const char *s)
 {
        register FILE f;
 
        (f = standin)->fdes = -1;
-       f->fend = length(s) + (f->fnxt = s);
+       f->fend = length(s) + (f->fnxt = (char *)s);/*FIXME review */
        f->flin = 1;
        return (f->feof = (s == 0));
 }
 
-push(af)
-FILE af;
+void push(FILE af)
 {
        register FILE f;
 
@@ -50,81 +47,66 @@ FILE af;
        standin = f;
 }
 
-pop()
+int pop(void)
 {
        register FILE f;
 
        if ((f = standin)->fstak) {
-               if (f->fdes >= 0) {
+               if (f->fdes >= 0)
                        close(f->fdes);
-               }
                standin = f->fstak;
                return (TRUE);
-       } else {
+       } else
                return (FALSE);
-               ;
-       }
 }
 
-chkpipe(pv)
-int *pv;
+void chkpipe(int *pv)
 {
-       if (pipe(pv) < 0 || pv[INPIPE] < 0 || pv[OTPIPE] < 0) {
+       if (pipe(pv) < 0 || pv[INPIPE] < 0 || pv[OTPIPE] < 0)
                error(piperr);
-               ;
-       }
 }
 
-chkopen(idf)
-STRING idf;
+int chkopen(const char *idf)
 {
        register int rc;
 
-       if ((rc = open(idf, 0)) < 0) {
+       if ((rc = open(idf, 0)) < 0)
                failed(idf, badopen);
-       } else {
-               return (rc);
-               ;
-       }
+       else
+               return rc;
 }
 
-sh_rename(f1, f2)
-register int f1, f2;
+void sh_rename(register int f1, register int f2)
 {
        if (f1 != f2) {
                dup2(f1, f2);
                close(f1);
-               if (f2 == 0) {
+               if (f2 == 0)
                        ioset |= 1;
-               };
        }
 }
 
-create(s)
-STRING s;
+int create(const char *s)
 {
        register int rc;
 
-       if ((rc = creat(s, 0666)) < 0) {
+       if ((rc = creat(s, 0666)) < 0)
                failed(s, badcreate);
-       } else {
-               return (rc);
-               ;
-       }
+       else
+               return rc;
 }
 
-tmpfil()
+int tmpfil(void)
 {
        itos(serial++);
        movstr(numbuf, tmpnam);
-       return (create(tmpout));
+       return create(tmpout);
 }
 
 /* set by trim */
 BOOL nosubst;
 
-copy(ioparg)
-IOPTR ioparg;
+void copy(IOPTR ioparg)
 {
        CHAR c, *ends;
        register CHAR *cline, *clinep;
@@ -134,9 +116,10 @@ IOPTR ioparg;
        if (iop = ioparg) {
                copy(iop->iolst);
                ends = mactrim(iop->ioname);
-               if (nosubst) {
+
+               if (nosubst)
                        iop->iofile &= ~IODOC;
-               }
+
                fd = tmpfil();
                iop->ioname = cpystak(tmpout);
                iop->iolst = iotemp;
@@ -146,19 +129,17 @@ IOPTR ioparg;
                for (;;) {
                        clinep = cline;
                        chkpr(NL);
-                       while ((c =
-                               (nosubst ? readc() : nextc(*ends)),
-                               !eolchar(c))) {
+                       while ((c = (nosubst ? readc() : nextc(*ends)),!eolchar(c))) {
                                *clinep++ = c;
                        }
                        *clinep = 0;
-                       if (eof || eq(cline, ends)) {
+
+                       if (eof || eq(cline, ends))
                                break;
-                       }
+
                        *clinep++ = NL;
                        write(fd, cline, clinep - cline);
                }
                close(fd);
-               ;
        }
 }
index b9f91d6..2619940 100644 (file)
 static CHAR quote;             /* used locally */
 static CHAR quoted;            /* used locally */
 
-static getch();
-static comsubst();
-static flush();
+static int getch(char);
+static void comsubst(void);
+static void flush(int);
 
-
-static STRING copyto(endch)
-register CHAR endch;
+static char *copyto(char endch)
 {
        register CHAR c;
 
-       while ((c = getch(endch)) != endch && c) {
+       while ((c = getch(endch)) != endch && c)
                pushstak(c | quote);
-       }
        zerostak();
-       if (c != endch) {
+
+       if (c != endch)
                error(badsub);
-       }
 }
 
-static skipto(endch)
-register CHAR endch;
+static int skipto(char endch)
 {
        /* skip chars up to } */
-       register CHAR c;
+       register char c;
        while ((c = readc()) && c != endch) {
                switch (c) {
 
@@ -52,46 +48,39 @@ register CHAR endch;
                        break;
 
                case DOLLAR:
-                       if (readc() == BRACE) {
+                       if (readc() == BRACE)
                                skipto('}');
-                               ;
-                       }
                }
-               ;
        }
        if (c != endch) {
                error(badsub);
        }
 }
 
-static getch(endch)
-CHAR endch;
+static int getch(char endch)
 {
-       register CHAR d;
+       register char d;
 
-      retry:
+retry:
        d = readc();
-       if (!subchar(d)
-           ) {
+       if (!subchar(d))
                return (d);
-               ;
-       }
+
        if (d == DOLLAR) {
                register int c;
-               if ((c = readc(), dolchar(c))
-                   ) {
+               if ((c = readc(), dolchar(c))) {
                        NAMPTR n = (NAMPTR) NIL;
                        int dolg = 0;
                        BOOL bra;
-                       register STRING argp, v;
+                       register const char *argp;
+                       register const char *v;
                        CHAR idb[2];
-                       STRING id = idb;
+                       char *id = idb;
 
-                       if (bra = (c == BRACE)) {
+                       if (bra = (c == BRACE))
                                c = readc();
-                       }
-                       if (letter(c)
-                           ) {
+
+                       if (letter(c)) {
                                argp = (STRING) relstak();
                                while (alphanum(c)) {
                                        pushstak(c);
@@ -101,22 +90,19 @@ CHAR endch;
                                n = lookup(absstak(argp));
                                setstak(argp);
                                v = n->namval;
-                               id = n->namid;
+                               id = (char *)n->namid;
                                peekc = c | MARK;;
-                       } else if (digchar(c)
-                           ) {
+                       } else if (digchar(c)) {
                                *id = c;
                                idb[1] = 0;
-                               if (astchar(c)
-                                   ) {
+                               if (astchar(c)) {
                                        dolg = 1;
                                        c = '1';
-                                       ;
                                }
                                c -= '0';
-                               v = ((c == 0) ? cmdadr : (c <=
-                                                         dolc) ? dolv[c]
-                                    : (STRING) (dolg = 0));
+                               v = ((c == 0) ? (const char *)cmdadr :
+                                        (c <= dolc) ? dolv[c]
+                                        : (dolg = 0, NULL));
                        } else if (c == '$') {
                                v = pidadr;
                        } else if (c == '!') {
@@ -131,76 +117,57 @@ CHAR endch;
                                error(badsub);
                        } else {
                                goto retry;
-                               ;
                        }
                        c = readc();
-                       if (!defchar(c) && bra) {
+
+                       if (!defchar(c) && bra)
                                error(badsub);
-                               ;
-                       }
+
                        argp = 0;
                        if (bra) {
                                if (c != '}') {
                                        argp = (STRING) relstak();
-                                       if ((v == 0) ^ (setchar(c))
-                                           ) {
+                                       if ((v == 0) ^ (setchar(c)))
                                                copyto('}');
-                                       } else {
+                                       else
                                                skipto('}');
-                                               ;
-                                       }
+
                                        argp = absstak(argp);
-                                       ;
                                }
                        } else {
                                peekc = c | MARK;
                                c = 0;
-                               ;
                        }
                        if (v) {
                                if (c != '+') {
                                        for (;;) {
-                                               while (c = *v++) {
-                                                       pushstak(c |
-                                                                quote);;
-                                               }
-                                               if (dolg == 0
-                                                   || (++dolg > dolc)
-                                                   ) {
+                                               while (c = *v++)
+                                                       pushstak(c | quote);
+
+                                               if (dolg == 0 || (++dolg > dolc))
                                                        break;
-                                               else {
+                                               else {
                                                        v = dolv[dolg];
-                                                       pushstak(SP |
-                                                                (*id ==
-                                                                 '*' ?
-                                                                 quote :
-                                                                 0));
-                                                       ;
+                                                       pushstak(SP | (*id == '*' ? quote : 0));
                                                }
                                        }
-                                       ;
                                }
                        } else if (argp) {
                                if (c == '?') {
                                        failed(id,
                                               *argp ? argp : badparam);
                                } else if (c == '=') {
-                                       if (n) {
+                                       if (n)
                                                assign(n, argp);
-                                       } else {
+                                       else
                                                error(badsub);
-                                               ;
-                                       }
-                                       ;
                                }
-                       } else if (flags & setflg) {
+                        } else if (flags & setflg) {
                                failed(id, badparam);
-                               ;
                        }
                        goto retry;
                } else {
                        peekc = c | MARK;
-                       ;
                }
        } else if (d == endch) {
                return (d);
@@ -211,13 +178,11 @@ CHAR endch;
                quoted++;
                quote ^= QUOTE;
                goto retry;
-               ;
        }
-       return (d);
+       return d;
 }
 
-STRING macro(as)
-STRING as;
+char *macro(char *as)
 {
        /* Strip "" and do $ substitution
         * Leaves result on top of stack
@@ -226,7 +191,7 @@ STRING as;
        register CHAR savq = quote;
        FILEHDR fb;
 
-       push(&fb);
+       push((void *)&fb);/*FIXME*/
        estabf(as);
        usestak();
        quote = 0;
@@ -241,20 +206,19 @@ STRING as;
        return (fixstak());
 }
 
-static comsubst()
+static void comsubst(void)
 {
        /* command substn */
        FILEBLK cb;
-       register CHAR d;
+       register char d;
        register STKPTR savptr = fixstak();
 
        usestak();
-       while ((d = readc()) != SQUOTE && d) {
+       while ((d = readc()) != SQUOTE && d)
                pushstak(d);
-       }
 
        {
-               register STRING argc;
+               register char *argc;
                trim(argc = fixstak());
                push(&cb);
                estabf(argc);
@@ -274,50 +238,47 @@ static comsubst()
        }
        tdystak(savptr);
        staktop = movstr(savptr, stakbot);
-       while (d = readc()) {
+
+       while (d = readc())
                pushstak(d | quote);
-       }
+
        await(0);
+
        while (stakbot != staktop) {
                if ((*--staktop & STRIP) != NL) {
                        ++staktop;
                        break;
-                       ;
-               };
+               }
        }
        pop();
 }
 
 #define CPYSIZ 512
 
-subst(in, ot)
-int in, ot;
+void subst(int in, int ot)
 {
-       register CHAR c;
+       register char c;
        FILEBLK fb;
        register int count = CPYSIZ;
 
        push(&fb);
        initf(in);
        /* DQUOTE used to stop it from quoting */
-       while (c = (getch(DQUOTE) & STRIP)
-           ) {
+       while (c = (getch(DQUOTE) & STRIP)) {
                pushstak(c);
                if (--count == 0) {
                        flush(ot);
                        count = CPYSIZ;
-                       ;
-               };
+               }
        }
        flush(ot);
        pop();
 }
 
-static flush(ot)
+static void flush(int ot)
 {
        write(ot, stakbot, staktop - stakbot);
-       if (flags & execpr) {
+       if (flags & execpr)
                write(output, stakbot, staktop - stakbot);
-       }
        staktop = stakbot;
 }
index 765640f..9c44e74 100644 (file)
@@ -60,7 +60,7 @@ int main(int c, const char *v[])
 
        /* number of positional parameters */
        assnum(&dolladr, dolc);
-       cmdadr = dolv[0];
+       cmdadr = (char *)dolv[0];
 
        /* set pidname */
        assnum(&pidadr, getpid());
@@ -167,7 +167,7 @@ static void exfile(BOOL prof)
                        return;
                alarm(0);
                flags &= ~waiting;
-               execute(cmd(NL, MTFLG), 0);
+               execute(cmd(NL, MTFLG), 0, NULL, NULL);
                eof |= (flags & oneflg);
        }
 }
index 56e9604..2a459b5 100644 (file)
@@ -10,9 +10,8 @@
 #define BYTESPERWORD   (sizeof(char *))
 
 typedef char CHAR;
-typedef char BOOL;
+typedef signed char BOOL;
 typedef int UFD;
-typedef float REAL;
 typedef void *ADDRESS;
 typedef long int L_INT;
 typedef unsigned POS;
@@ -79,9 +78,9 @@ struct fileblk {
        POS flin;
        BOOL feof;
        CHAR fsiz;
-       STRING fnxt;
-       STRING fend;
-       STRING *feval;
+       char * fnxt;
+       char * fend;
+       char * *feval;
        FILE fstak;
        CHAR fbuf[BUFSIZ];
 };
@@ -92,15 +91,15 @@ struct filehdr {
        POS flin;
        BOOL feof;
        CHAR fsiz;
-       STRING fnxt;
-       STRING fend;
-       STRING *feval;
+       char * fnxt;
+       char * fend;
+       char * *feval;
        FILE fstak;
        CHAR _fbuf[1];
 };
 
 struct sysnod {
-       STRING sysnam;
+       const char * sysnam;
        int sysval;
 };
 
@@ -155,13 +154,13 @@ struct whnod {
 struct fornod {
        int fortyp;
        TREPTR fortre;
-       STRING fornam;
+       char * fornam;
        COMPTR forlst;
 };
 
 struct swnod {
        int swtyp;
-       STRING swarg;
+       char * swarg;
        REGPTR swlst;
 };
 
@@ -184,7 +183,7 @@ struct lstnod {
 
 struct ionod {
        int iofile;
-       STRING ioname;
+       char * ioname;
        IOPTR ionxt;
        IOPTR iolst;
 };
index 9e4d48a..3508b5c 100644 (file)
@@ -90,7 +90,8 @@ SYSTAB reserved = {
        {0, 0},
 };
 
-STRING sysmsg[] = {
+/* FIXME: align with actual OS! */
+const char *sysmsg[] = {
        0,
        "Hangup",
        0,                      /* Interrupt */
index 703eee7..dff927a 100644 (file)
 
 #include       "defs.h"
 
-static BOOL chkid();
-static void namwalk();
+static BOOL chkid(const char *);
+static void namwalk(NAMPTR);
 
 
-NAMNOD ps2nod = { (NAMPTR) NIL, (NAMPTR) NIL, ps2name }, fngnod = {
-(NAMPTR) NIL, (NAMPTR) NIL, fngname}, pathnod = {
-(NAMPTR) NIL, (NAMPTR) NIL, pathname}, ifsnod = {
-(NAMPTR) NIL, (NAMPTR) NIL, ifsname}, ps1nod = {
-&pathnod, &ps2nod, ps1name}, homenod = {
-&fngnod, &ifsnod, homename}, mailnod = {
-&homenod, &ps1nod, mailname};
+NAMNOD ps2nod =  { (NAMPTR) NIL, (NAMPTR) NIL, ps2name  };
+NAMNOD fngnod =  { (NAMPTR) NIL, (NAMPTR) NIL, fngname  };
+NAMNOD pathnod = { (NAMPTR) NIL, (NAMPTR) NIL, pathname };
+NAMNOD ifsnod =  { (NAMPTR) NIL, (NAMPTR) NIL, ifsname  };
+NAMNOD ps1nod =  { &pathnod, &ps2nod, ps1name  };
+NAMNOD homenod = { &fngnod,  &ifsnod, homename };
+NAMNOD mailnod = { &homenod, &ps1nod, mailname };
 
 NAMPTR namep = &mailnod;
 
 
 /* ========    variable and string handling    ======== */
 
-syslook(w, syswds)
-STRING w;
-SYSTAB syswds;
+int syslook(char *w, SYSTAB syswds)
 {
-       register CHAR first;
-       register STRING s;
+       register char first;
+       register const char *s;
        register SYSPTR syscan;
 
        syscan = syswds;
        first = *w;
 
        while (s = syscan->sysnam) {
-               if (first == *s && eq(w, s)
-                   ) {
+               if (first == *s && eq(w, s))
                        return (syscan->sysval);
-                       ;
-               }
                syscan++;
-               ;
        }
        return (0);
 }
 
-setlist(arg, xp)
-register ARGPTR arg;
-int xp;
+void setlist(register ARGPTR arg, int xp)
 {
        while (arg) {
-               register STRING s = mactrim(arg->argval);
+               register char *s = mactrim(arg->argval);
                setname(s, xp);
                arg = arg->argnxt;
                if (flags & execpr) {
                        prs(s);
-                       if (arg) {
+                       if (arg)
                                blank();
-                       } else {
+                       else
                                newline();;
-                       }
-                       ;
-               };
+               }
        }
 }
 
-void setname(argi, xp)
-STRING argi;
-int xp;
+void setname(char *argi, int xp)
 {
-       register STRING argscan = argi;
+       register char *argscan = argi;
        register NAMPTR n;
 
-       if (letter(*argscan)
-           ) {
-               while (alphanum(*argscan)) {
+       if (letter(*argscan)) {
+               while (alphanum(*argscan))
                        argscan++;
-               }
                if (*argscan == '=') {
                        *argscan = 0;
                        n = lookup(argi);
                        *argscan++ = '=';
                        attrib(n, xp);
-                       if (xp & N_ENVNAM) {
+                       if (xp & N_ENVNAM)
                                n->namenv = n->namval = argscan;
-                       } else {
+                       else
                                assign(n, argscan);
-                               ;
-                       }
                        return;
-                       ;
-               };
+               }
        }
        failed(argi, notid);
 }
 
-replace(a, v)
-register STRING *a;
-STRING v;
+void replace(char **a, const char *v)
 {
-       free(*a);
+       sh_free(*a);
        *a = make(v);
 }
 
-dfault(n, v)
-NAMPTR n;
-STRING v;
+void dfault(NAMPTR n, const char *v)
 {
        if (n->namval == 0) {
                assign(n, v);
        }
 }
 
-assign(n, v)
-NAMPTR n;
-STRING v;
+void assign(NAMPTR n, const char *v)
 {
-       if (n->namflg & N_RDONLY) {
+       if (n->namflg & N_RDONLY)
                failed(n->namid, wtfailed);
-       } else {
-               replace(&n->namval, v);
-               ;
-       }
+       else
+               replace((char **)&n->namval, v);        /* FIXME: check safe */
 }
 
-int readvar(names)
-STRING *names;
+int readvar(char **names)
 {
        FILEBLK fb;
        register FILE f = &fb;
-       register CHAR c;
+       register char c;
        register int rc = 0;
        NAMPTR n = lookup(*names++);    /* done now to avoid storage mess */
        STKPTR rel = (STKPTR) relstak();
 
        push(f);
        initf(dup(0));
-       if (lseek(0, 0L, 1) == -1) {
+
+       if (lseek(0, 0L, 1) == -1)
                f->fsiz = 1;
-               ;
-       }
 
        for (;;) {
                c = nextc(0);
-               if ((*names && any(c, ifsnod.namval)) || eolchar(c)
-                   ) {
+               if ((*names && any(c, ifsnod.namval)) || eolchar(c)) {
                        zerostak();
                        assign(n, absstak(rel));
                        setstak(rel);
-                       if (*names) {
+                       if (*names)
                                n = lookup(*names++);
-                       } else {
+                       else
                                n = 0;
-                               ;
-                       }
-                       if (eolchar(c)
-                           ) {
+                       if (eolchar(c))
                                break;
-                               ;
-                       }
                } else {
                        pushstak(c);
-                       ;
                }
        }
        while (n) {
                assign(n, nullstr);
-               if (*names) {
+               if (*names)
                        n = lookup(*names++);
-               } else {
-                       n = 0;;
-               }
-               ;
+               else
+                       n = 0;
        }
-
-       if (eof) {
+       if (eof)
                rc = 1;
-       }
        lseek(0, (long) (f->fnxt - f->fend), 1);
        pop();
-       return (rc);
+       return rc;
 }
 
-assnum(p, i)
-STRING *p;
-int i;
+void assnum(char **p, int i)
 {
        itos(i);
        replace(p, numbuf);
 }
 
-STRING make(v)
-STRING v;
+char *make(const char *v)
 {
-       register STRING p;
+       register char *p;
 
        if (v) {
                movstr(v, p = alloc(length(v)));
-               return (p);
-       } else {
-               return (0);
-               ;
-       }
+               return p;
+       } else
+               return 0;
 }
 
 
-NAMPTR lookup(nam)
-register STRING nam;
+NAMPTR lookup(register char *nam)
 {
        register NAMPTR nscan = namep;
        register NAMPTR *prev;
        int LR;
 
-       if (!chkid(nam)
-           ) {
+       if (!chkid(nam))
                failed(nam, notid);
-               ;
-       }
+
        while (nscan) {
-               if ((LR = cf(nam, nscan->namid)) == 0) {
+               if ((LR = cf(nam, nscan->namid)) == 0)
                        return (nscan);
-               } else if (LR < 0) {
+               else if (LR < 0)
                        prev = &(nscan->namlft);
-               } else {
+               else
                        prev = &(nscan->namrgt);
-                       ;
-               }
+
                nscan = *prev;
-               ;
        }
 
        /* add name node */
@@ -247,50 +199,41 @@ register STRING nam;
        return (*prev = nscan);
 }
 
-static BOOL chkid(nam)
-STRING nam;
+static BOOL chkid(const char *nam)
 {
-       register CHAR *cp = nam;
+       register const char *cp = nam;
 
-       if (!letter(*cp)
-           ) {
+       if (!letter(*cp))
                return (FALSE);
-       else {
+       else {
                while (*++cp) {
-                       if (!alphanum(*cp)
-                           ) {
+                       if (!alphanum(*cp))
                                return (FALSE);
-                               ;
-                       };
                }
-               ;
        }
-       return (TRUE);
+       return TRUE;
 }
 
-static void (*namfn) ();
-namscan(fn)
-void (*fn) ();
+static void (*namfn) (NAMPTR);
+
+void namscan(void (*fn) (NAMPTR))
 {
        namfn = fn;
        namwalk(namep);
 }
 
-static void namwalk(np)
-register NAMPTR np;
+static void namwalk(NAMPTR np)
 {
        if (np) {
                namwalk(np->namlft);
                (*namfn) (np);
                namwalk(np->namrgt);
-               ;
        }
 }
 
-void printnam(n)
-NAMPTR n;
+void printnam(NAMPTR n)
 {
-       register STRING s;
+       register const char *s;
 
        sigchk();
        if (s = n->namval) {
@@ -298,14 +241,12 @@ NAMPTR n;
                prc('=');
                prs(s);
                newline();
-               ;
        }
 }
 
-static STRING staknam(n)
-register NAMPTR n;
+static char *staknam(register NAMPTR n)
 {
-       register STRING p;
+       register char *p;
 
        p = movstr(n->namid, staktop);
        p = movstr("=", p);
@@ -313,37 +254,30 @@ register NAMPTR n;
        return (getstak(p + 1 - ADR(stakbot)));
 }
 
-void exname(n)
-register NAMPTR n;
+void exname(register NAMPTR n)
 {
        if (n->namflg & N_EXPORT) {
-               free(n->namenv);
+               sh_free((void *)n->namenv);
                n->namenv = make(n->namval);
        } else {
-               free(n->namval);
+               sh_free((void *)n->namval);
                n->namval = make(n->namenv);
-               ;
        }
 }
 
-void printflg(n)
-register NAMPTR n;
+void printflg(register NAMPTR n)
 {
        if (n->namflg & N_EXPORT) {
                prs(export);
                blank();
-               ;
        }
        if (n->namflg & N_RDONLY) {
                prs(readonly);
                blank();
-               ;
        }
-       if (n->namflg & (N_EXPORT | N_RDONLY)
-           ) {
+       if (n->namflg & (N_EXPORT | N_RDONLY)) {
                prs(n->namid);
                newline();
-               ;
        }
 }
 
@@ -358,21 +292,17 @@ void sh_getenv(void)
 
 static int namec;
 
-void countnam(n)
-NAMPTR n;
+void countnam(NAMPTR n)
 {
        namec++;
 }
 
-static STRING *argnam;
+static char **argnam;
 
-void pushnam(n)
-NAMPTR n;
+void pushnam(NAMPTR n)
 {
-       if (n->namval) {
+       if (n->namval)
                *argnam++ = staknam(n);
-               ;
-       }
 }
 
 char **sh_setenv(void)
@@ -385,5 +315,5 @@ char **sh_setenv(void)
            (STRING *) getstak(namec * BYTESPERWORD + BYTESPERWORD);
        namscan(pushnam);
        *argnam++ = 0;
-       return (er);
+       return er;
 }
index 277061d..eb6f611 100644 (file)
@@ -20,8 +20,8 @@
 struct namnod {
        NAMPTR namlft;
        NAMPTR namrgt;
-       STRING namid;
-       STRING namval;
-       STRING namenv;
+       const char * namid;
+       const char * namval;
+       const char * namenv;
        int namflg;
 };
index 6945e88..4e9c651 100644 (file)
@@ -21,7 +21,8 @@ static int split(const char *s);
 
 /* FIXME: errno from header */
 extern int errno;
-extern STRING sysmsg[];
+/* FIXME: put into a header */
+extern const char *sysmsg[];
 
 /* fault handling */
 #define ENOMEM 12
@@ -76,7 +77,7 @@ void initio(IOPTR iop)
 
 const char *getpath(const char *s)
 {
-       register char *path;
+       register const char *path;
        if (any('/', s)) {
                if (flags & rshflg) {
                        failed(s, restricted);
@@ -124,7 +125,7 @@ const char *catpath(register const char *path, const char *name)
 static const char *xecmsg;
 static char **xecenv;
 
-void execa(const char *at[])
+void execa(const char **at)
 {
        register const char *path;
        register const char **t = at;
@@ -270,7 +271,7 @@ void await(int i)
        exitset();
 }
 
-BOOL nosubst;
+extern BOOL nosubst;   /* FIXME */
 
 void trim(char *at)
 {
index d9d2b49..736157e 100644 (file)
@@ -26,7 +26,7 @@ STKPTR getstak(int asize)
        size = round(asize, BYTESPERWORD);
        oldstak = stakbot;
        staktop = stakbot += size;
-       return (oldstak);
+       return oldstak;
 }
 
 STKPTR locstak(void)
@@ -35,51 +35,46 @@ STKPTR locstak(void)
                                 */
        if (brkend - stakbot < BRKINCR) {
                setbrk(brkincr);
-               if (brkincr < BRKMAX) {
+               if (brkincr < BRKMAX)
                        brkincr += 256;
-                       ;
-               };
        }
-       return (stakbot);
+       return stakbot;
 }
 
 STKPTR savstak(void)
 {
         /* FIXME: check assert doesn't suck in stdio */
        assert(staktop == stakbot);
-       return (stakbot);
+       return stakbot;
 }
 
-STKPTR endstak(register STRING argp)
+STKPTR endstak(register char *argp)
 {                              /* tidy up after `locstak' */
-       register STKPTR oldstak;
+       register char *oldstak;
        *argp++ = 0;
        oldstak = stakbot;
-       stakbot = staktop = (STKPTR) round(argp, BYTESPERWORD);
-       return (oldstak);
+       stakbot = staktop = (char *) round(argp, BYTESPERWORD);
+       return oldstak;
 }
 
-void tdystak(register STKPTR x)
+void tdystak(register char *x)
 {
        /* try to bring stack back to x */
-       while (ADR(stakbsy) > ADR(x)
-           ) {
-               free(stakbsy);
+       while (ADR(stakbsy) > ADR(x)) {
+               sh_free(stakbsy);
                stakbsy = stakbsy->word;
-               ;
        }
        staktop = stakbot = max(ADR(x), ADR(stakbas));
-       rmtemp((const char *)x);
+       rmtemp((void *)x);      /* FIXME */
 }
 
 void stakchk(void)
 {
-       if ((brkend - stakbas) > BRKINCR + BRKINCR) {
+       if ((brkend - stakbas) > BRKINCR + BRKINCR)
                setbrk(-BRKINCR);
-       }
 }
 
-STKPTR cpystak(STKPTR x)
+char *cpystak(const char *x)
 {
-       return (endstak(movstr(x, locstak())));
+       return endstak(movstr(x, locstak()));
 }
index f110c9d..db95a9d 100644 (file)
@@ -36,7 +36,7 @@
 /* for local use only since it hands
  * out a real address for the stack top
  */
-STKPTR locstak();
+//STKPTR locstak();
 
 /* Will allocate the item being used and return its
  * address (safe now).
@@ -46,33 +46,33 @@ STKPTR locstak();
 /* For use after `locstak' to hand back
  * new stack top and then allocate item
  */
-STKPTR endstak();
+//STKPTR endstak();
 
 /* Copy a string onto the stack and
  * allocate the space.
  */
-STKPTR cpystak();
+//STKPTR cpystak();
 
 /* Allocate given ammount of stack space */
-STKPTR getstak();
+//STKPTR getstak();
 
 /* A chain of ptrs of stack blocks that
  * have become covered by heap allocation.
  * `tdystak' will return them to the heap.
  */
-BLKPTR stakbsy;
+extern BLKPTR stakbsy;
 
 /* Base of the entire stack */
-STKPTR stakbas;
+extern STKPTR stakbas;
 
 /* Top of entire stack */
-STKPTR brkend;
+extern STKPTR brkend;
 
 /* Base of current item */
-STKPTR stakbot;
+extern STKPTR stakbot;
 
 /* Top of current item */
-STKPTR staktop;
+extern STKPTR staktop;
 
 /* Used with tdystak */
-STKPTR savstak();
+//STKPTR savstak();
index be8d2c2..31b7886 100644 (file)
 #include       "defs.h"
 #include       "sym.h"
 
-static readb();
+static int readb(void);
 
 
 /* ========    character handling for command lines    ========*/
 
 
-word()
+int word(void)
 {
-       register CHAR c, d;
-       register CHAR *argp = locstak() + BYTESPERWORD;
+       register char c, d;
+       register char *argp = locstak() + BYTESPERWORD;
        int alpha = 1;
 
        wdnum = 0;
        wdset = 0;
 
        while ((c = nextc(0), space(c)));
-       if (!eofmeta(c)
-           ) {
+
+       if (!eofmeta(c)) {
                do {
                        if (c == LITERAL) {
                                *argp++ = (DQUOTE);
@@ -41,117 +41,92 @@ word()
                                *argp++ = (DQUOTE);
                        } else {
                                *argp++ = (c);
-                               if (c == '=') {
+                               if (c == '=')
                                        wdset |= alpha;
-                               }
-                               if (!alphanum(c)) {
+                               if (!alphanum(c))
                                        alpha = 0;
-                               }
-                               if (qotchar(c)
-                                   ) {
+                               if (qotchar(c)) {
                                        d = c;
-                                       while ((*argp++ = (c = nextc(d)))
-                                              && c != d) {
+                                       while ((*argp++ = (c = nextc(d))) && c != d)
                                                chkpr(c);
-                                       }
-                                       ;
-                               };
+                               }
                        }
                } while ((c = nextc(0), !eofmeta(c)));
+
                argp = endstak(argp);
-               if (!letter(((ARGPTR) argp)->argval[0])) {
+
+               if (!letter(((ARGPTR) argp)->argval[0]))
                        wdset = 0;
-               }
 
                peekc = c | MARK;
+
                if (((ARGPTR) argp)->argval[1] == 0
                    && (d = ((ARGPTR) argp)->argval[0], digit(d))
-                   && (c == '>' || c == '<')
-                   ) {
+                   && (c == '>' || c == '<')) {
                        word();
                        wdnum = d - '0';
                } else {        /*check for reserved words */
                        if (reserv == FALSE
-                           || (wdval =
-                               syslook(((ARGPTR) argp)->argval,
-                                       reserved)) == 0) {
+                           || (wdval = syslook(((ARGPTR) argp)->argval, reserved)) == 0) {
                                wdarg = (ARGPTR) argp;
                                wdval = 0;
-                               ;
-                       };
+                       }
                }
 
-       } else if (dipchar(c)
-           ) {
-               if ((d = nextc(0)) == c) {
+       } else if (dipchar(c)) {
+               if ((d = nextc(0)) == c)
                        wdval = c | SYMREP;
-               else {
+               else {
                        peekc = d | MARK;
                        wdval = c;
-                       ;
                }
        } else {
-               if ((wdval = c) == EOF) {
+               if ((wdval = c) == EOF)
                        wdval = EOFSYM;
-                       ;
-               }
-               if (iopend && eolchar(c)
-                   ) {
+               if (iopend && eolchar(c)) {
                        copy(iopend);
                        iopend = 0;
-                       ;
-               };
+               }
        }
        reserv = FALSE;
-       return (wdval);
+       return wdval;
 }
 
-nextc(quote)
-CHAR quote;
+int nextc(char quote)
 {
-       register CHAR c, d;
+       register char c, d;
        if ((d = readc()) == ESCAPE) {
                if ((c = readc()) == NL) {
                        chkpr(NL);
                        d = nextc(quote);
-               } else if (quote && c != quote && !escchar(c)
-                   ) {
+               } else if (quote && c != quote && !escchar(c))
                        peekc = c | MARK;
-               } else {
+               else
                        d = c | QUOTE;
-                       ;
-               }
-               ;
        }
-       return (d);
+       return d;
 }
 
-readc()
+int readc(void)
 {
-       register CHAR c;
+       register char c;
        register int len;
        register FILE f;
 
-      retry:
+retry:
        if (peekc) {
                c = peekc;
                peekc = 0;
-       } else if ((f = standin, f->fnxt != f->fend)
-           ) {
+       } else if ((f = standin, f->fnxt != f->fend)) {
                if ((c = *f->fnxt++) == 0) {
                        if (f->feval) {
-                               if (estabf(*f->feval++)
-                                   ) {
+                               if (estabf(*f->feval++))
                                        c = EOF;
-                               } else {
+                                else
                                        c = SP;
-                                       ;
-                               }
                        } else {
                                goto retry;     /* = c=readc(); */
-                               ;
                        }
-                       ;
                }
                if (flags & readpr && standin->fstak == 0) {
                        prc(c);
@@ -170,12 +145,11 @@ readc()
        } else {
                f->fend = (f->fnxt = f->fbuf) + len;
                goto retry;
-               ;
        }
-       return (c);
+       return c;
 }
 
-static readb()
+static int readb(void)
 {
        register FILE f = standin;
        register int len;
index 30ed9df..bf3adbb 100644 (file)
@@ -22,9 +22,7 @@ extern SYSTAB commands;
 /* ========    command execution       ========*/
 
 
-execute(argt, execflg, pf1, pf2)
-TREPTR argt;
-int *pf1, *pf2;
+int execute(TREPTR argt, int execflg, int *pf1, int *pf2)
 {
        /* `stakbot' is preserved by this routine */
        register TREPTR t;
@@ -35,7 +33,7 @@ int *pf1, *pf2;
        if ((t = argt) && execbrk == 0) {
                register int treeflgs;
                int oldexit, type;
-               register STRING *com;
+               register char **com;
 
                treeflgs = t->tretyp;
                type = treeflgs & COMMSK;
@@ -51,28 +49,23 @@ int *pf1, *pf2;
                                ARGPTR schain = gchain;
                                IOPTR io = t->treio;
                                gchain = 0;
-                               argn = getarg(t);
+                               argn = getarg((void *)t);/*FIXME*/
                                com = scan(argn);
                                a1 = com[1];
                                gchain = schain;
 
-                               if ((internal = syslook(com[0], commands))
-                                   || argn == 0) {
+                               if ((internal = syslook(com[0], commands)) || argn == 0)
                                        setlist(((COMPTR) t)->comset, 0);
-                                       ;
-                               }
 
                                if (argn && (flags & noexec) == 0) {    /* print command if execpr */
                                        if (flags & execpr) {
                                                argn = 0;
                                                prs(execpmsg);
-                                               while (com[argn] !=
-                                                      ENDARGS) {
+                                               while (com[argn] != ENDARGS) {
                                                        prs(com[argn++]);
                                                        blank();
                                                }
                                                newline();
-                                               ;
                                        }
 
                                        switch (internal) {
@@ -81,35 +74,26 @@ int *pf1, *pf2;
                                                if (a1) {
                                                        register int f;
 
-                                                       if ((f =
-                                                            pathopen
-                                                            (getpath(a1),
-                                                             a1)) < 0) {
-                                                               failed(a1,
-                                                                      notfound);
-                                                       } else {
-                                                               execexp(0,
-                                                                       f);
-                                                               ;
-                                                       }
-                                                       ;
+                                                       if ((f = pathopen(getpath(a1), a1)) < 0)
+                                                               failed(a1, notfound);
+                                                       else
+                                                               execexp(0, f);
                                                }
                                                break;
 
                                        case SYSTIMES:
-                                               {
-                                                       L_INT t[4];
-                                                       times(t);
-                                                       prt(t[2]);
-                                                       blank();
-                                                       prt(t[3]);
-                                                       newline();
-                                               }
-                                               break;
+                                       {
+                                               L_INT t[4];     /* FIXME: struct for this nowdays */
+                                               times((void *)t);
+                                               prt(t[2]);
+                                               blank();
+                                               prt(t[3]);
+                                               newline();
+                                       }
+                                       break;
 
                                        case SYSEXIT:
-                                               exitsh(a1 ? stoi(a1) :
-                                                      oldexit);
+                                               exitsh(a1 ? stoi(a1) : oldexit);
 
                                        case SYSNULL:
                                                io = 0;
@@ -120,77 +104,40 @@ int *pf1, *pf2;
                                                break;
 
                                        case SYSBREAK:
-                                               if ((execbrk = loopcnt)
-                                                   && a1) {
-                                                       breakcnt =
-                                                           stoi(a1);
-                                                       ;
-                                               }
+                                               if ((execbrk = loopcnt) && a1)
+                                                       breakcnt = stoi(a1);
                                                break;
 
                                        case SYSTRAP:
                                                if (a1) {
                                                        BOOL clear;
-                                                       if ((clear =
-                                                            digit(*a1)) ==
-                                                           0) {
+                                                       if ((clear = digit(*a1)) == 0)
                                                                ++com;
-                                                               ;
-                                                       }
                                                        while (*++com) {
                                                                int i;
-                                                               if ((i =
-                                                                    stoi
-                                                                    (*com))
-                                                                   >=
-                                                                   MAXTRAP
-                                                                   || i <
-                                                                   MINTRAP)
-                                                               {
-                                                                       failed
-                                                                           (*com,
-                                                                            badtrap);
-                                                               } else
-                                                                   if
-                                                                   (clear)
-                                                               {
-                                                                       clrsig
-                                                                           (i);
-                                                               } else {
-                                                                       replace
-                                                                           (&trapcom
-                                                                            [i],
-                                                                            a1);
-                                                                       if (*a1) {
-                                                                               getsig
-                                                                                   (i);
-                                                                       } else {
-                                                                               ignsig
-                                                                                   (i);
-                                                                               ;
-                                                                       }
-                                                                       ;
+                                                               if ((i = stoi(*com)) >= MAXTRAP || i < MINTRAP)
+                                                                       failed(*com, badtrap);
+                                                               else if (clear)
+                                                                       clrsig(i);
+                                                               else {
+                                                                       replace(&trapcom[i], a1);
+                                                                       if (*a1)
+                                                                               getsig(i);
+                                                                       else
+                                                                               ignsig(i);
                                                                }
-                                                               ;
                                                        }
                                                } else {        /* print out current traps */
                                                        int i;
 
-                                                       for (i = 0;
-                                                            i < MAXTRAP;
-                                                            i++) {
-                                                               if (trapcom
-                                                                   [i]
-                                                                   ) {
+                                                       for (i = 0; i < MAXTRAP; i++) {
+                                                               if (trapcom[i]) {
                                                                        prn(i);
                                                                        prs(colon);
                                                                        prs(trapcom[i]);
-                                                                       newline
-                                                                           ();
-                                                                       ;
-                                                               };
+                                                                       newline();
+                                                               }
                                                        }
-                                                       ;
                                                }
                                                break;
 
@@ -199,38 +146,28 @@ int *pf1, *pf2;
                                                initio(io);
                                                ioset = 0;
                                                io = 0;
-                                               if (a1 == 0) {
+                                               if (a1 == 0)
                                                        break;
-                                               }
 
                                        case SYSLOGIN:
                                                flags |= forked;
                                                oldsigs();
-                                               execa(com);
+                                               execa((const char **)com);
                                                done();
 
                                        case SYSCD:
-                                               if (flags & rshflg) {
-                                                       failed(com[0],
-                                                              restricted);
-                                               } else
-                                                   if ((a1 == 0
-                                                        && (a1 =
-                                                            homenod.
-                                                            namval) == 0)
-                                                       || chdir(a1) < 0) {
+                                               if (flags & rshflg)
+                                                       failed(com[0], restricted);
+                                               else if ((a1 == 0 && (a1 = (char *)homenod.namval) == 0) || chdir(a1) < 0) /* FIXME */
                                                        failed(a1, baddir);
-                                                       ;
-                                               }
                                                break;
 
                                        case SYSSHFT:
-                                               if (dolc < 1) {
+                                               if (dolc < 1)
                                                        error(badshift);
-                                               else {
+                                               else {
                                                        dolv++;
                                                        dolc--;
-                                                       ;
                                                }
                                                assnum(&dolladr, dolc);
                                                break;
@@ -252,111 +189,75 @@ int *pf1, *pf2;
                                        case SYSSET:
                                                if (a1) {
                                                        int argc;
-                                                       argc =
-                                                           options(argn,
-                                                                   com);
-                                                       if (argc > 1) {
-                                                               setargs(com
-                                                                       +
-                                                                       argn
-                                                                       -
-                                                                       argc);
-                                                               ;
-                                                       }
-                                               } else if (((COMPTR) t)->comset == 0) { /*scan name chain and print */
+                                                       argc = options(argn, (const char **)com);
+                                                       if (argc > 1)
+                                                               setargs((const char **)com + argn - argc);
+                                               } else if (((COMPTR) t)->comset == 0)
+                                                       /* Scan name chain and print */
                                                        namscan(printnam);
-                                                       ;
-                                               }
                                                break;
 
                                        case SYSRDONLY:
                                                exitval = N_RDONLY;
                                        case SYSXPORT:
-                                               if (exitval == 0) {
-                                                       exitval =
-                                                           N_EXPORT;;
-                                               }
+                                               if (exitval == 0)
+                                                       exitval = N_EXPORT;;
 
                                                if (a1) {
-                                                       while (*++com) {
-                                                               attrib
-                                                                   (lookup
-                                                                    (*com),
-                                                                    exitval);
-                                                       }
+                                                       while (*++com)
+                                                               attrib(lookup(*com), exitval);
                                                } else {
                                                        namscan(printflg);
-                                                       ;
                                                }
                                                exitval = 0;
                                                break;
 
                                        case SYSEVAL:
-                                               if (a1) {
-                                                       execexp(a1,
-                                                               &com[2]);
-                                                       ;
-                                               }
+                                               if (a1)
+                                                       execexp(a1, (UFD)&com[2]);      /* FIXME */
                                                break;
 
                                        case SYSUMASK:
                                                if (a1) {
                                                        int c, i;
                                                        i = 0;
-                                                       while ((c =
-                                                               *a1++) >=
-                                                              '0'
-                                                              && c <= '7')
-                                                               i = (i <<
-                                                                    3) +
-                                                                   c -
-                                                                   '0';
+                                                       while ((c = *a1++) >= '0' && c <= '7')
+                                                               i = (i << 3) + c - '0';
                                                        umask(i);
                                                } else {
                                                        int i, j;
-                                                       umask(i =
-                                                             umask(0));
+                                                       umask(i = umask(0));
                                                        prc('0');
-                                                       for (j = 6; j >= 0;
-                                                            j -= 3)
-                                                               prc(((i >>
-                                                                     j) &
-                                                                    07) +
-                                                                   '0');
+                                                       for (j = 6; j >= 0; j -= 3)
+                                                               prc(((i >> j) & 07) + '0');
                                                        newline();
                                                }
                                                break;
 
                                        default:
-                                               internal =
-                                                   builtin(argn, com);
+                                               internal = builtin(argn, com);
 
                                        }
 
                                        if (internal) {
-                                               if (io) {
+                                               if (io)
                                                        error(illegal);
-                                               }
                                                chktrap();
                                                break;
-                                               ;
                                        }
-                               } else if (t->treio == 0) {
+                               } else if (t->treio == 0)
                                        break;
-                                       ;
-                               }
                        }
 
                case TFORK:
-                       if (execflg && (treeflgs & (FAMP | FPOU)) == 0) {
+                       if (execflg && (treeflgs & (FAMP | FPOU)) == 0)
                                parent = 0;
-                       else {
+                       else {
                                while ((parent = fork()) == -1) {
                                        sigchk();
                                        alarm(10);
                                        pause();
                                }
-                               ;
                        }
 
                        if (parent) {   /* This is the parent branch of fork;    */
@@ -364,24 +265,18 @@ int *pf1, *pf2;
                                if (treeflgs & FPRS && flags & ttyflg) {
                                        prn(parent);
                                        newline();
-                                       ;
                                }
-                               if (treeflgs & FPCL) {
+                               if (treeflgs & FPCL)
                                        closepipe(pf1);
-                               }
-                               if ((treeflgs & (FAMP | FPOU)) == 0) {
+                               if ((treeflgs & (FAMP | FPOU)) == 0)
                                        await(parent);
-                               } else if ((treeflgs & FAMP) == 0) {
+                               else if ((treeflgs & FAMP) == 0)
                                        post(parent);
-                               } else {
+                               else
                                        assnum(&pcsadr, parent);
-                                       ;
-                               }
 
                                chktrap();
                                break;
-
-
                        } else {        /* this is the forked branch (child) of execute */
                                flags |= forked;
                                iotemp = 0;
@@ -393,189 +288,146 @@ int *pf1, *pf2;
                                /* except for those `lost' by trap   */
                                oldsigs();
                                if (treeflgs & FINT) {
-                                       signal(INTR, 1);
-                                       signal(QUIT, 1);
-                                       ;
+                                       signal(INTR, SIG_IGN);
+                                       signal(QUIT, SIG_IGN);
                                }
 
                                /* pipe in or out */
                                if (treeflgs & FPIN) {
                                        sh_rename(pf1[INPIPE], 0);
                                        close(pf1[OTPIPE]);
-                                       ;
                                }
                                if (treeflgs & FPOU) {
                                        sh_rename(pf2[OTPIPE], 1);
                                        close(pf2[INPIPE]);
-                                       ;
                                }
 
                                /* default std input for & */
-                               if (treeflgs & FINT && ioset == 0) {
+                               if (treeflgs & FINT && ioset == 0)
                                        sh_rename(chkopen(devnull), 0);
-                                       ;
-                               }
 
                                /* io redirection */
                                initio(t->treio);
-                               if (type != TCOM) {
-                                       execute(((FORKPTR) t)->forktre, 1);
-                               } else if (com[0] != ENDARGS) {
-                                       setlist(((COMPTR) t)->comset,
-                                               N_EXPORT);
-                                       execa(com);
-                                       ;
+                               if (type != TCOM)
+                                       execute(((FORKPTR) t)->forktre, 1, NULL, NULL);
+                               else if (com[0] != ENDARGS) {
+                                       setlist(((COMPTR) t)->comset, N_EXPORT);
+                                       execa((const char **)com);
                                }
                                done();
-                               ;
                        }
 
                case TPAR:
                        sh_rename(dup(2), output);
-                       execute(((PARPTR) t)->partre, execflg);
+                       execute(((PARPTR) t)->partre, execflg, NULL, NULL);
                        done();
 
                case TFIL:
-                       {
-                               int pv[2];
-                               chkpipe(pv);
-                               if (execute
-                                   (((LSTPTR) t)->lstlef, 0, pf1,
-                                    pv) == 0) {
-                                       execute(((LSTPTR) t)->lstrit,
-                                               execflg, pv, pf2);
-                               } else {
-                                       closepipe(pv);
-                                       ;
-                               }
-                       }
+               {
+                       int pv[2];
+                       chkpipe(pv);
+                       if (execute(((LSTPTR) t)->lstlef, 0, pf1, pv) == 0)
+                               execute(((LSTPTR) t)->lstrit, execflg, pv, pf2);
+                       else
+                               closepipe(pv);
                        break;
-
+                }
                case TLST:
-                       execute(((LSTPTR) t)->lstlef, 0);
-                       execute(((LSTPTR) t)->lstrit, execflg);
+                       execute(((LSTPTR) t)->lstlef, 0, NULL, NULL);
+                       execute(((LSTPTR) t)->lstrit, execflg, NULL, NULL);
                        break;
 
                case TAND:
-                       if (execute(((LSTPTR) t)->lstlef, 0) == 0) {
-                               execute(((LSTPTR) t)->lstrit, execflg);
-                               ;
-                       }
+                       if (execute(((LSTPTR) t)->lstlef, 0, NULL, NULL) == 0)
+                               execute(((LSTPTR) t)->lstrit, execflg, NULL, NULL);
                        break;
 
                case TORF:
-                       if (execute(((LSTPTR) t)->lstlef, 0) != 0) {
-                               execute(((LSTPTR) t)->lstrit, execflg);
-                               ;
-                       }
+                       if (execute(((LSTPTR) t)->lstlef, 0, NULL, NULL) != 0)
+                               execute(((LSTPTR) t)->lstrit, execflg, NULL, NULL);
                        break;
 
                case TFOR:
-                       {
-                               NAMPTR n = lookup(((FORPTR) t)->fornam);
-                               STRING *args;
-                               DOLPTR argsav = 0;
-
-                               if (((FORPTR) t)->forlst == 0) {
-                                       args = dolv + 1;
-                                       argsav = useargs();
-                               } else {
-                                       ARGPTR schain = gchain;
-                                       gchain = 0;
-                                       trim((args =
-                                             scan(getarg
-                                                  (((FORPTR) t)->
-                                                   forlst)))[0]);
-                                       gchain = schain;
-                                       ;
-                               }
-                               loopcnt++;
-                               while (*args != ENDARGS && execbrk == 0) {
-                                       assign(n, *args++);
-                                       execute(((FORPTR) t)->fortre, 0);
-                                       if (execbrk < 0) {
-                                               execbrk = 0;
-                                       };
-                               }
-                               if (breakcnt) {
-                                       breakcnt--;
+               {
+                       NAMPTR n = lookup(((FORPTR) t)->fornam);
+                       char **args;
+                       DOLPTR argsav = 0;
+
+                       if (((FORPTR) t)->forlst == 0) {
+                               args = (char **)dolv + 1;
+                               argsav = useargs();
+                       } else {
+                               ARGPTR schain = gchain;
+                               gchain = 0;
+                               trim((args = scan(getarg(((FORPTR) t)->forlst)))[0]);
+                               gchain = schain;
+                       }
+                       loopcnt++;
+                       while (*args != ENDARGS && execbrk == 0) {
+                               assign(n, *args++);
+                               execute(((FORPTR) t)->fortre, 0, NULL, NULL);
+                               if (execbrk < 0) {
+                                       execbrk = 0;
                                }
-                               execbrk = breakcnt;
-                               loopcnt--;
-                               argfor = freeargs(argsav);
                        }
-                       break;
+                       if (breakcnt)
+                               breakcnt--;
+                       execbrk = breakcnt;
+                       loopcnt--;
+                       argfor = freeargs(argsav);
+                       break;
+               }
 
                case TWH:
                case TUN:
-                       {
-                               int i = 0;
-
-                               loopcnt++;
-                               while (execbrk == 0
-                                      && (execute(((WHPTR) t)->whtre, 0)
-                                          == 0) == (type == TWH)
-                                   ) {
-                                       i = execute(((WHPTR) t)->dotre, 0);
-                                       if (execbrk < 0) {
-                                               execbrk = 0;
-                                       };
-                               }
-                               if (breakcnt) {
-                                       breakcnt--;
-                               }
-                               execbrk = breakcnt;
-                               loopcnt--;
-                               exitval = i;
+               {
+                       int i = 0;
+
+                       loopcnt++;
+                       while (execbrk == 0 && (execute(((WHPTR) t)->whtre, 0, NULL, NULL) == 0) == (type == TWH)) {
+                               i = execute(((WHPTR) t)->dotre, 0, NULL, NULL);
+                               if (execbrk < 0)
+                                       execbrk = 0;
                        }
+                       if (breakcnt)
+                               breakcnt--;
+
+                       execbrk = breakcnt;
+                       loopcnt--;
+                       exitval = i;
                        break;
+               }
 
                case TIF:
-                       if (execute(((IFPTR) t)->iftre, 0) == 0) {
-                               execute(((IFPTR) t)->thtre, execflg);
-                       } else {
-                               execute(((IFPTR) t)->eltre, execflg);
-                               ;
-                       }
+                       if (execute(((IFPTR) t)->iftre, 0, NULL, NULL) == 0)
+                               execute(((IFPTR) t)->thtre, execflg, NULL, NULL);
+                       else
+                               execute(((IFPTR) t)->eltre, execflg, NULL, NULL);
                        break;
 
                case TSW:
-                       {
-                               register STRING r =
-                                   mactrim(((SWPTR) t)->swarg);
-                               t = (TREPTR) ((SWPTR) t)->swlst;
-                               while (t) {
-                                       ARGPTR rex = ((REGPTR) t)->regptr;
-                                       while (rex) {
-                                               register STRING s;
-                                               if (gmatch
-                                                   (r, s =
-                                                    macro(rex->argval))
-                                                   || (trim(s), eq(r, s))
-                                                   ) {
-                                                       execute(((REGPTR)
-                                                                t)->
-                                                               regcom, 0);
-                                                       t = 0;
-                                                       break;
-                                               } else {
-                                                       rex =
-                                                           ((ARGPTR)
-                                                            rex)->argnxt;
-                                                       ;
-                                               }
-                                               ;
-                                       }
-                                       if (t) {
-                                               t = (TREPTR) ((REGPTR) t)->
-                                                   regnxt;
-                                       };
+               {
+                       register char *r = mactrim(((SWPTR) t)->swarg);
+                       t = (TREPTR) ((SWPTR) t)->swlst;
+                       while (t) {
+                               ARGPTR rex = ((REGPTR) t)->regptr;
+                               while (rex) {
+                                       register char *s;
+                                       if (gmatch(r, s = macro(rex->argval)) || (trim(s), eq(r, s))) {
+                                               execute(((REGPTR)t)->regcom, 0, NULL, NULL);
+                                               t = 0;
+                                               break;
+                                       } else
+                                               rex = ((ARGPTR)rex)->argnxt;
                                }
+                               if (t)
+                                       t = (TREPTR) ((REGPTR) t)->regnxt;
                        }
-                       break;
+               }
+               break;
+
                }
                exitset();
-               ;
        }
 
        sigchk();
@@ -584,9 +436,7 @@ int *pf1, *pf2;
 }
 
 
-execexp(s, f)
-STRING s;
-UFD f;
+void execexp(char *s, UFD f)
 {
        FILEBLK fb;
        push(&fb);
@@ -595,8 +445,7 @@ UFD f;
                fb.feval = (STRING *) f;
        } else if (f >= 0) {
                initf(f);
-               ;
        }
-       execute(cmd(NL, NLFLG | MTFLG), 0);
+       execute(cmd(NL, NLFLG | MTFLG), 0, NULL, NULL);
        pop();
 }