1 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 2 --- word.c.orig Fri Jun 4 02:51:02 2004 3 +++ word.c Sat Jun 19 18:42:25 2004 4 @@ -10,19 +10,51 @@ 5 #include "defs.h" 6 #include "sym.h" 7 8 +LOCAL INT readb(VOID); 9 + 10 +INT wdval; 11 +INT wdnum; 12 +ARGPTR wdarg; 13 +INT wdset; 14 +BOOL reserv; 15 +INT peekc; 16 +BOOL rwait; 17 + 18 19 /* ======== character handling for command lines ========*/ 20 21 22 -word() 23 +INT word() 24 { 25 - REG CHAR c, d; 26 - REG CHAR *argp=locstak()+BYTESPERWORD; 27 + REG INT c, d; 28 + REG STRING argp=(STRING) (locstak()+BYTESPERWORD); 29 + REG ARGPTR ap; 30 INT alpha=1; 31 32 wdnum=0; wdset=0; 33 34 +#if defined(SYSIII) 35 + LOOP 36 +#endif 37 WHILE (c=nextc(0), space(c)) DONE 38 +#if defined(RENO) 39 + IF c==COMCHAR ANDF ((flags&prompt)==0 ORF ((flags&ttyflg) ANDF 40 + standin->fstak!=0)) 41 + THEN WHILE (c=readc())!=EOF ANDF c!=NL DONE 42 +#if defined(SYSIII) 43 + peekc=c; 44 + ELSE break; /* out of comment - white space loop */ 45 +#endif 46 + FI 47 +#endif 48 +#if defined(SYSIII) 49 + IF c==COMCHAR 50 + THEN WHILE (c=readc())!=EOF ANDF c!=NL DONE 51 + peekc=c; 52 + ELSE break; /* out of comment - white space loop */ 53 + FI 54 + POOL 55 +#endif 56 IF !eofmeta(c) 57 THEN REP IF c==LITERAL 58 THEN *argp++=(DQUOTE); 59 @@ -39,21 +71,29 @@ 60 FI 61 FI 62 PER (c=nextc(0), !eofmeta(c)) DONE 63 - argp=endstak(argp); 64 - IF !letter(argp->argval[0]) THEN wdset=0 FI 65 + ap=(ARGPTR) endstak(argp); 66 + IF !letter((INT) ap->argval[0]) THEN wdset=0 FI 67 68 peekc=c|MARK; 69 - IF argp->argval[1]==0 ANDF (d=argp->argval[0], digit(d)) ANDF (c=='>' ORF c=='<') 70 + IF ap->argval[1]==0 ANDF (d=ap->argval[0], digit(d)) ANDF (c=='>' ORF c=='<') 71 THEN word(); wdnum=d-'0'; 72 ELSE /*check for reserved words*/ 73 - IF reserv==FALSE ORF (wdval=syslook(argp->argval,reserved))==0 74 - THEN wdarg=argp; wdval=0; 75 + IF reserv==FALSE ORF (wdval=syslook(ap->argval,reserved))==0 76 + THEN wdarg=ap; wdval=0; 77 FI 78 FI 79 80 ELIF dipchar(c) 81 THEN IF (d=nextc(0))==c 82 THEN wdval = c|SYMREP; 83 +#if defined(SYSIII) 84 + IF c=='<' 85 + THEN IF (d=nextc(0))=='-' 86 + THEN stripflg++; 87 + ELSE peekc = d|MARK; 88 + FI 89 + FI 90 +#endif 91 ELSE peekc = d|MARK; wdval = c; 92 FI 93 ELSE IF (wdval=c)==EOF 94 @@ -67,10 +107,10 @@ 95 return(wdval); 96 } 97 98 -nextc(quote) 99 - CHAR quote; 100 +INT nextc(quote) 101 + INT quote; 102 { 103 - REG CHAR c, d; 104 + REG INT c, d; 105 IF (d=readc())==ESCAPE 106 THEN IF (c=readc())==NL 107 THEN chkpr(NL); d=nextc(quote); 108 @@ -82,15 +122,15 @@ 109 return(d); 110 } 111 112 -readc() 113 +INT readc() 114 { 115 - REG CHAR c; 116 + REG INT c; 117 REG INT len; 118 - REG FILE f; 119 + REG FILEPTR f; 120 121 retry: 122 IF peekc 123 - THEN c=peekc; peekc=0; 124 + THEN c=peekc&STRIP; peekc=0; 125 ELIF (f=standin, f->fnxt!=f->fend) 126 THEN IF (c = *f->fnxt++)==0 127 THEN IF f->feval 128 @@ -113,12 +153,26 @@ 129 return(c); 130 } 131 132 -LOCAL readb() 133 +LOCAL INT readb() 134 { 135 - REG FILE f=standin; 136 + REG FILEPTR f=standin; 137 REG INT len; 138 139 +#if defined(RENO) 140 + IF setjmp(INTbuf) == 0 THEN trapjmp[INTR] = 1; FI 141 +#endif 142 +#if defined(SYSIII) 143 + REP IF trapnote&SIGSET 144 + THEN newline(); sigchk(); 145 + ELIF (trapnote&TRAPSET) ANDF (rwait>0) 146 + THEN newline(); chktrap(); clearup(); 147 + FI 148 +#else /* V7 */ 149 REP IF trapnote&SIGSET THEN newline(); sigchk() FI 150 - PER (len=read(f->fdes,f->fbuf,f->fsiz))<0 ANDF trapnote DONE 151 +#endif 152 + PER (len=read(f->fdes,f->fbuf,(SIZE) f->fsiz))<0 ANDF trapnote DONE 153 +#if defined(RENO) 154 + trapjmp[INTR] = 0; 155 +#endif 156 return(len); 157 } 158