Blame


1 84114f06 2004-04-19 devnull /*
2 84114f06 2004-04-19 devnull *
3 84114f06 2004-04-19 devnull * debugger
4 84114f06 2004-04-19 devnull *
5 84114f06 2004-04-19 devnull */
6 84114f06 2004-04-19 devnull
7 84114f06 2004-04-19 devnull #include "defs.h"
8 84114f06 2004-04-19 devnull #include "fns.h"
9 84114f06 2004-04-19 devnull
10 84114f06 2004-04-19 devnull Rune line[LINSIZ];
11 84114f06 2004-04-19 devnull extern int infile;
12 84114f06 2004-04-19 devnull Rune *lp;
13 84114f06 2004-04-19 devnull int peekc,lastc = EOR;
14 84114f06 2004-04-19 devnull int eof;
15 84114f06 2004-04-19 devnull
16 84114f06 2004-04-19 devnull /* input routines */
17 84114f06 2004-04-19 devnull
18 84114f06 2004-04-19 devnull int
19 84114f06 2004-04-19 devnull eol(int c)
20 84114f06 2004-04-19 devnull {
21 84114f06 2004-04-19 devnull return(c==EOR || c==';');
22 84114f06 2004-04-19 devnull }
23 84114f06 2004-04-19 devnull
24 84114f06 2004-04-19 devnull int
25 84114f06 2004-04-19 devnull rdc(void)
26 84114f06 2004-04-19 devnull {
27 84114f06 2004-04-19 devnull do {
28 84114f06 2004-04-19 devnull readchar();
29 84114f06 2004-04-19 devnull } while (lastc==SPC || lastc==TB);
30 84114f06 2004-04-19 devnull return(lastc);
31 84114f06 2004-04-19 devnull }
32 84114f06 2004-04-19 devnull
33 84114f06 2004-04-19 devnull void
34 84114f06 2004-04-19 devnull reread(void)
35 84114f06 2004-04-19 devnull {
36 84114f06 2004-04-19 devnull peekc = lastc;
37 84114f06 2004-04-19 devnull }
38 84114f06 2004-04-19 devnull
39 84114f06 2004-04-19 devnull void
40 84114f06 2004-04-19 devnull clrinp(void)
41 84114f06 2004-04-19 devnull {
42 84114f06 2004-04-19 devnull flush();
43 84114f06 2004-04-19 devnull lp = 0;
44 84114f06 2004-04-19 devnull peekc = 0;
45 84114f06 2004-04-19 devnull }
46 84114f06 2004-04-19 devnull
47 84114f06 2004-04-19 devnull int
48 84114f06 2004-04-19 devnull readrune(int fd, Rune *r)
49 84114f06 2004-04-19 devnull {
50 84114f06 2004-04-19 devnull char buf[UTFmax];
51 84114f06 2004-04-19 devnull int i;
52 84114f06 2004-04-19 devnull
53 84114f06 2004-04-19 devnull for(i=0; i<UTFmax && !fullrune(buf, i); i++)
54 84114f06 2004-04-19 devnull if(read(fd, buf+i, 1) <= 0)
55 84114f06 2004-04-19 devnull return -1;
56 84114f06 2004-04-19 devnull chartorune(r, buf);
57 84114f06 2004-04-19 devnull return 1;
58 84114f06 2004-04-19 devnull }
59 84114f06 2004-04-19 devnull
60 84114f06 2004-04-19 devnull int
61 84114f06 2004-04-19 devnull readchar(void)
62 84114f06 2004-04-19 devnull {
63 84114f06 2004-04-19 devnull Rune *p;
64 84114f06 2004-04-19 devnull
65 84114f06 2004-04-19 devnull if (eof)
66 84114f06 2004-04-19 devnull lastc=0;
67 84114f06 2004-04-19 devnull else if (peekc) {
68 84114f06 2004-04-19 devnull lastc = peekc;
69 84114f06 2004-04-19 devnull peekc = 0;
70 84114f06 2004-04-19 devnull }
71 84114f06 2004-04-19 devnull else {
72 84114f06 2004-04-19 devnull if (lp==0) {
73 84114f06 2004-04-19 devnull for (p = line; p < &line[LINSIZ-1]; p++) {
74 84114f06 2004-04-19 devnull eof = readrune(infile, p) <= 0;
75 84114f06 2004-04-19 devnull if (mkfault) {
76 84114f06 2004-04-19 devnull eof = 0;
77 84114f06 2004-04-19 devnull error(0);
78 84114f06 2004-04-19 devnull }
79 84114f06 2004-04-19 devnull if (eof) {
80 84114f06 2004-04-19 devnull p--;
81 84114f06 2004-04-19 devnull break;
82 84114f06 2004-04-19 devnull }
83 84114f06 2004-04-19 devnull if (*p == EOR) {
84 84114f06 2004-04-19 devnull if (p <= line)
85 84114f06 2004-04-19 devnull break;
86 84114f06 2004-04-19 devnull if (p[-1] != '\\')
87 84114f06 2004-04-19 devnull break;
88 84114f06 2004-04-19 devnull p -= 2;
89 84114f06 2004-04-19 devnull }
90 84114f06 2004-04-19 devnull }
91 84114f06 2004-04-19 devnull p[1] = 0;
92 84114f06 2004-04-19 devnull lp = line;
93 84114f06 2004-04-19 devnull }
94 84114f06 2004-04-19 devnull if ((lastc = *lp) != 0)
95 84114f06 2004-04-19 devnull lp++;
96 84114f06 2004-04-19 devnull }
97 84114f06 2004-04-19 devnull return(lastc);
98 84114f06 2004-04-19 devnull }
99 84114f06 2004-04-19 devnull
100 84114f06 2004-04-19 devnull int
101 84114f06 2004-04-19 devnull nextchar(void)
102 84114f06 2004-04-19 devnull {
103 84114f06 2004-04-19 devnull if (eol(rdc())) {
104 84114f06 2004-04-19 devnull reread();
105 84114f06 2004-04-19 devnull return(0);
106 84114f06 2004-04-19 devnull }
107 84114f06 2004-04-19 devnull return(lastc);
108 84114f06 2004-04-19 devnull }
109 84114f06 2004-04-19 devnull
110 84114f06 2004-04-19 devnull int
111 84114f06 2004-04-19 devnull quotchar(void)
112 84114f06 2004-04-19 devnull {
113 84114f06 2004-04-19 devnull if (readchar()=='\\')
114 84114f06 2004-04-19 devnull return(readchar());
115 84114f06 2004-04-19 devnull else if (lastc=='\'')
116 84114f06 2004-04-19 devnull return(0);
117 84114f06 2004-04-19 devnull else
118 84114f06 2004-04-19 devnull return(lastc);
119 84114f06 2004-04-19 devnull }
120 84114f06 2004-04-19 devnull
121 84114f06 2004-04-19 devnull void
122 84114f06 2004-04-19 devnull getformat(char *deformat)
123 84114f06 2004-04-19 devnull {
124 84114f06 2004-04-19 devnull char *fptr;
125 84114f06 2004-04-19 devnull BOOL quote;
126 84114f06 2004-04-19 devnull Rune r;
127 84114f06 2004-04-19 devnull
128 84114f06 2004-04-19 devnull fptr=deformat;
129 84114f06 2004-04-19 devnull quote=FALSE;
130 84114f06 2004-04-19 devnull while ((quote ? readchar()!=EOR : !eol(readchar()))){
131 84114f06 2004-04-19 devnull r = lastc;
132 84114f06 2004-04-19 devnull fptr += runetochar(fptr, &r);
133 84114f06 2004-04-19 devnull if (lastc == '"')
134 84114f06 2004-04-19 devnull quote = ~quote;
135 84114f06 2004-04-19 devnull }
136 84114f06 2004-04-19 devnull lp--;
137 84114f06 2004-04-19 devnull if (fptr!=deformat)
138 84114f06 2004-04-19 devnull *fptr = '\0';
139 84114f06 2004-04-19 devnull }
140 84114f06 2004-04-19 devnull
141 84114f06 2004-04-19 devnull /*
142 84114f06 2004-04-19 devnull * check if the input line if of the form:
143 84114f06 2004-04-19 devnull * <filename>:<digits><verb> ...
144 84114f06 2004-04-19 devnull *
145 84114f06 2004-04-19 devnull * we handle this case specially because we have to look ahead
146 84114f06 2004-04-19 devnull * at the token after the colon to decide if it is a file reference
147 fa325e9b 2020-01-10 cross * or a colon-command with a symbol name prefix.
148 84114f06 2004-04-19 devnull */
149 84114f06 2004-04-19 devnull
150 84114f06 2004-04-19 devnull int
151 84114f06 2004-04-19 devnull isfileref(void)
152 84114f06 2004-04-19 devnull {
153 84114f06 2004-04-19 devnull Rune *cp;
154 84114f06 2004-04-19 devnull
155 84114f06 2004-04-19 devnull for (cp = lp-1; *cp && !strchr(CMD_VERBS, *cp); cp++)
156 84114f06 2004-04-19 devnull if (*cp == '\\' && cp[1]) /* escape next char */
157 84114f06 2004-04-19 devnull cp++;
158 84114f06 2004-04-19 devnull if (*cp && cp > lp-1) {
159 84114f06 2004-04-19 devnull while (*cp == ' ' || *cp == '\t')
160 84114f06 2004-04-19 devnull cp++;
161 84114f06 2004-04-19 devnull if (*cp++ == ':') {
162 84114f06 2004-04-19 devnull while (*cp == ' ' || *cp == '\t')
163 84114f06 2004-04-19 devnull cp++;
164 84114f06 2004-04-19 devnull if (isdigit(*cp))
165 84114f06 2004-04-19 devnull return 1;
166 84114f06 2004-04-19 devnull }
167 84114f06 2004-04-19 devnull }
168 84114f06 2004-04-19 devnull return 0;
169 84114f06 2004-04-19 devnull }