fix color code scanning

This commit is contained in:
Dave Murphy 2014-12-12 09:57:58 +00:00
parent 7d8a27fe14
commit 5fe960fda0

View File

@ -203,8 +203,7 @@ ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) {
do { do {
chr = *(tmp++); chr = *(tmp++);
i++; count++; escapelen++; i++; count++; escapelen++;
int parameter, consumed, assigned; int parameter, assigned, consumed;
bool scanning;
switch (chr) { switch (chr) {
//--------------------------------------- //---------------------------------------
@ -274,12 +273,22 @@ ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) {
//--------------------------------------- //---------------------------------------
case 'm': case 'm':
escapeseq++; escapeseq++;
scanning = true; escapelen--;
if (escapelen == 1) {
escaping = false;
break;
}
do {
if (strchr(escapeseq,';')) {
sscanf(escapeseq,"%d;%n", &parameter, &consumed);
} else {
sscanf(escapeseq,"%dm%n", &parameter, &consumed);
}
// do while doesn't work at -O2
// do {
sscanf(escapeseq,"%d;%n", &parameter, &consumed);
escapeseq += consumed; escapeseq += consumed;
escapelen -= consumed;
if (parameter == 0 ) { if (parameter == 0 ) {
currentConsole->flags |= CONSOLE_COLOR_BRIGHT; currentConsole->flags |= CONSOLE_COLOR_BRIGHT;
@ -295,8 +304,7 @@ ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) {
} else if (parameter >= 40 && parameter <= 47) { // screen color } else if (parameter >= 40 && parameter <= 47) { // screen color
currentConsole->bg = parameter - 40; currentConsole->bg = parameter - 40;
} }
if(escapeseq >= tmp) scanning = false; } while (escapelen > 0);
// } while(scanning);
escaping = false; escaping = false;
break; break;