kprintf color parse
This commit is contained in:
parent
4785023126
commit
121f492b84
@ -139,13 +139,13 @@ void kprint_setColor(kprint_format f){
|
|||||||
uint8 fg=(f&0x0f000000)>>24;
|
uint8 fg=(f&0x0f000000)>>24;
|
||||||
if(fg<8) fg+=30;
|
if(fg<8) fg+=30;
|
||||||
else fg+=90-8;
|
else fg+=90-8;
|
||||||
kprintf("\e[%um", fg);
|
printf("\e[%um", fg);
|
||||||
}
|
}
|
||||||
if(kprint_format_bgColorChanged(f)){
|
if(kprint_format_bgColorChanged(f)){
|
||||||
uint8 bg=(f&0x00f00000)>>20;
|
uint8 bg=(f&0x00f00000)>>20;
|
||||||
if(bg<8) bg+=40;
|
if(bg<8) bg+=40;
|
||||||
else bg+=100-8;
|
else bg+=100-8;
|
||||||
kprintf("\e[%um", bg);
|
printf("\e[%um", bg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -2,11 +2,56 @@
|
|||||||
#include "../base/base.h"
|
#include "../base/base.h"
|
||||||
#include "../base/type_system/base_toString.h"
|
#include "../base/type_system/base_toString.h"
|
||||||
|
|
||||||
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
DWORD unixColorToWin(uint8 c){
|
||||||
|
switch(c){
|
||||||
|
//foreground
|
||||||
|
case 30: return 0;
|
||||||
|
case 31: return FOREGROUND_RED;
|
||||||
|
case 32: return FOREGROUND_GREEN;
|
||||||
|
case 33: return FOREGROUND_GREEN | FOREGROUND_RED;
|
||||||
|
case 34: return FOREGROUND_BLUE;
|
||||||
|
case 35: return FOREGROUND_RED | FOREGROUND_BLUE;
|
||||||
|
case 36: return FOREGROUND_BLUE | FOREGROUND_GREEN;
|
||||||
|
case 37: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
|
||||||
|
case 90: return FOREGROUND_INTENSITY;
|
||||||
|
case 91: return FOREGROUND_RED | FOREGROUND_INTENSITY;
|
||||||
|
case 92: return FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||||
|
case 93: return FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY;
|
||||||
|
case 94: return FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||||
|
case 95: return FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY;
|
||||||
|
case 96: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||||
|
case 97: return FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||||
|
//background
|
||||||
|
case 40: return 0;
|
||||||
|
case 41: return BACKGROUND_RED;
|
||||||
|
case 42: return BACKGROUND_GREEN;
|
||||||
|
case 43: return BACKGROUND_GREEN | BACKGROUND_RED;
|
||||||
|
case 44: return BACKGROUND_BLUE;
|
||||||
|
case 45: return BACKGROUND_RED | BACKGROUND_BLUE;
|
||||||
|
case 46: return BACKGROUND_BLUE | BACKGROUND_GREEN;
|
||||||
|
case 47: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;
|
||||||
|
case 100: return BACKGROUND_INTENSITY;
|
||||||
|
case 101: return BACKGROUND_RED | BACKGROUND_INTENSITY;
|
||||||
|
case 102: return BACKGROUND_GREEN | BACKGROUND_INTENSITY;
|
||||||
|
case 103: return BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY;
|
||||||
|
case 104: return BACKGROUND_BLUE | BACKGROUND_INTENSITY;
|
||||||
|
case 105: return BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY;
|
||||||
|
case 106: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
|
||||||
|
case 107: return BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void kprintf(const char* format, ...){
|
void kprintf(const char* format, ...){
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, format);
|
va_start(vl, format);
|
||||||
char c;
|
char c;
|
||||||
while((c=*format++)){
|
while((c=*format++)){
|
||||||
|
iteration_start:
|
||||||
if(c=='%'){
|
if(c=='%'){
|
||||||
char* argstr=NULL;
|
char* argstr=NULL;
|
||||||
c=*format++;
|
c=*format++;
|
||||||
@ -48,7 +93,7 @@ void kprintf(const char* format, ...){
|
|||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
argstr=malloc(2);
|
argstr=malloc(2);
|
||||||
argstr[0]=va_arg(vl,char);
|
argstr[0]=(char)va_arg(vl,int);
|
||||||
argstr[1]=0;
|
argstr[1]=0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -61,10 +106,29 @@ void kprintf(const char* format, ...){
|
|||||||
} else if(c=='\e'){
|
} else if(c=='\e'){
|
||||||
IFWIN(
|
IFWIN(
|
||||||
({
|
({
|
||||||
|
if((c=*format++)=='['){
|
||||||
|
uint16 colorUnix=0;
|
||||||
|
for(int8 i=0; i<6 && c!=0; i++){
|
||||||
|
c=*format++;
|
||||||
|
switch (c){
|
||||||
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
|
colorUnix=colorUnix*10+c-'0';
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
DWORD colorWin=unixColorToWin(colorUnix);
|
||||||
|
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
SetConsoleTextAttribute(hConsole, colorWin);
|
||||||
|
c=*format++;
|
||||||
|
goto iteration_start;
|
||||||
|
default:
|
||||||
|
goto iteration_start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
putc(c,stdout);
|
putc(c,stdout);
|
||||||
)
|
);
|
||||||
} else {
|
} else {
|
||||||
putc(c,stdout);
|
putc(c,stdout);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,9 +19,7 @@ int main(){
|
|||||||
ktDescriptors_initKerepTypes();
|
ktDescriptors_initKerepTypes();
|
||||||
ktDescriptors_endInit();
|
ktDescriptors_endInit();
|
||||||
kprintf("\e[97mkerep tests are starting!\n");
|
kprintf("\e[97mkerep tests are starting!\n");
|
||||||
// optime("test_all",1,test_all());
|
optime("test_all",1,test_all());
|
||||||
test_rng_algorithms();
|
|
||||||
test_kprint_colors();
|
|
||||||
ktDescriptors_free();
|
ktDescriptors_free();
|
||||||
kprintf("\e[0m\n");
|
kprintf("\e[0m\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user