summaryrefslogtreecommitdiff
path: root/shells/v7sh/files/patch-word.c
blob: 70545eed01c3d5ea09da07b98edead072815682f (plain) (blame)
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);
 }