fixed kprintf
This commit is contained in:
parent
121f492b84
commit
88815452bc
@ -5,7 +5,7 @@
|
|||||||
#if defined(_WIN64) || defined(_WIN32)
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
DWORD unixColorToWin(uint8 c){
|
WORD unixColorToWin(uint8 c){
|
||||||
switch(c){
|
switch(c){
|
||||||
//foreground
|
//foreground
|
||||||
case 30: return 0;
|
case 30: return 0;
|
||||||
@ -49,12 +49,11 @@ DWORD unixColorToWin(uint8 c){
|
|||||||
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;
|
uint32 i=0;
|
||||||
while((c=*format++)){
|
for(char c=format[i++]; c!=0; c=format[i++]){
|
||||||
iteration_start:
|
|
||||||
if(c=='%'){
|
if(c=='%'){
|
||||||
char* argstr=NULL;
|
char* argstr=NULL;
|
||||||
c=*format++;
|
c=format[i++];
|
||||||
format_escape_seq:
|
format_escape_seq:
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'u':
|
case 'u':
|
||||||
@ -67,8 +66,9 @@ void kprintf(const char* format, ...){
|
|||||||
argstr=toString_float(va_arg(vl, float64),0,0);
|
argstr=toString_float(va_arg(vl, float64),0,0);
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
c=*format++;
|
if((c=format[i++]))
|
||||||
goto format_escape_seq;
|
goto format_escape_seq;
|
||||||
|
break;
|
||||||
// switch (c) {
|
// switch (c) {
|
||||||
// case 'u':
|
// case 'u':
|
||||||
// argstr=toString_uint(va_arg(vl, uint64),0,0);
|
// argstr=toString_uint(va_arg(vl, uint64),0,0);
|
||||||
@ -89,7 +89,11 @@ void kprintf(const char* format, ...){
|
|||||||
argstr=toString_hex(&px,sizeof(px),1,0);
|
argstr=toString_hex(&px,sizeof(px),1,0);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
fputs(va_arg(vl,char*), stdout);
|
char* cptr=va_arg(vl,char*);
|
||||||
|
if(!cptr)
|
||||||
|
cptr="<nullstr>";
|
||||||
|
if(*cptr)
|
||||||
|
fputs(cptr, stdout);
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
argstr=malloc(2);
|
argstr=malloc(2);
|
||||||
@ -106,23 +110,22 @@ void kprintf(const char* format, ...){
|
|||||||
} else if(c=='\e'){
|
} else if(c=='\e'){
|
||||||
IFWIN(
|
IFWIN(
|
||||||
({
|
({
|
||||||
if((c=*format++)=='['){
|
if((c=format[i++])=='['){
|
||||||
uint16 colorUnix=0;
|
uint8 colorUnix=0;
|
||||||
for(int8 i=0; i<6 && c!=0; i++){
|
for(int8 n=0; n<6 && c!=0; n++){
|
||||||
c=*format++;
|
c=format[i++];
|
||||||
switch (c){
|
switch (c){
|
||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7': case '8': case '9':
|
case '5': case '6': case '7': case '8': case '9':
|
||||||
colorUnix=colorUnix*10+c-'0';
|
colorUnix=colorUnix*10+c-'0';
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
DWORD colorWin=unixColorToWin(colorUnix);
|
WORD colorWin=unixColorToWin(colorUnix);
|
||||||
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
SetConsoleTextAttribute(hConsole, colorWin);
|
SetConsoleTextAttribute(hConsole, colorWin);
|
||||||
c=*format++;
|
goto end_iteration;
|
||||||
goto iteration_start;
|
|
||||||
default:
|
default:
|
||||||
goto iteration_start;
|
goto end_iteration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,6 +135,9 @@ void kprintf(const char* format, ...){
|
|||||||
} else {
|
} else {
|
||||||
putc(c,stdout);
|
putc(c,stdout);
|
||||||
}
|
}
|
||||||
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
end_iteration:
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
va_end(vl);
|
va_end(vl);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user