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
//---------------------------------------\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", ¶meter, &consumed);\r
+ } else {\r
+ sscanf(escapeseq,"%dm%n", ¶meter, &consumed);\r
+ }\r
\r
-// do while doesn't work at -O2\r
-// do {\r
- sscanf(escapeseq,"%d;%n", ¶meter, &consumed);\r
escapeseq += consumed;\r
+ escapelen -= consumed;\r
\r
if (parameter == 0 ) {\r
currentConsole->flags |= CONSOLE_COLOR_BRIGHT;\r
} 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