8 #include <acess_logging.h>
11 #define LOGHDR(col,type) fprintf(stderr, "\e["col"m[%-8.8s]"type" ", Ident)
12 #define LOGTAIL() fprintf(stderr, "\e[0m\n")
14 #define PUTERR(col,type) {\
16 va_list args; va_start(args, Message);\
17 vfprintf(stderr, Message, args);\
23 void Log_KernelPanic(const char *Ident, const char *Message, ...) {
27 void Log_Panic(const char *Ident, const char *Message, ...)
29 void Log_Error(const char *Ident, const char *Message, ...)
31 void Log_Warning(const char *Ident, const char *Message, ...)
33 void Log_Notice(const char *Ident, const char *Message, ...)
35 void Log_Log(const char *Ident, const char *Message, ...)
37 void Log_Debug(const char *Ident, const char *Message, ...)
40 void Warning(const char *Message, ...) {
41 const char *Ident = "";
44 void Log(const char *Message, ...) {
45 const char *Ident = "";
49 void Debug_HexDump(const char *Prefix, const void *Data, size_t Length)
51 const uint8_t *data = Data;
53 fprintf(stderr, "[HexDump ]d %s: %i bytes\n", Prefix, (int)Length);
54 for( ofs = 0; ofs + 16 <= Length; ofs += 16 )
56 fprintf(stderr, "[HexDump ]d %s:", Prefix);
57 fprintf(stderr, " %02x %02x %02x %02x %02x %02x %02x %02x",
58 data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
60 fprintf(stderr, " %02x %02x %02x %02x %02x %02x %02x %02x",
61 data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
63 fprintf(stderr, "\n");
66 fprintf(stderr, "[HexDump ]d %s:", Prefix);
67 for( ; ofs < Length; ofs ++ )
69 if( ofs % 16 == 8 ) fprintf(stderr, " ");
70 fprintf(stderr, " %02x", data[ofs%16]);
72 fprintf(stderr, "\n");
75 int giDebug_TraceLevel = 0;
77 void Debug_TraceEnter(const char *Function, const char *Format, ...)
79 const char *Ident = "Trace";
81 for( int i = 0; i < giDebug_TraceLevel; i ++ )
83 fprintf(stderr, "%s: (", Function);
86 va_start(args, Format);
91 while( *Format && isblank(*Format) )
95 char type = *Format++;
96 const char *start = Format;
97 while( *Format && !isblank(*Format) )
101 fprintf(stderr, ",");
104 fprintf(stderr, "%.*s=", (int)(Format-start), start);
108 fprintf(stderr, "%p", va_arg(args,const void *));
111 fprintf(stderr, "\"%s\"", va_arg(args,const char *));
114 fprintf(stderr, "%i", va_arg(args,int));
117 fprintf(stderr, "0x%x", va_arg(args,unsigned int));
120 va_arg(args,uintptr_t);
121 fprintf(stderr, "?");
128 fprintf(stderr, ")");
130 giDebug_TraceLevel ++;
133 void Debug_TraceLog(const char *Function, const char *Format, ...)
135 const char *Ident = "Trace";
138 for( int i = 0; i < giDebug_TraceLevel; i ++ )
139 fprintf(stderr, " ");
140 fprintf(stderr, "%s: ", Function);
143 va_start(args, Format);
145 vfprintf(stderr, Format, args);
151 void Debug_TraceLeave(const char *Function, char Type, ...)
153 if( giDebug_TraceLevel == 0 ) {
154 Log_Error("Debug", "Function %s called LEAVE without ENTER", Function);
157 const char *Ident = "Trace";
161 va_start(args, Type);
163 if( giDebug_TraceLevel > 0 )
165 giDebug_TraceLevel --;
166 for( int i = 0; i < giDebug_TraceLevel; i ++ )
167 fprintf(stderr, " ");
169 fprintf(stderr, "%s: RETURN", Function);
175 fprintf(stderr, " %i", va_arg(args, int));
178 fprintf(stderr, " 0x%x", va_arg(args, unsigned int));
181 fprintf(stderr, " \"%s\"", va_arg(args, const char *));
184 fprintf(stderr, " %p", va_arg(args, const void *));
187 fprintf(stderr, " ?");