3 84114f06 2004-04-19 devnull * debugger
7 84114f06 2004-04-19 devnull #include "defs.h"
8 84114f06 2004-04-19 devnull #include "fns.h"
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;
16 84114f06 2004-04-19 devnull /* input routines */
19 84114f06 2004-04-19 devnull eol(int c)
21 84114f06 2004-04-19 devnull return(c==EOR || c==';');
25 84114f06 2004-04-19 devnull rdc(void)
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);
34 84114f06 2004-04-19 devnull reread(void)
36 84114f06 2004-04-19 devnull peekc = lastc;
40 84114f06 2004-04-19 devnull clrinp(void)
44 84114f06 2004-04-19 devnull peekc = 0;
48 84114f06 2004-04-19 devnull readrune(int fd, Rune *r)
50 84114f06 2004-04-19 devnull char buf[UTFmax];
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;
61 84114f06 2004-04-19 devnull readchar(void)
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;
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) {
77 84114f06 2004-04-19 devnull error(0);
79 84114f06 2004-04-19 devnull if (eof) {
83 84114f06 2004-04-19 devnull if (*p == EOR) {
84 84114f06 2004-04-19 devnull if (p <= line)
86 84114f06 2004-04-19 devnull if (p[-1] != '\\')
91 84114f06 2004-04-19 devnull p[1] = 0;
92 84114f06 2004-04-19 devnull lp = line;
94 84114f06 2004-04-19 devnull if ((lastc = *lp) != 0)
97 84114f06 2004-04-19 devnull return(lastc);
101 84114f06 2004-04-19 devnull nextchar(void)
103 84114f06 2004-04-19 devnull if (eol(rdc())) {
104 84114f06 2004-04-19 devnull reread();
105 84114f06 2004-04-19 devnull return(0);
107 84114f06 2004-04-19 devnull return(lastc);
111 84114f06 2004-04-19 devnull quotchar(void)
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);
118 84114f06 2004-04-19 devnull return(lastc);
122 84114f06 2004-04-19 devnull getformat(char *deformat)
124 84114f06 2004-04-19 devnull char *fptr;
125 84114f06 2004-04-19 devnull BOOL quote;
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;
137 84114f06 2004-04-19 devnull if (fptr!=deformat)
138 84114f06 2004-04-19 devnull *fptr = '\0';
142 84114f06 2004-04-19 devnull * check if the input line if of the form:
143 84114f06 2004-04-19 devnull * <filename>:<digits><verb> ...
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 84114f06 2004-04-19 devnull * or a colon-command with a symbol name prefix.
151 84114f06 2004-04-19 devnull isfileref(void)
153 84114f06 2004-04-19 devnull Rune *cp;
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 */
158 84114f06 2004-04-19 devnull if (*cp && cp > lp-1) {
159 84114f06 2004-04-19 devnull while (*cp == ' ' || *cp == '\t')
161 84114f06 2004-04-19 devnull if (*cp++ == ':') {
162 84114f06 2004-04-19 devnull while (*cp == ' ' || *cp == '\t')
164 84114f06 2004-04-19 devnull if (isdigit(*cp))
165 84114f06 2004-04-19 devnull return 1;
168 84114f06 2004-04-19 devnull return 0;