From 5fe960fda09e3477d2101d42e5d623503b13cd1f Mon Sep 17 00:00:00 2001 From: Dave Murphy Date: Fri, 12 Dec 2014 09:57:58 +0000 Subject: [PATCH] fix color code scanning --- libctru/source/console.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/libctru/source/console.c b/libctru/source/console.c index 451fe0c..d2dcd34 100644 --- a/libctru/source/console.c +++ b/libctru/source/console.c @@ -203,8 +203,7 @@ ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) { do { chr = *(tmp++); i++; count++; escapelen++; - int parameter, consumed, assigned; - bool scanning; + int parameter, assigned, consumed; switch (chr) { //--------------------------------------- @@ -274,12 +273,22 @@ ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) { //--------------------------------------- case 'm': escapeseq++; - scanning = true; + escapelen--; + + if (escapelen == 1) { + escaping = false; + break; + } + + do { + if (strchr(escapeseq,';')) { + sscanf(escapeseq,"%d;%n", ¶meter, &consumed); + } else { + sscanf(escapeseq,"%dm%n", ¶meter, &consumed); + } -// do while doesn't work at -O2 -// do { - sscanf(escapeseq,"%d;%n", ¶meter, &consumed); escapeseq += consumed; + escapelen -= consumed; if (parameter == 0 ) { 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 currentConsole->bg = parameter - 40; } - if(escapeseq >= tmp) scanning = false; -// } while(scanning); + } while (escapelen > 0); escaping = false; break;