diff options
Diffstat (limited to 'shells/v7sh/files/patch-word.c')
-rw-r--r-- | shells/v7sh/files/patch-word.c | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/shells/v7sh/files/patch-word.c b/shells/v7sh/files/patch-word.c new file mode 100644 index 000000000000..70545eed01c3 --- /dev/null +++ b/shells/v7sh/files/patch-word.c @@ -0,0 +1,157 @@ +diff -u -x CVS -x work -x core -x *.core -x #* -x *~ -x *.orig -x *.rej -I $Id.*$ -I $.+BSD.*$ word.c.orig word.c +--- word.c.orig Fri Jun 4 02:51:02 2004 ++++ word.c Sat Jun 19 18:42:25 2004 +@@ -10,19 +10,51 @@ + #include "defs.h" + #include "sym.h" + ++LOCAL INT readb(VOID); ++ ++INT wdval; ++INT wdnum; ++ARGPTR wdarg; ++INT wdset; ++BOOL reserv; ++INT peekc; ++BOOL rwait; ++ + + /* ======== character handling for command lines ========*/ + + +-word() ++INT word() + { +- REG CHAR c, d; +- REG CHAR *argp=locstak()+BYTESPERWORD; ++ REG INT c, d; ++ REG STRING argp=(STRING) (locstak()+BYTESPERWORD); ++ REG ARGPTR ap; + INT alpha=1; + + wdnum=0; wdset=0; + ++#if defined(SYSIII) ++ LOOP ++#endif + WHILE (c=nextc(0), space(c)) DONE ++#if defined(RENO) ++ IF c==COMCHAR ANDF ((flags&prompt)==0 ORF ((flags&ttyflg) ANDF ++ standin->fstak!=0)) ++ THEN WHILE (c=readc())!=EOF ANDF c!=NL DONE ++#if defined(SYSIII) ++ peekc=c; ++ ELSE break; /* out of comment - white space loop */ ++#endif ++ FI ++#endif ++#if defined(SYSIII) ++ IF c==COMCHAR ++ THEN WHILE (c=readc())!=EOF ANDF c!=NL DONE ++ peekc=c; ++ ELSE break; /* out of comment - white space loop */ ++ FI ++ POOL ++#endif + IF !eofmeta(c) + THEN REP IF c==LITERAL + THEN *argp++=(DQUOTE); +@@ -39,21 +71,29 @@ + FI + FI + PER (c=nextc(0), !eofmeta(c)) DONE +- argp=endstak(argp); +- IF !letter(argp->argval[0]) THEN wdset=0 FI ++ ap=(ARGPTR) endstak(argp); ++ IF !letter((INT) ap->argval[0]) THEN wdset=0 FI + + peekc=c|MARK; +- IF argp->argval[1]==0 ANDF (d=argp->argval[0], digit(d)) ANDF (c=='>' ORF c=='<') ++ IF ap->argval[1]==0 ANDF (d=ap->argval[0], digit(d)) ANDF (c=='>' ORF c=='<') + THEN word(); wdnum=d-'0'; + ELSE /*check for reserved words*/ +- IF reserv==FALSE ORF (wdval=syslook(argp->argval,reserved))==0 +- THEN wdarg=argp; wdval=0; ++ IF reserv==FALSE ORF (wdval=syslook(ap->argval,reserved))==0 ++ THEN wdarg=ap; wdval=0; + FI + FI + + ELIF dipchar(c) + THEN IF (d=nextc(0))==c + THEN wdval = c|SYMREP; ++#if defined(SYSIII) ++ IF c=='<' ++ THEN IF (d=nextc(0))=='-' ++ THEN stripflg++; ++ ELSE peekc = d|MARK; ++ FI ++ FI ++#endif + ELSE peekc = d|MARK; wdval = c; + FI + ELSE IF (wdval=c)==EOF +@@ -67,10 +107,10 @@ + return(wdval); + } + +-nextc(quote) +- CHAR quote; ++INT nextc(quote) ++ INT quote; + { +- REG CHAR c, d; ++ REG INT c, d; + IF (d=readc())==ESCAPE + THEN IF (c=readc())==NL + THEN chkpr(NL); d=nextc(quote); +@@ -82,15 +122,15 @@ + return(d); + } + +-readc() ++INT readc() + { +- REG CHAR c; ++ REG INT c; + REG INT len; +- REG FILE f; ++ REG FILEPTR f; + + retry: + IF peekc +- THEN c=peekc; peekc=0; ++ THEN c=peekc&STRIP; peekc=0; + ELIF (f=standin, f->fnxt!=f->fend) + THEN IF (c = *f->fnxt++)==0 + THEN IF f->feval +@@ -113,12 +153,26 @@ + return(c); + } + +-LOCAL readb() ++LOCAL INT readb() + { +- REG FILE f=standin; ++ REG FILEPTR f=standin; + REG INT len; + ++#if defined(RENO) ++ IF setjmp(INTbuf) == 0 THEN trapjmp[INTR] = 1; FI ++#endif ++#if defined(SYSIII) ++ REP IF trapnote&SIGSET ++ THEN newline(); sigchk(); ++ ELIF (trapnote&TRAPSET) ANDF (rwait>0) ++ THEN newline(); chktrap(); clearup(); ++ FI ++#else /* V7 */ + REP IF trapnote&SIGSET THEN newline(); sigchk() FI +- PER (len=read(f->fdes,f->fbuf,f->fsiz))<0 ANDF trapnote DONE ++#endif ++ PER (len=read(f->fdes,f->fbuf,(SIZE) f->fsiz))<0 ANDF trapnote DONE ++#if defined(RENO) ++ trapjmp[INTR] = 0; ++#endif + return(len); + } |