ast@cs.vu.nl (Andy Tanenbaum) (01/23/89)
: This is a shar archive. Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'make:makefile.'
sed 's/^X//' > 'make:makefile.' << '+ END-OF-FILE ''make:makefile.'
X*** makefile Sun Jan 22 22:52:06 1989
X--- ../../../tape3/commands/make/makefile Mon Sep 26 13:02:53 1988
X***************
X*** 1,6 ****
X # Makefile for make!
X
X! CFLAGS = -Dunix -DMINIXPC
X
X OBJS = check.s input.s macro.s main.s \
X make.s reader.s rules.s
X--- 1,6 ----
X # Makefile for make!
X
X! CFLAGS = -Dunix -DMINIX
X
X OBJS = check.s input.s macro.s main.s \
X make.s reader.s rules.s
+ END-OF-FILE make:makefile.
chmod 'u=rw,g=r,o=r' 'make:makefile.'
set `wc -c 'make:makefile.'`
count=$1
case $count in
399) :;;
*) echo 'Bad character count in ''make:makefile.' >&2
echo 'Count should be 399' >&2
esac
echo Extracting 'make:rules.cdi'
sed 's/^X//' > 'make:rules.cdi' << '+ END-OF-FILE ''make:rules.cdi'
X*** rules.c Sun Jan 22 22:52:07 1989
X--- ../../../tape3/commands/make/rules.c Mon Sep 26 13:02:54 1988
X***************
X*** 83,89 ****
X modtime(op);
X if (op->n_time)
X {
X! dp = newdep(op, (char *)0);
X newline(np, dp, sp->n_line->l_cmd, 0);
X setmacro("<", op->n_name);
X return TRUE;
X--- 83,89 ----
X modtime(op);
X if (op->n_time)
X {
X! dp = newdep(op, 0);
X newline(np, dp, sp->n_line->l_cmd, 0);
X setmacro("<", op->n_name);
X return TRUE;
X***************
X*** 110,137 ****
X /* setmacro("BDSCFLAGS", ""); */
X cp = newcmd("$(BDSCC) $(BDSCFLAGS) -n $<", 0);
X np = newname(".c.o");
X! newline(np, (char *)0, cp, 0);
X
X setmacro("CC", "c");
X setmacro("CFLAGS", "-O");
X cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
X np = newname(".c.obj");
X! newline(np, (char *)0, cp, 0);
X
X setmacro("M80", "asm -n");
X /* setmacro("M80FLAGS", ""); */
X cp = newcmd("$(M80) $(M80FLAGS) $<", 0);
X np = newname(".mac.o");
X! newline(np, (char *)0, cp, 0);
X
X setmacro("AS", "zas");
X /* setmacro("ASFLAGS", ""); */
X cp = newcmd("$(ZAS) $(ASFLAGS) -o $@ $<", 0);
X np = newname(".as.obj");
X! newline(np, (char *)0, cp, 0);
X
X np = newname(".as");
X! dp = newdep(np, (char *)0);
X np = newname(".obj");
X dp = newdep(np, dp);
X np = newname(".c");
X--- 110,137 ----
X /* setmacro("BDSCFLAGS", ""); */
X cp = newcmd("$(BDSCC) $(BDSCFLAGS) -n $<", 0);
X np = newname(".c.o");
X! newline(np, 0, cp, 0);
X
X setmacro("CC", "c");
X setmacro("CFLAGS", "-O");
X cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
X np = newname(".c.obj");
X! newline(np, 0, cp, 0);
X
X setmacro("M80", "asm -n");
X /* setmacro("M80FLAGS", ""); */
X cp = newcmd("$(M80) $(M80FLAGS) $<", 0);
X np = newname(".mac.o");
X! newline(np, 0, cp, 0);
X
X setmacro("AS", "zas");
X /* setmacro("ASFLAGS", ""); */
X cp = newcmd("$(ZAS) $(ASFLAGS) -o $@ $<", 0);
X np = newname(".as.obj");
X! newline(np, 0, cp, 0);
X
X np = newname(".as");
X! dp = newdep(np, 0);
X np = newname(".obj");
X dp = newdep(np, dp);
X np = newname(".c");
X***************
X*** 141,147 ****
X np = newname(".mac");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, (char *)0, 0);
X #endif
X
X /*
X--- 141,147 ----
X np = newname(".mac");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, 0, 0);
X #endif
X
X /*
X***************
X*** 150,185 ****
X #ifdef unix
X setmacro("CC", "cc");
X setmacro("CFLAGS", "-O");
X! #ifdef MINIXPC
X! cp = newcmd("$(CC) $(CFLAGS) -S $<", (char *)0);
X np = newname(".c.s");
X #else
X! cp = newcmd("$(CC) $(CFLAGS) -c $<", (char *)0);
X np = newname(".c.o");
X! #endif MINIXPC
X! newline(np, (char *)0, cp, 0);
X
X setmacro("AS", "as");
X! cp = newcmd("$(AS) -o $@ $<", (char *)0);
X np = newname(".s.o");
X! newline(np, (char *)0, cp, 0);
X
X setmacro("YACC", "yacc");
X /* setmacro("YFLAGS", ""); */
X! cp = newcmd("$(YACC) $(YFLAGS) $<", (char *)0);
X cp = newcmd("mv y.tab.c $@", cp);
X np = newname(".y.c");
X! newline(np, (char *)0, cp, 0);
X
X! cp = newcmd("$(YACC) $(YFLAGS) $<", (char *)0);
X cp = newcmd("$(CC) $(CFLAGS) -c y.tab.c", cp);
X cp = newcmd("rm y.tab.c", cp);
X cp = newcmd("mv y.tab.o $@", cp);
X np = newname(".y.o");
X! newline(np, (char *)0, cp, 0);
X
X np = newname(".s");
X! dp = newdep(np, (char *)0);
X np = newname(".o");
X dp = newdep(np, dp);
X np = newname(".c");
X--- 150,185 ----
X #ifdef unix
X setmacro("CC", "cc");
X setmacro("CFLAGS", "-O");
X! #ifdef MINIX
X! cp = newcmd("$(CC) $(CFLAGS) -S $<", 0);
X np = newname(".c.s");
X #else
X! cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
X np = newname(".c.o");
X! #endif MINIX
X! newline(np, 0, cp, 0);
X
X setmacro("AS", "as");
X! cp = newcmd("$(AS) -o $@ $<", 0);
X np = newname(".s.o");
X! newline(np, 0, cp, 0);
X
X setmacro("YACC", "yacc");
X /* setmacro("YFLAGS", ""); */
X! cp = newcmd("$(YACC) $(YFLAGS) $<", 0);
X cp = newcmd("mv y.tab.c $@", cp);
X np = newname(".y.c");
X! newline(np, 0, cp, 0);
X
X! cp = newcmd("$(YACC) $(YFLAGS) $<", 0);
X cp = newcmd("$(CC) $(CFLAGS) -c y.tab.c", cp);
X cp = newcmd("rm y.tab.c", cp);
X cp = newcmd("mv y.tab.o $@", cp);
X np = newname(".y.o");
X! newline(np, 0, cp, 0);
X
X np = newname(".s");
X! dp = newdep(np, 0);
X np = newname(".o");
X dp = newdep(np, dp);
X np = newname(".c");
X***************
X*** 187,193 ****
X np = newname(".y");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, (char *)0, 0);
X #endif
X #ifdef os9
X /*
X--- 187,193 ----
X np = newname(".y");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, 0, 0);
X #endif
X #ifdef os9
X /*
X***************
X*** 199,222 ****
X cp = newcmd("$(CC) $(CFLAGS) -r $<", 0);
X
X np = newname(".c.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".ca.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".a.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".o.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".mc.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".mca.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".ma.r");
X! newline(np, (char *)0, cp, 0);
X np = newname(".mo.r");
X! newline(np, (char *)0, cp, 0);
X
X np = newname(".r");
X! dp = newdep(np, (char *)0);
X np = newname(".mc");
X dp = newdep(np, dp);
X np = newname(".mca");
X--- 199,222 ----
X cp = newcmd("$(CC) $(CFLAGS) -r $<", 0);
X
X np = newname(".c.r");
X! newline(np, 0, cp, 0);
X np = newname(".ca.r");
X! newline(np, 0, cp, 0);
X np = newname(".a.r");
X! newline(np, 0, cp, 0);
X np = newname(".o.r");
X! newline(np, 0, cp, 0);
X np = newname(".mc.r");
X! newline(np, 0, cp, 0);
X np = newname(".mca.r");
X! newline(np, 0, cp, 0);
X np = newname(".ma.r");
X! newline(np, 0, cp, 0);
X np = newname(".mo.r");
X! newline(np, 0, cp, 0);
X
X np = newname(".r");
X! dp = newdep(np, 0);
X np = newname(".mc");
X dp = newdep(np, dp);
X np = newname(".mca");
X***************
X*** 234,239 ****
X np = newname(".a");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, (char *)0, 0);
X #endif
X }
X--- 234,239 ----
X np = newname(".a");
X dp = newdep(np, dp);
X np = newname(".SUFFIXES");
X! newline(np, dp, 0, 0);
X #endif
X }
+ END-OF-FILE make:rules.cdi
chmod 'u=rw,g=r,o=r' 'make:rules.cdi'
set `wc -c 'make:rules.cdi'`
count=$1
case $count in
6257) :;;
*) echo 'Bad character count in ''make:rules.cdi' >&2
echo 'Count should be 6257' >&2
esac
echo Extracting 'sh.h.cdif'
sed 's/^X//' > 'sh.h.cdif' << '+ END-OF-FILE ''sh.h.cdif'
X*** ../../../tape3/commands/sh/sh.h Mon Sep 26 13:02:39 1988
X--- sh.h Sun Jan 22 22:59:15 1989
X***************
X*** 156,162 ****
X Extern char ourtrap[NSIG];
X Extern int trapset; /* trap pending */
X
X! extern int inword; /* defer traps and interrupts */
X
X Extern int yynerrs; /* yacc */
X
X--- 156,162 ----
X Extern char ourtrap[NSIG];
X Extern int trapset; /* trap pending */
X
X! extern int heedint; /* heed interrupt signals */
X
X Extern int yynerrs; /* yacc */
X
X***************
X*** 235,252 ****
X int eqname(/* char *n1, char *n2 */);
X
X /* -------- io.h -------- */
X /* possible arguments to an IO function */
X struct ioarg {
X char *aword;
X char **awordlist;
X! int afile; /* file descriptor */
X };
X
X /* an input generator's state */
X struct io {
X int (*iofn)();
X! struct ioarg arg;
X int peekc;
X char nlcount; /* for `'s */
X char xchar; /* for `'s */
X char task; /* reason for pushed IO */
X--- 235,267 ----
X int eqname(/* char *n1, char *n2 */);
X
X /* -------- io.h -------- */
X+ /* io buffer */
X+ struct iobuf {
X+ unsigned id; /* buffer id */
X+ char buf[512]; /* buffer */
X+ char *bufp; /* pointer into buffer */
X+ char *ebufp; /* pointer to end of buffer */
X+ };
X+
X /* possible arguments to an IO function */
X struct ioarg {
X char *aword;
X char **awordlist;
X! int afile; /* file descriptor */
X! unsigned afid; /* buffer id */
X! long afpos; /* file position */
X! struct iobuf *afbuf; /* buffer for this file */
X };
X+ Extern struct ioarg ioargstack[NPUSH];
X+ #define AFID_NOBUF (~0)
X+ #define AFID_ID 0
X
X /* an input generator's state */
X struct io {
X int (*iofn)();
X! struct ioarg *argp;
X int peekc;
X+ char prev; /* previous character read by readc() */
X char nlcount; /* for `'s */
X char xchar; /* for `'s */
X char task; /* reason for pushed IO */
X***************
X*** 265,274 ****
X */
X int nlchar();
X int strchar();
X int filechar();
X int herechar();
X int linechar();
X- int nextchar();
X int gravechar();
X int qgravechar();
X int dolchar();
X--- 280,289 ----
X */
X int nlchar();
X int strchar();
X+ int qstrchar();
X int filechar();
X int herechar();
X int linechar();
X int gravechar();
X int qgravechar();
X int dolchar();
X***************
X*** 277,282 ****
X--- 292,298 ----
X /*
X * IO functions
X */
X+ int eofc();
X int getc();
X int readc();
X void unget();
X***************
X*** 296,304 ****
X void closepipe();
X struct io *setbase(/* struct io * */);
X
X! Extern struct ioarg temparg; /* temporary for PUSHIO */
X! #define PUSHIO(what,arg,gen) ((temparg.what = (arg)),pushio(temparg,(gen)))
X! #define RUN(what,arg,gen) ((temparg.what = (arg)), run(temparg,(gen)))
X
X /* -------- word.h -------- */
X #ifndef WORD_H
X--- 312,320 ----
X void closepipe();
X struct io *setbase(/* struct io * */);
X
X! extern struct ioarg temparg; /* temporary for PUSHIO */
X! #define PUSHIO(what,arg,gen) ((temparg.what = (arg)),pushio(&temparg,(gen)))
X! #define RUN(what,arg,gen) ((temparg.what = (arg)), run(&temparg,(gen)))
X
X /* -------- word.h -------- */
X #ifndef WORD_H
+ END-OF-FILE sh.h.cdif
chmod 'u=rw,g=r,o=r' 'sh.h.cdif'
set `wc -c 'sh.h.cdif'`
count=$1
case $count in
3072) :;;
*) echo 'Bad character count in ''sh.h.cdif' >&2
echo 'Count should be 3072' >&2
esac
echo Extracting 'sh1.c.cdif'
sed 's/^X//' > 'sh1.c.cdif' << '+ END-OF-FILE ''sh1.c.cdif'
X*** ../../../tape3/commands/sh/sh1.c Mon Sep 26 13:02:39 1988
X--- sh1.c Sun Jan 22 22:59:16 1989
X***************
X*** 16,22 ****
X char *flag = flags-'a';
X char *elinep = line+sizeof(line)-5;
X char *null = "";
X! int inword =1;
X struct env e ={line, iostack, iostack-1, NULL, FDBASE, NULL};
X
X extern char **environ; /* environment pointer */
X--- 16,22 ----
X char *flag = flags-'a';
X char *elinep = line+sizeof(line)-5;
X char *null = "";
X! int heedint =1;
X struct env e ={line, iostack, iostack-1, NULL, FDBASE, NULL};
X
X extern char **environ; /* environment pointer */
X***************
X*** 149,158 ****
X if ((f = open(".profile", 0)) >= 0)
X next(remap(f));
X }
X! if (talking) {
X signal(SIGTERM, sig);
X! signal(SIGINT, SIG_IGN);
X! }
X dolv = argv;
X dolc = argc;
X dolv[0] = name;
X--- 149,158 ----
X if ((f = open(".profile", 0)) >= 0)
X next(remap(f));
X }
X! if (talking)
X signal(SIGTERM, sig);
X! if (signal(SIGINT, SIG_IGN) != SIG_IGN)
X! signal(SIGINT, onintr);
X dolv = argv;
X dolc = argc;
X dolv[0] = name;
X***************
X*** 207,213 ****
X register i;
X jmp_buf m1;
X
X- inword++;
X while (e.oenv)
X quitenv();
X areanum = 1;
X--- 207,212 ----
X***************
X*** 221,254 ****
X yynerrs = 0;
X multiline = 0;
X inparse = 1;
X setjmp(failpt = m1); /* Bruce Evans' fix */
X- if (talking)
X- signal(SIGINT, onintr);
X if (setjmp(failpt = m1) || yyparse() || intr) {
X while (e.oenv)
X quitenv();
X scraphere();
X inparse = 0;
X intr = 0;
X return;
X }
X inparse = 0;
X- inword = 0;
X- if ((i = trapset) != 0) {
X- trapset = 0;
X- runtrap(i);
X- }
X brklist = 0;
X intr = 0;
X execflg = 0;
X! if (!flag['n']) {
X! if (talking)
X! signal(SIGINT, onintr);
X execute(outtree, NOPIPE, NOPIPE, 0);
X! intr = 0;
X! if (talking)
X! signal(SIGINT, SIG_IGN);
X }
X }
X
X void
X--- 220,252 ----
X yynerrs = 0;
X multiline = 0;
X inparse = 1;
X+ intr = 0;
X+ execflg = 0;
X setjmp(failpt = m1); /* Bruce Evans' fix */
X if (setjmp(failpt = m1) || yyparse() || intr) {
X while (e.oenv)
X quitenv();
X scraphere();
X+ if (!talking && intr)
X+ leave();
X inparse = 0;
X intr = 0;
X return;
X }
X inparse = 0;
X brklist = 0;
X intr = 0;
X execflg = 0;
X! if (!flag['n'])
X execute(outtree, NOPIPE, NOPIPE, 0);
X! if (!talking && intr) {
X! execflg = 0;
X! leave();
X }
X+ if ((i = trapset) != 0) {
X+ trapset = 0;
X+ runtrap(i);
X+ }
X }
X
X void
X***************
X*** 263,270 ****
X {
X if (execflg)
X fail();
X runtrap(0);
X- sync();
X exit(exstat);
X /* NOTREACHED */
X }
X--- 261,269 ----
X {
X if (execflg)
X fail();
X+ scraphere();
X+ freehere(1);
X runtrap(0);
X exit(exstat);
X /* NOTREACHED */
X }
X***************
X*** 390,406 ****
X
X next(f)
X {
X! PUSHIO(afile, f, nextchar);
X }
X
X onintr()
X {
X! signal(SIGINT, SIG_IGN);
X! if (inparse) {
X! prs("\n");
X! fail();
X }
X! intr++;
X }
X
X letter(c)
X--- 389,411 ----
X
X next(f)
X {
X! PUSHIO(afile, f, filechar);
X }
X
X onintr()
X {
X! signal(SIGINT, onintr);
X! intr = 1;
X! if (talking) {
X! if (inparse) {
X! prs("\n");
X! fail();
X! }
X }
X! else if (heedint) {
X! execflg = 0;
X! leave();
X! }
X }
X
X letter(c)
X***************
X*** 427,436 ****
X {
X register char *cp;
X
X- inword++;
X if ((cp = getcell(n)) == 0)
X err("out of string space");
X- inword--;
X return(cp);
X }
X
X--- 432,439 ----
X***************
X*** 449,466 ****
X return("");
X }
X
X- /*
X- * if inword is set, traps
X- * are delayed, avoiding
X- * having two people allocating
X- * at once.
X- */
X xfree(s)
X register char *s;
X {
X- inword++;
X DELETE(s);
X- inword--;
X }
X
X /*
X--- 452,461 ----
X***************
X*** 469,479 ****
X sig(i)
X register i;
X {
X! if (inword == 0) {
X! signal(i, SIG_IGN);
X! runtrap(i);
X! } else
X! trapset = i;
X signal(i, sig);
X }
X
X--- 464,470 ----
X sig(i)
X register i;
X {
X! trapset = i;
X signal(i, sig);
X }
X
+ END-OF-FILE sh1.c.cdif
chmod 'u=rw,g=r,o=r' 'sh1.c.cdif'
set `wc -c 'sh1.c.cdif'`
count=$1
case $count in
3940) :;;
*) echo 'Bad character count in ''sh1.c.cdif' >&2
echo 'Count should be 3940' >&2
esac
echo Extracting 'sh2.c.cdif'
sed 's/^X//' > 'sh2.c.cdif' << '+ END-OF-FILE ''sh2.c.cdif'
X*** ../../../tape3/commands/sh/sh2.c Mon Sep 26 13:02:40 1988
X--- sh2.c Sun Jan 22 22:59:16 1989
X***************
X*** 39,46 ****
X
X /* #include "sh.h" */
X #define SYNTAXERR zzerr()
X! static int startl = 1;
X! static int peeksym = 0;
X static void zzerr();
X static void word();
X static char **copyw();
X--- 39,46 ----
X
X /* #include "sh.h" */
X #define SYNTAXERR zzerr()
X! static int startl;
X! static int peeksym;
X static void zzerr();
X static void word();
X static char **copyw();
X***************
X*** 66,71 ****
X--- 66,72 ----
X int
X yyparse()
X {
X+ startl = 1;
X peeksym = 0;
X yynerrs = 0;
X outtree = c_list();
X***************
X*** 574,584 ****
X char *s;
X {
X yynerrs++;
X! if (talking) {
X! if (multiline && nlseen)
X! unget('\n');
X multiline = 0;
X! while (yylex(0) != '\n')
X ;
X }
X err(s);
X--- 575,583 ----
X char *s;
X {
X yynerrs++;
X! if (talking && e.iop <= iostack) {
X multiline = 0;
X! while (eofc() == 0 && yylex(0) != '\n')
X ;
X }
X err(s);
+ END-OF-FILE sh2.c.cdif
chmod 'u=rw,g=r,o=r' 'sh2.c.cdif'
set `wc -c 'sh2.c.cdif'`
count=$1
case $count in
994) :;;
*) echo 'Bad character count in ''sh2.c.cdif' >&2
echo 'Count should be 994' >&2
esac
echo Extracting 'sh3.c.cdif'
sed 's/^X//' > 'sh3.c.cdif' << '+ END-OF-FILE ''sh3.c.cdif'
X*** ../../../tape3/commands/sh/sh3.c Mon Sep 26 13:02:40 1988
X--- sh3.c Sun Jan 22 22:59:17 1989
X***************
X*** 18,24 ****
X "Quit",
X "Illegal instruction",
X "Trace/BPT trap",
X! "abort",
X "EMT trap",
X "Floating exception",
X "Killed",
X--- 18,24 ----
X "Quit",
X "Illegal instruction",
X "Trace/BPT trap",
X! "Abort",
X "EMT trap",
X "Floating exception",
X "Killed",
X***************
X*** 53,59 ****
X return(0);
X rv = 0;
X a = areanum++;
X! wp = (wp2 = t->words) != NULL? eval(wp2, DOALL): NULL;
X
X switch(t->type) {
X case TPAREN:
X--- 53,61 ----
X return(0);
X rv = 0;
X a = areanum++;
X! wp = (wp2 = t->words) != NULL
X! ? eval(wp2, t->type == TCOM ? DOALL : DOALL & ~DOKEY)
X! : NULL;
X
X switch(t->type) {
X case TPAREN:
X***************
X*** 118,125 ****
X wp = dolv+1;
X if ((i = dolc) < 0)
X i = 0;
X! } else
X i = -1;
X vp = lookup(t->str);
X while (setjmp(bc.brkpt))
X if (isbreak)
X--- 120,130 ----
X wp = dolv+1;
X if ((i = dolc) < 0)
X i = 0;
X! } else {
X i = -1;
X+ while (*wp++ != NULL)
X+ ;
X+ }
X vp = lookup(t->str);
X while (setjmp(bc.brkpt))
X if (isbreak)
X***************
X*** 178,187 ****
X freehere(areanum);
X freearea(areanum);
X areanum = a;
X! if (intr) {
X closeall();
X fail();
X }
X return(rv);
X }
X
X--- 183,196 ----
X freehere(areanum);
X freearea(areanum);
X areanum = a;
X! if (talking && intr) {
X closeall();
X fail();
X }
X+ if ((i = trapset) != 0) {
X+ trapset = 0;
X+ runtrap(i);
X+ }
X return(rv);
X }
X
X***************
X*** 199,219 ****
X char *cp;
X struct ioword **iopp;
X int resetsig;
X
X resetsig = 0;
X *pforked = 0;
X shcom = NULL;
X rv = -1; /* system-detected error */
X if (t->type == TCOM) {
X /* strip all initial assignments */
X /* not correct wrt PATH=yyy command etc */
X if (flag['x'])
X echo(wp);
X! while ((cp = *wp++) != NULL && assign(cp, COPYV))
X! ;
X! wp--;
X! if (cp == NULL && t->ioact == NULL)
X return(setstatus(0));
X else if (cp != NULL)
X shcom = inbuilt(cp);
X }
X--- 208,234 ----
X char *cp;
X struct ioword **iopp;
X int resetsig;
X+ char **owp;
X
X+ owp = wp;
X resetsig = 0;
X *pforked = 0;
X shcom = NULL;
X rv = -1; /* system-detected error */
X if (t->type == TCOM) {
X+ while ((cp = *wp++) != NULL)
X+ ;
X+ cp = *wp;
X+
X /* strip all initial assignments */
X /* not correct wrt PATH=yyy command etc */
X if (flag['x'])
X echo(wp);
X! if (cp == NULL && t->ioact == NULL) {
X! while ((cp = *owp++) != NULL && assign(cp, COPYV))
X! ;
X return(setstatus(0));
X+ }
X else if (cp != NULL)
X shcom = inbuilt(cp);
X }
X***************
X*** 239,244 ****
X--- 254,262 ----
X brklist = 0;
X execflg = 0;
X }
X+ while ((cp = *owp++) != NULL && assign(cp, COPYV))
X+ if (shcom == NULL)
X+ export(lookup(cp));
X #ifdef COMPIPE
X if ((pin != NULL || pout != NULL) && shcom != NULL && shcom != doexec) {
X err("piping to/from shell builtins not yet done");
X***************
X*** 276,282 ****
X exit(execute(t->left, NOPIPE, NOPIPE, FEXEC));
X if (wp[0] == NULL)
X exit(0);
X! cp = rexecve(wp[0], wp, makenv(wp));
X prs(wp[0]); prs(": "); warn(cp);
X if (!execflg)
X trap[0] = NULL;
X--- 294,300 ----
X exit(execute(t->left, NOPIPE, NOPIPE, FEXEC));
X if (wp[0] == NULL)
X exit(0);
X! cp = rexecve(wp[0], wp, makenv());
X prs(wp[0]); prs(": "); warn(cp);
X if (!execflg)
X trap[0] = NULL;
X***************
X*** 449,455 ****
X--- 467,475 ----
X {
X register int pid, rv;
X int s;
X+ int oheedint = heedint;
X
X+ heedint = 0;
X rv = 0;
X do {
X pid = wait(&s);
X***************
X*** 475,488 ****
X }
X if (WAITCORE(s))
X prs(" - core dumped");
X! prs("\n");
X rv = -1;
X } else
X rv = WAITVAL(s);
X }
X- /* Special patch for MINIX: sync before each command */
X- sync();
X } while (pid != lastpid);
X return(rv);
X }
X
X--- 495,515 ----
X }
X if (WAITCORE(s))
X prs(" - core dumped");
X! if (rv >= NSIGNAL || signame[rv])
X! prs("\n");
X rv = -1;
X } else
X rv = WAITVAL(s);
X }
X } while (pid != lastpid);
X+ heedint = oheedint;
X+ if (intr)
X+ if (talking) {
X+ if (canintr)
X+ intr = 0;
X+ }
X+ else
X+ onintr();
X return(rv);
X }
X
X***************
X*** 551,558 ****
X * Run the command produced by generator `f'
X * applied to stream `arg'.
X */
X! run(arg, f)
X! struct ioarg arg;
X int (*f)();
X {
X struct op *otree;
X--- 578,585 ----
X * Run the command produced by generator `f'
X * applied to stream `arg'.
X */
X! run(argp, f)
X! struct ioarg *argp;
X int (*f)();
X {
X struct op *otree;
X***************
X*** 571,577 ****
X if (newenv(setjmp(errpt = ev)) == 0) {
X wdlist = 0;
X iolist = 0;
X! pushio(arg, f);
X e.iobase = e.iop;
X yynerrs = 0;
X if (setjmp(failpt = rt) == 0 && yyparse() == 0)
X--- 598,604 ----
X if (newenv(setjmp(errpt = ev)) == 0) {
X wdlist = 0;
X iolist = 0;
X! pushio(argp, f);
X e.iobase = e.iop;
X yynerrs = 0;
X if (setjmp(failpt = rt) == 0 && yyparse() == 0)
X***************
X*** 647,653 ****
X signal(SIGINT, SIG_DFL);
X signal(SIGQUIT, SIG_DFL);
X }
X! cp = rexecve(t->words[0], t->words, makenv(t->words));
X prs(t->words[0]); prs(": "); err(cp);
X return(1);
X }
X--- 674,680 ----
X signal(SIGINT, SIG_DFL);
X signal(SIGQUIT, SIG_DFL);
X }
X! cp = rexecve(t->words[0], t->words, makenv());
X prs(t->words[0]); prs(": "); err(cp);
X return(1);
X }
X***************
X*** 734,744 ****
X return(0);
X } else
X i = -1;
X- if (talking)
X- signal(SIGINT, onintr);
X setstatus(waitfor(i, 1));
X- if (talking)
X- signal(SIGINT, SIG_IGN);
X return(0);
X }
X
X--- 761,767 ----
X***************
X*** 799,806 ****
X setsig(n, sig);
X } else
X setsig(n, SIG_IGN);
X! } else
X! setsig(n, (n == SIGINT || n == SIGQUIT) && talking? SIG_IGN: SIG_DFL);
X return(0);
X }
X
X--- 822,836 ----
X setsig(n, sig);
X } else
X setsig(n, SIG_IGN);
X! } else {
X! if (talking)
X! if (n == SIGINT)
X! setsig(n, onintr);
X! else
X! setsig(n, n == SIGQUIT ? SIG_IGN : SIG_DFL);
X! else
X! setsig(n, SIG_DFL);
X! }
X return(0);
X }
X
+ END-OF-FILE sh3.c.cdif
chmod 'u=rw,g=r,o=r' 'sh3.c.cdif'
set `wc -c 'sh3.c.cdif'`
count=$1
case $count in
6171) :;;
*) echo 'Bad character count in ''sh3.c.cdif' >&2
echo 'Count should be 6171' >&2
esac
echo Extracting 'sh4.c.cdif'
sed 's/^X//' > 'sh4.c.cdif' << '+ END-OF-FILE ''sh4.c.cdif'
X*** ../../../tape3/commands/sh/sh4.c Mon Sep 26 13:02:41 1988
X--- sh4.c Sun Jan 22 22:59:18 1989
X***************
X*** 30,62 ****
X {
X struct wdblock *wb;
X char **wp;
X jmp_buf ev;
X
X- inword++;
X wp = NULL;
X wb = NULL;
X if (newenv(setjmp(errpt = ev)) == 0) {
X! wb = addword((char *)0, wb); /* space for shell name, if command file */
X! while (expand(*ap++, &wb, f))
X! ;
X wb = addword((char *)0, wb);
X! wp = getwords(wb) + 1;
X quitenv();
X } else
X gflg = 1;
X- inword--;
X return(gflg? NULL: wp);
X }
X
X /*
X * Make the exported environment from the exported
X! * names in the dictionary. Keyword assignments
X! * ought to be taken from wp (the list of words on the command line)
X! * but aren't, yet. Until then: ARGSUSED
X */
X char **
X! makenv(wp)
X! char **wp;
X {
X register struct wdblock *wb;
X register struct var *vp;
X--- 30,70 ----
X {
X struct wdblock *wb;
X char **wp;
X+ char **wf;
X jmp_buf ev;
X
X wp = NULL;
X wb = NULL;
X+ wf = NULL;
X if (newenv(setjmp(errpt = ev)) == 0) {
X! while (isassign(*ap))
X! expand(*ap++, &wb, f & ~DOGLOB);
X! if (flag['k']) {
X! for (wf = ap; *wf; wf++) {
X! if (isassign(*wf))
X! expand(*wf, &wb, f & ~DOGLOB);
X! }
X! }
X! for (wb = addword((char *)0, wb); *ap; ap++) {
X! if (!flag['k'] || !isassign(*ap))
X! expand(*ap, &wb, f & ~DOKEY);
X! }
X wb = addword((char *)0, wb);
X! wp = getwords(wb);
X quitenv();
X } else
X gflg = 1;
X return(gflg? NULL: wp);
X }
X
X /*
X * Make the exported environment from the exported
X! * names in the dictionary. Keyword assignments
X! * will already have been done.
X */
X char **
X! makenv()
X!
X {
X register struct wdblock *wb;
X register struct var *vp;
X***************
X*** 76,82 ****
X {
X struct wdblock *wb;
X
X- inword++;
X wb = NULL;
X if (expand(cp, &wb, f)) {
X if (wb == NULL || wb->w_nword == 0 || (cp = wb->w_words[0]) == NULL)
X--- 84,89 ----
X***************
X*** 84,90 ****
X DELETE(wb);
X } else
X cp = NULL;
X- inword--;
X return(cp);
X }
X
X--- 91,96 ----
X***************
X*** 134,144 ****
X {
X register c, c1;
X register char *sp;
X
X sp = e.linep;
X
X loop:
X! switch (c = subgetc('"', 0)) {
X case 0:
X if (sp == e.linep)
X return(0);
X--- 140,153 ----
X {
X register c, c1;
X register char *sp;
X+ int scanequals, foundequals;
X
X sp = e.linep;
X+ scanequals = f & DOKEY;
X+ foundequals = 0;
X
X loop:
X! switch (c = subgetc('"', foundequals)) {
X case 0:
X if (sp == e.linep)
X return(0);
X***************
X*** 152,157 ****
X--- 161,167 ----
X
X case '"':
X case '\'':
X+ scanequals = 0;
X if (INSUB())
X break;
X for (c1 = c; (c = subgetc(c1, 1)) != c1;) {
X***************
X*** 164,179 ****
X c = 0;
X }
X unget(c);
X for (;;) {
X! c = subgetc('"', 0);
X if (c == 0 ||
X f & DOBLANK && any(c, ifs->value) ||
X! !INSUB() && any(c, "\"'`")) {
X unget(c);
X! if (any(c, "\"'`"))
X goto loop;
X break;
X }
X *e.linep++ = c;
X }
X *e.linep++ = 0;
X--- 174,199 ----
X c = 0;
X }
X unget(c);
X+ if (!letter(c))
X+ scanequals = 0;
X for (;;) {
X! c = subgetc('"', foundequals);
X if (c == 0 ||
X f & DOBLANK && any(c, ifs->value) ||
X! !INSUB() && any(c, "\"'")) {
X! scanequals = 0;
X unget(c);
X! if (any(c, "\"'"))
X goto loop;
X break;
X }
X+ if (scanequals)
X+ if (c == '=') {
X+ foundequals = 1;
X+ scanequals = 0;
X+ }
X+ else if (!letnum(c))
X+ scanequals = 0;
X *e.linep++ = c;
X }
X *e.linep++ = 0;
X***************
X*** 305,311 ****
X gflg++;
X }
X e.linep = s;
X! PUSHIO(aword, dolp, strchar);
X return(0);
X }
X
X--- 325,331 ----
X gflg++;
X }
X e.linep = s;
X! PUSHIO(aword, dolp, quoted ? qstrchar : strchar);
X return(0);
X }
X
X***************
X*** 320,326 ****
X register int i;
X int pf[2];
X
X! for (cp = e.iop->arg.aword; *cp != '`'; cp++)
X if (*cp == 0) {
X err("no closing `");
X return(0);
X--- 340,346 ----
X register int i;
X int pf[2];
X
X! for (cp = e.iop->argp->aword; *cp != '`'; cp++)
X if (*cp == 0) {
X err("no closing `");
X return(0);
X***************
X*** 333,339 ****
X return(0);
X }
X if (i != 0) {
X! e.iop->arg.aword = ++cp;
X close(pf[1]);
X PUSHIO(afile, remap(pf[0]), quoted? qgravechar: gravechar);
X return(1);
X--- 353,359 ----
X return(0);
X }
X if (i != 0) {
X! e.iop->argp->aword = ++cp;
X close(pf[1]);
X PUSHIO(afile, remap(pf[0]), quoted? qgravechar: gravechar);
X return(1);
X***************
X*** 348,354 ****
X flag['e'] = 0;
X flag['v'] = 0;
X flag['n'] = 0;
X! cp = strsave(e.iop->arg.aword, 0);
X areanum = 1;
X freehere(areanum);
X freearea(areanum); /* free old space */
X--- 368,374 ----
X flag['e'] = 0;
X flag['v'] = 0;
X flag['n'] = 0;
X! cp = strsave(e.iop->argp->aword, 0);
X areanum = 1;
X freehere(areanum);
X freearea(areanum); /* free old space */
+ END-OF-FILE sh4.c.cdif
chmod 'u=rw,g=r,o=r' 'sh4.c.cdif'
set `wc -c 'sh4.c.cdif'`
count=$1
case $count in
4897) :;;
*) echo 'Bad character count in ''sh4.c.cdif' >&2
echo 'Count should be 4897' >&2
esac
echo Extracting 'sh5.c.cdif'
sed 's/^X//' > 'sh5.c.cdif' << '+ END-OF-FILE ''sh5.c.cdif'
X*** ../../../tape3/commands/sh/sh5.c Mon Sep 26 13:02:41 1988
X--- sh5.c Sun Jan 22 22:59:18 1989
X***************
X*** 11,17 ****
X--- 11,22 ----
X * shell IO
X */
X
X+ static struct iobuf sharedbuf = {AFID_NOBUF};
X+ static struct iobuf mainbuf = {AFID_NOBUF};
X+ static unsigned bufid = AFID_ID; /* buffer id counter */
X
X+ struct ioarg temparg = {0, 0, 0, AFID_NOBUF, 0};
X+
X int
X getc(ec)
X register int ec;
X***************
X*** 45,70 ****
X }
X
X int
X readc()
X {
X register c;
X- static int eofc;
X
X for (; e.iop >= e.iobase; e.iop--)
X if ((c = e.iop->peekc) != '\0') {
X e.iop->peekc = 0;
X return(c);
X- } else if ((c = (*e.iop->iofn)(&e.iop->arg, e.iop)) != '\0') {
X- if (c == -1) {
X- e.iop++;
X- continue;
X- }
X- if (e.iop == iostack)
X- ioecho(c);
X- return(c);
X }
X! if (e.iop >= iostack ||
X! multiline && eofc++ < 3)
X return(0);
X leave();
X /* NOTREACHED */
X--- 50,97 ----
X }
X
X int
X+ eofc()
X+
X+ {
X+ return e.iop < e.iobase || (e.iop->peekc == 0 && e.iop->prev == 0);
X+ }
X+
X+ int
X readc()
X {
X register c;
X
X for (; e.iop >= e.iobase; e.iop--)
X if ((c = e.iop->peekc) != '\0') {
X e.iop->peekc = 0;
X return(c);
X }
X! else {
X! if (e.iop->prev != 0) {
X! if ((c = (*e.iop->iofn)(e.iop->argp, e.iop)) != '\0') {
X! if (c == -1) {
X! e.iop++;
X! continue;
X! }
X! if (e.iop == iostack)
X! ioecho(c);
X! return(e.iop->prev = c);
X! }
X! else if (e.iop->task == XIO && e.iop->prev != '\n') {
X! e.iop->prev = 0;
X! if (e.iop == iostack)
X! ioecho('\n');
X! return '\n';
X! }
X! }
X! if (e.iop->task == XIO) {
X! if (multiline)
X! return e.iop->prev = 0;
X! if (talking && e.iop == iostack+1)
X! prs(prompt->value);
X! }
X! }
X! if (e.iop >= iostack)
X return(0);
X leave();
X /* NOTREACHED */
X***************
X*** 79,86 ****
X }
X
X void
X! pushio(arg, fn)
X! struct ioarg arg;
X int (*fn)();
X {
X if (++e.iop >= &iostack[NPUSH]) {
X--- 106,113 ----
X }
X
X void
X! pushio(argp, fn)
X! struct ioarg *argp;
X int (*fn)();
X {
X if (++e.iop >= &iostack[NPUSH]) {
X***************
X*** 90,100 ****
X return;
X }
X e.iop->iofn = fn;
X! e.iop->arg = arg;
X e.iop->peekc = 0;
X e.iop->xchar = 0;
X e.iop->nlcount = 0;
X! if (fn == filechar || fn == linechar || fn == nextchar)
X e.iop->task = XIO;
X else if (fn == gravechar || fn == qgravechar)
X e.iop->task = XGRAVE;
X--- 117,143 ----
X return;
X }
X e.iop->iofn = fn;
X!
X! if (argp->afid != AFID_NOBUF)
X! e.iop->argp = argp;
X! else {
X! e.iop->argp = ioargstack + (e.iop - iostack);
X! *e.iop->argp = *argp;
X! e.iop->argp->afbuf = e.iop == &iostack[0] ? &mainbuf : &sharedbuf;
X! if (isatty(e.iop->argp->afile) == 0 &&
X! (e.iop == &iostack[0] ||
X! lseek(e.iop->argp->afile, 0L, 1) != -1)) {
X! if (++bufid == AFID_NOBUF)
X! bufid = AFID_ID;
X! e.iop->argp->afid = bufid;
X! }
X! }
X!
X! e.iop->prev = ~'\n';
X e.iop->peekc = 0;
X e.iop->xchar = 0;
X e.iop->nlcount = 0;
X! if (fn == filechar || fn == linechar)
X e.iop->task = XIO;
X else if (fn == gravechar || fn == qgravechar)
X e.iop->task = XGRAVE;
X***************
X*** 162,168 ****
X * Return the characters of a list of words,
X * producing a space between them.
X */
X! static int xxchar(), qqchar();
X
X int
X dolchar(ap)
X--- 205,211 ----
X * Return the characters of a list of words,
X * producing a space between them.
X */
X! static int xxchar();
X
X int
X dolchar(ap)
X***************
X*** 171,177 ****
X register char *wp;
X
X if ((wp = *ap->awordlist++) != NULL) {
X! PUSHIO(aword, wp, *ap->awordlist == NULL? qqchar: xxchar);
X return(-1);
X }
X return(0);
X--- 214,220 ----
X register char *wp;
X
X if ((wp = *ap->awordlist++) != NULL) {
X! PUSHIO(aword, wp, *ap->awordlist == NULL? strchar: xxchar);
X return(-1);
X }
X return(0);
X***************
X*** 192,220 ****
X return(c);
X }
X
X! static int
X! qqchar(ap)
X register struct ioarg *ap;
X {
X register int c;
X
X! if (ap->aword == NULL || (c = *ap->aword++) == '\0')
X return(0);
X return(c);
X }
X
X /*
X! * Produce the characters from a single word (string).
X */
X int
X! strchar(ap)
X register struct ioarg *ap;
X {
X register int c;
X
X! if (ap->aword == 0 || (c = *ap->aword++) == 0)
X return(0);
X! return(c);
X }
X
X /*
X--- 235,266 ----
X return(c);
X }
X
X! /*
X! * Produce the characters from a single word (string).
X! */
X! int
X! strchar(ap)
X register struct ioarg *ap;
X {
X register int c;
X
X! if (ap->aword == NULL || (c = *ap->aword++) == 0)
X return(0);
X return(c);
X }
X
X /*
X! * Produce quoted characters from a single word (string).
X */
X int
X! qstrchar(ap)
X register struct ioarg *ap;
X {
X register int c;
X
X! if (ap->aword == NULL || (c = *ap->aword++) == 0)
X return(0);
X! return(c|QUOTE);
X }
X
X /*
X***************
X*** 226,233 ****
X--- 272,298 ----
X {
X register int i;
X char c;
X+ struct iobuf *bp = ap->afbuf;
X extern int errno;
X
X+ if (ap->afid != AFID_NOBUF) {
X+ if ((i = ap->afid != bp->id) || bp->bufp == bp->ebufp) {
X+ if (i)
X+ lseek(ap->afile, ap->afpos, 0);
X+ do {
X+ i = read(ap->afile, bp->buf, sizeof(bp->buf));
X+ } while (i < 0 && errno == EINTR);
X+ if (i <= 0) {
X+ closef(ap->afile);
X+ return 0;
X+ }
X+ bp->id = ap->afid;
X+ bp->ebufp = (bp->bufp = bp->buf) + i;
X+ }
X+ ap->afpos++;
X+ return *bp->bufp++ & 0177;
X+ }
X+
X do {
X i = read(ap->afile, &c, sizeof(c));
X } while (i < 0 && errno == EINTR);
X***************
X*** 313,335 ****
X return(c);
X }
X
X- /*
X- * Return the next character from the command source,
X- * prompting when required.
X- */
X- int
X- nextchar(ap)
X- register struct ioarg *ap;
X- {
X- register int c;
X-
X- if ((c = filechar(ap)) != 0)
X- return(c);
X- if (talking && e.iop <= iostack+1)
X- prs(prompt->value);
X- return(0);
X- }
X-
X void
X prs(s)
X register char *s;
X--- 378,383 ----
X***************
X*** 433,442 ****
X static struct here *inhere; /* list of hear docs while parsing */
X static struct here *acthere; /* list of active here documents */
X
X! static char *readhere();
X
X- #define NCPB 100 /* here text block allocation unit */
X-
X markhere(s, iop)
X register char *s;
X struct ioword *iop;
X--- 481,488 ----
X static struct here *inhere; /* list of hear docs while parsing */
X static struct here *acthere; /* list of active here documents */
X
X! static void readhere();
X
X markhere(s, iop)
X register char *s;
X struct ioword *iop;
X***************
X*** 450,455 ****
X--- 496,502 ----
X if (h->h_tag == 0)
X return;
X h->h_iop = iop;
X+ iop->io_name = 0;
X h->h_next = NULL;
X if (inhere == 0)
X inhere = h;
X***************
X*** 470,489 ****
X
X gethere()
X {
X! register struct here *h;
X
X! for (h = inhere; h != NULL; h = inhere) {
X! h->h_iop->io_name = readhere(h->h_tag, h->h_dosub? 0: '\'');
X! /* relink from inhere to acthere list */
X! inhere = h->h_next;
X! h->h_next = acthere;
X! acthere = h;
X }
X- inhere = h;
X }
X
X! static char *
X! readhere(s, ec)
X register char *s;
X {
X int tf;
X--- 517,539 ----
X
X gethere()
X {
X! register struct here *h, *hp;
X
X! /* Scan here files first leaving inhere list in place */
X! for (hp = h = inhere; h != NULL; hp = h, h = h->h_next)
X! readhere(&h->h_iop->io_name, h->h_tag, h->h_dosub? 0: '\'');
X!
X! /* Make inhere list active - keep list intact for scraphere */
X! if (hp != NULL) {
X! hp->h_next = acthere;
X! acthere = inhere;
X! inhere = NULL;
X }
X }
X
X! static void
X! readhere(name, s, ec)
X! char **name;
X register char *s;
X {
X int tf;
X***************
X*** 494,534 ****
X char *next;
X
X tempname(tname);
X tf = creat(tname, 0600);
X if (tf < 0)
X! return (0);
X if (newenv(setjmp(errpt = ev)) != 0)
X! return (0);
X! if (e.iop == iostack && e.iop->iofn == filechar) {
X! pushio(e.iop->arg, filechar);
X e.iobase = e.iop;
X! }
X! for (;;) {
X! if (talking && e.iop <= iostack)
X! prs(cprompt->value);
X! next = line;
X! while ((c = getc(ec)) != '\n' && c) {
X! if (ec == '\'')
X! c &= ~ QUOTE;
X! if (next >= &line[LINELIM]) {
X! c = 0;
X! break;
X }
X! *next++ = c;
X }
X! *next = 0;
X! if (strcmp(s, line) == 0 || c == 0)
X! break;
X! *next++ = '\n';
X! write (tf, line, (int)(next-line));
X }
X- if (c == 0) {
X- prs("here document `"); prs(s); err("' unclosed");
X- }
X close(tf);
X- quitenv();
X- /* correct area? */
X- return (strsave(tname, areanum));
X }
X
X /*
X--- 544,583 ----
X char *next;
X
X tempname(tname);
X+ *name = strsave(tname, areanum);
X tf = creat(tname, 0600);
X if (tf < 0)
X! return;
X if (newenv(setjmp(errpt = ev)) != 0)
X! unlink(tname);
X! else {
X! pushio(e.iop->argp, e.iop->iofn);
X e.iobase = e.iop;
X! for (;;) {
X! if (talking && e.iop <= iostack)
X! prs(cprompt->value);
X! next = line;
X! while ((c = getc(ec)) != '\n' && c) {
X! if (ec == '\'')
X! c &= ~ QUOTE;
X! if (next >= &line[LINELIM]) {
X! c = 0;
X! break;
X! }
X! *next++ = c;
X }
X! *next = 0;
X! if (strcmp(s, line) == 0 || c == 0)
X! break;
X! *next++ = '\n';
X! write (tf, line, (int)(next-line));
X }
X! if (c == 0) {
X! prs("here document `"); prs(s); err("' unclosed");
X! }
X! quitenv();
X }
X close(tf);
X }
X
X /*
X***************
X*** 573,578 ****
X--- 622,633 ----
X
X scraphere()
X {
X+ register struct here *h;
X+
X+ for (h = inhere; h != NULL; h = h->h_next) {
X+ if (h->h_iop && h->h_iop->io_name)
X+ unlink(h->h_iop->io_name);
X+ }
X inhere = NULL;
X }
X
+ END-OF-FILE sh5.c.cdif
chmod 'u=rw,g=r,o=r' 'sh5.c.cdif'
set `wc -c 'sh5.c.cdif'`
count=$1
case $count in
9711) :;;
*) echo 'Bad character count in ''sh5.c.cdif' >&2
echo 'Count should be 9711' >&2
esac
echo Extracting 'sh6.c.cdif'
sed 's/^X//' > 'sh6.c.cdif' << '+ END-OF-FILE ''sh6.c.cdif'
X*** ../../../tape3/commands/sh/sh6.c Mon Sep 26 13:02:42 1988
X--- sh6.c Sun Jan 22 22:59:18 1989
+ END-OF-FILE sh6.c.cdif
chmod 'u=rw,g=r,o=r' 'sh6.c.cdif'
set `wc -c 'sh6.c.cdif'`
count=$1
case $count in
97) :;;
*) echo 'Bad character count in ''sh6.c.cdif' >&2
echo 'Count should be 97' >&2
esac
exit 0