]> Chaos Git - corbenik/ctrulib.git/commitdiff
fix color code scanning
authorDave Murphy <davem@devkitpro.org>
Fri, 12 Dec 2014 09:57:58 +0000 (09:57 +0000)
committerDave Murphy <davem@devkitpro.org>
Fri, 12 Dec 2014 09:58:14 +0000 (09:58 +0000)
libctru/source/console.c

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