|
|
@ -1306,23 +1306,18 @@ csiparse(void) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
while(p < csiescseq.buf+csiescseq.len) { |
|
|
|
while(p < csiescseq.buf+csiescseq.len) { |
|
|
|
np = NULL; |
|
|
|
|
|
|
|
v = strtol(p, &np, 10); |
|
|
|
v = strtol(p, &np, 10); |
|
|
|
|
|
|
|
if(np == p) |
|
|
|
|
|
|
|
break; |
|
|
|
if(v == LONG_MAX || v == LONG_MIN) |
|
|
|
if(v == LONG_MAX || v == LONG_MIN) |
|
|
|
v = -1; |
|
|
|
v = -1; |
|
|
|
csiescseq.arg[csiescseq.narg] = v; |
|
|
|
csiescseq.arg[csiescseq.narg++] = v; |
|
|
|
if(np != NULL) |
|
|
|
p = np; |
|
|
|
p = np; |
|
|
|
if(*p != ';' || csiescseq.narg == ESC_ARG_SIZ) |
|
|
|
|
|
|
|
break; |
|
|
|
if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) { |
|
|
|
p++; |
|
|
|
csiescseq.narg++, p++; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
csiescseq.mode = *p; |
|
|
|
|
|
|
|
csiescseq.narg++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
csiescseq.mode = *p; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* for absolute user moves, when decom is set */ |
|
|
|
/* for absolute user moves, when decom is set */ |
|
|
@ -1930,16 +1925,13 @@ strhandle(void) { |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
strparse(void) { |
|
|
|
strparse(void) { |
|
|
|
char *p = strescseq.buf, *np, *sp; |
|
|
|
char *p = strescseq.buf, *sp; |
|
|
|
|
|
|
|
|
|
|
|
strescseq.narg = 0; |
|
|
|
strescseq.buf[strescseq.len] = '\0'; |
|
|
|
np = strtok_r(strescseq.buf, ";", &sp); |
|
|
|
for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) { |
|
|
|
while(p < strescseq.buf+strescseq.len && np != NULL) { |
|
|
|
if(strescseq.narg == STR_ARG_SIZ) |
|
|
|
|
|
|
|
return; |
|
|
|
strescseq.args[strescseq.narg++] = p; |
|
|
|
strescseq.args[strescseq.narg++] = p; |
|
|
|
|
|
|
|
|
|
|
|
np = strtok_r(NULL, ";", &sp); |
|
|
|
|
|
|
|
if(np != NULL) |
|
|
|
|
|
|
|
p = np; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1951,7 +1943,9 @@ strdump(void) { |
|
|
|
printf("ESC%c", strescseq.type); |
|
|
|
printf("ESC%c", strescseq.type); |
|
|
|
for(i = 0; i < strescseq.len; i++) { |
|
|
|
for(i = 0; i < strescseq.len; i++) { |
|
|
|
c = strescseq.buf[i] & 0xff; |
|
|
|
c = strescseq.buf[i] & 0xff; |
|
|
|
if(isprint(c)) { |
|
|
|
if(c == '\0') { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} else if(isprint(c)) { |
|
|
|
putchar(c); |
|
|
|
putchar(c); |
|
|
|
} else if(c == '\n') { |
|
|
|
} else if(c == '\n') { |
|
|
|
printf("(\\n)"); |
|
|
|
printf("(\\n)"); |
|
|
@ -2039,7 +2033,7 @@ tputc(char *c, int len) { |
|
|
|
strhandle(); |
|
|
|
strhandle(); |
|
|
|
break; |
|
|
|
break; |
|
|
|
default: |
|
|
|
default: |
|
|
|
if(strescseq.len + len < sizeof(strescseq.buf)) { |
|
|
|
if(strescseq.len + len < sizeof(strescseq.buf) - 1) { |
|
|
|
memmove(&strescseq.buf[strescseq.len], c, len); |
|
|
|
memmove(&strescseq.buf[strescseq.len], c, len); |
|
|
|
strescseq.len += len; |
|
|
|
strescseq.len += len; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|