More 8bit/ctype fixes, command mode

This commit is contained in:
Andrey A. Chernov 1994-10-30 04:05:50 +00:00
parent 49a7037f5a
commit ca4a5183dd
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=4003
4 changed files with 27 additions and 39 deletions

View file

@ -38,6 +38,7 @@
static char sccsid[] = "@(#)scanner.c 8.1 (Berkeley) 6/6/93";
#endif /* not lint */
#include <ctype.h>
#include "value.h"
#include "token.h"
#include "context.h"
@ -110,22 +111,6 @@ s_gettok()
cx.x_token = T_EOF;
state = -1;
break;
case 'a': case 'b': case 'c': case 'd': case 'e':
case 'f': case 'g': case 'h': case 'i': case 'j':
case 'k': case 'l': case 'm': case 'n': case 'o':
case 'p': case 'q': case 'r': case 's': case 't':
case 'u': case 'v': case 'w': case 'x': case 'y':
case 'z':
case 'A': case 'B': case 'C': case 'D': case 'E':
case 'F': case 'G': case 'H': case 'I': case 'J':
case 'K': case 'L': case 'M': case 'N': case 'O':
case 'P': case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X': case 'Y':
case 'Z':
case '_': case '.':
*p++ = c;
state = 2;
break;
case '"':
state = 3;
break;
@ -231,6 +216,11 @@ s_gettok()
state = -1;
break;
default:
if (isalpha(c) || c == '_' || c == '.') {
*p++ = c;
state = 2;
break;
}
cx.x_val.v_num = c;
cx.x_token = T_CHAR;
state = -1;
@ -245,24 +235,6 @@ s_gettok()
break;
case 2: /* unquoted string */
switch (c) {
case 'a': case 'b': case 'c': case 'd': case 'e':
case 'f': case 'g': case 'h': case 'i': case 'j':
case 'k': case 'l': case 'm': case 'n': case 'o':
case 'p': case 'q': case 'r': case 's': case 't':
case 'u': case 'v': case 'w': case 'x': case 'y':
case 'z':
case 'A': case 'B': case 'C': case 'D': case 'E':
case 'F': case 'G': case 'H': case 'I': case 'J':
case 'K': case 'L': case 'M': case 'N': case 'O':
case 'P': case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X': case 'Y':
case 'Z':
case '_': case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if (p < buf + sizeof buf - 1)
*p++ = c;
break;
case '"':
state = 3;
break;
@ -281,6 +253,11 @@ s_gettok()
}
break;
default:
if (isalnum(c) || c == '_' || c == '.') {
if (p < buf + sizeof buf - 1)
*p++ = c;
break;
}
(void) s_ungetc(c);
case EOF:
*p = 0;

View file

@ -258,7 +258,7 @@ char *wwib; /* input (keyboard) buffer */
char *wwibe; /* wwib + sizeof buffer */
char *wwibp; /* current read position in buffer */
char *wwibq; /* current write position in buffer */
#define wwmaskc(c) ((c) & 0x7f)
#define wwmaskc(c) ((c) & 0xff)
#define wwgetc() (wwibp < wwibq ? wwmaskc(*wwibp++) : -1)
#define wwpeekc() (wwibp < wwibq ? wwmaskc(*wwibp) : -1)
#define wwungetc(c) (wwibp > wwib ? *--wwibp = (c) : -1)

View file

@ -91,7 +91,10 @@ register struct ww *w;
if (p >= buf + n - 1)
wwputc(ctrl('g'), w);
else
wwputs(unctrl(*p++ = c), w);
if (isctrl(c))
wwputs(unctrl(*p++ = c), w);
else
wwputc(*p++ = c, w);
}
}
*p = 0;
@ -104,6 +107,6 @@ struct ww *w;
{
register i;
for (i = strlen(unctrl(c)); --i >= 0;)
for (i = isctrl(c) ? strlen(unctrl(c)) : 1; --i >= 0;)
(void) wwwrite(w, "\b \b", 3);
}

View file

@ -61,6 +61,7 @@ char *l;
register char *smap;
char touched;
unsigned char *p;
static unsigned char cbuf[2];
if (f->ww_fmap == 0)
return;
@ -78,8 +79,14 @@ char *l;
jj = MIN(w->ww_i.r, f->ww_i.r);
j = w->ww_i.l + where;
while (j < jj && *l)
for (p = unctrl(*l++); j < jj && *p; j++, p++) {
while (j < jj && *l) {
if (isctrl(*l))
p = unctrl(*l);
else {
cbuf[0] = *l;
p = cbuf;
}
for (l++; j < jj && *p; j++, p++) {
/* can't label if not already framed */
if (win[j] & WWM_GLS)
continue;
@ -92,5 +99,6 @@ char *l;
}
fmap[j] |= WWF_LABEL;
}
}
wwtouched[row] = touched;
}