Browse Source

replace state with separate variables

master
Matthias-Christian Ott 17 years ago
parent
commit
a6efc851b6
1 changed files with 8 additions and 11 deletions
  1. +8
    -11
      std.c

+ 8
- 11
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) {
s &= ~Digit;
if(digit) {
digit = 0;
j++; j++;
} }
break; break;


Loading…
Cancel
Save