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