#include #include #include #include extern uint8* VideoPtr; extern UPoint ConsoleCursor; extern UPoint ConsoleSize; extern uint8 ConsoleDefaultColor; /************************************** * Write operations* **************************************/ void _write_char(char c) { switch (c) { case '\n': ConsoleCursorNewline(); break; case '\r': ConsoleCursor.X = 0; break; case '\t': ConsoleCursorIncreasePos(6 - ConsoleCursor.X % 6); break; case '\b': ConsoleCursorIncreasePos(-1); VideoPtr[2 * (ConsoleCursor.Y * ConsoleSize.X + ConsoleCursor.X)] = 0; break; default: VideoPtr[2 * (ConsoleCursor.Y * ConsoleSize.X + ConsoleCursor.X)] = c; VideoPtr[2 * (ConsoleCursor.Y * ConsoleSize.X + ConsoleCursor.X) + 1] = ConsoleDefaultColor; ConsoleCursorIncreasePos(1); break; } } void _write_string (string s) { int32 len = strlen(s), i; for (i = 0; i < len; i++) _write_char(s[i]); } void ConsoleWriteChar (char c) { _write_char(c); ConsoleCursorUpdateHardware(); } void ConsoleWriteString (string s) { _write_string(s); ConsoleCursorUpdateHardware(); } int32 ConsoleWrite (string format, ...) { if (!format || !*format) return 0; va_list args; va_start (args, format); uint32 i, len = strlen(format); uint8 temp_color = ConsoleDefaultColor; for (i = 0; i < len; i++) if (format[i] != '%') _write_char(format[i]); else { ++i; switch (format[i]) { // Character case 'c': { char c = va_arg (args, char); _write_char(c); break; } // String case 's': { int32* c = (int32*) va_arg (args, string); _write_string((string)c); break; } // Integers case 'd': case 'i': { int32 c = va_arg(args, int32); char temp[32]; ConvertIntToString(temp, c, 10); _write_string(temp); break; } // Integers - hex case 'X': case 'x': { int32 c = va_arg(args, int32); char temp[32]; ConvertUIntToString(temp, c, 16); _write_string(temp); break; } // Integers - unsigned case 'u': { int32 c = va_arg(args, uint32); char temp[32]; ConvertUIntToString (temp, c, 10); _write_string(temp); break; } // Colors case '#': { uint8 c = va_arg(args, uint8); ConsoleDefaultColor = c; break; } default: va_end(args); return 1; }; } va_end(args); ConsoleDefaultColor = temp_color; ConsoleCursorUpdateHardware(); return i; } void ConsoleSetChar(Point pos, char c) { VideoPtr[2 * (pos.Y * ConsoleSize.X + pos.X)] = c; } void ConsoleSetColor(Point pos, uint8 color) { VideoPtr[2 * (pos.Y * ConsoleSize.X + pos.X) + 1] = color; } char ConsoleGetChar(Point pos) { return (char)VideoPtr[2 * (pos.Y * ConsoleSize.X + pos.X)]; } uint8 ConsoleGetColor (Point pos) { return VideoPtr[2 * (pos.Y * ConsoleSize.X + pos.X) + 1]; }