1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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);
}
|