summaryrefslogtreecommitdiff
path: root/shells/v7sh/files/patch-word.c
diff options
context:
space:
mode:
Diffstat (limited to 'shells/v7sh/files/patch-word.c')
-rw-r--r--shells/v7sh/files/patch-word.c157
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);
+ }