replace state with separate variables

This commit is contained in:
Matthias-Christian Ott 2008-06-08 20:47:08 +02:00
parent 50b4785f26
commit a6efc851b6
1 changed files with 8 additions and 11 deletions

19
std.c
View File

@ -31,8 +31,6 @@ void shell(void);
void sigchld(int n); void sigchld(int n);
char unbuffer(void); char unbuffer(void);
enum { QuestionMark = 1, Digit = 2 };
typedef struct { typedef struct {
unsigned char data[BUFSIZ]; unsigned char data[BUFSIZ];
int s, e; int s, e;
@ -41,10 +39,10 @@ typedef struct {
int cols = 80, lines = 25; int cols = 80, lines = 25;
int cx = 0, cy = 0; int cx = 0, cy = 0;
int c, s; int c;
FILE *fptm = NULL; FILE *fptm = NULL;
int ptm, pts; int ptm, pts;
_Bool bold; _Bool bold, digit, qmark;
pid_t pid; pid_t pid;
RingBuffer buf; RingBuffer buf;
@ -151,28 +149,27 @@ parseesc(void) {
int arg[16]; int arg[16];
memset(arg, 0, LENGTH(arg)); memset(arg, 0, LENGTH(arg));
s = 0;
c = getc(fptm); c = getc(fptm);
switch(c) { switch(c) {
case '[': case '[':
c = getc(fptm); c = getc(fptm);
for(j = 0; j < LENGTH(arg);) { for(j = 0; j < LENGTH(arg);) {
if(isdigit(c)) { if(isdigit(c)) {
s |= Digit; digit = 1;
arg[j] *= 10; arg[j] *= 10;
arg[j] += c - '0'; arg[j] += c - '0';
} }
else if(c == '?') else if(c == '?')
s |= QuestionMark; qmark = 1;
else if(c == ';') { else if(c == ';') {
if(!(s & Digit)) if(!digit)
eprint("syntax error\n"); eprint("syntax error\n");
s &= ~Digit; digit = 0;
j++; j++;
} }
else { else {
if(s & Digit) { if(digit) {
s &= ~Digit; digit = 0;
j++; j++;
} }
break; break;