void _cdecl kernel_panic (const char* fmt, ...) { disable (); DebugClrScr (0x13); DebugGotoXY (0,0); DebugSetColor (0x17); DebugPuts (sickpc); DebugPuts (disc); va_list args; char buf[1024]; va_start (args, fmt); vsprintf (buf, fmt, args); va_end (args); DebugPrintf ("*** STOP: %s \n\n", buf); for (;;); }
int DebugPrintf (const char* str, ...) { if(!str) return 0; va_list args; size_t i; va_start (args, str); for (i=0; i<strlen(str);i++) { switch (str[i]) { case '%': switch (str[i+1]) { case 'c': { char c = va_arg (args, char); DebugPutc (c); i++; break; } case 's': { int c = (int) va_arg (args, char); char str[32]={0}; itoa_s (c, 16, str); DebugPuts (str); i++; break; } case 'd': case 'i': { int c = va_arg (args, int); char str[32]={0}; itoa_s (c, 10, str); DebugPuts (str); i++; break; } case 'X': case 'x': { int c = va_arg (args, int); char str[32]={0}; itoa_s (c,16,str); DebugPuts (str); i++; break; } default: va_end (args); return 1; } break; default: DebugPutc (str[i]); break; } } va_end (args); }
//! Displays a formatted string int DebugPrintf (const char* str, ...) { if(!str) return 0; va_list args; va_start (args, str); size_t i; for (i=0; i<strlen(str);i++) { switch (str[i]) { case '%': switch (str[i+1]) { /*** characters ***/ case 'c': { char c = va_arg (args, char); DebugPutc (c); i++; // go to next character break; } /*** address of ***/ case 's': { int c = (int&) va_arg (args, char); char str[64]; strcpy (str,(const char*)c); DebugPuts (str); i++; // go to next character break; } /*** integers ***/ case 'd': case 'i': { int c = va_arg (args, int); char str[32]={0}; itoa_s (c, 10, str); DebugPuts (str); i++; // go to next character break; } /*** display in hex ***/ case 'X': case 'x': { int c = va_arg (args, int); char str[32]={0}; itoa_s (c,16,str); DebugPuts (str); i++; // go to next character break; } default: va_end (args); return 1; } break; default: DebugPutc (str[i]); break; } } va_end (args); return i; }