@@ -8,7 +8,7 @@ int main(int argc, char **argv) { | |||||
Arena *arena = arenaAlloc(Megabytes(64)); | Arena *arena = arenaAlloc(Megabytes(64)); | ||||
list<string> args = getArgs(arena, argc, argv); | list<string> args = getArgs(arena, argc, argv); | ||||
prinft("%S", strSplit(arena, "-"_s, "hallo-world"_s)); | |||||
print("%S", strSplit(arena, "-"_s, "hallo-world"_s)); | |||||
return statusCode; | return statusCode; | ||||
} | } |
@@ -383,29 +383,29 @@ string formatTimeYmd(Arena *arena, Timestamp *time) { | |||||
return buf; | return buf; | ||||
} | } | ||||
void logErr(const char *fmt, ...) { | |||||
void printStderr(const char *fmt, ...) { | |||||
va_list argList; | va_list argList; | ||||
va_start(argList, fmt); | va_start(argList, fmt); | ||||
os_log(LogTarget_stdout, fmt, argList); | |||||
os_print(StdStream_stdout, fmt, argList); | |||||
va_end(argList); | va_end(argList); | ||||
} | } | ||||
function void logStdout(const char *fmt, ...) { | |||||
function void printStdout(const char *fmt, ...) { | |||||
va_list argList; | va_list argList; | ||||
va_start(argList, fmt); | va_start(argList, fmt); | ||||
os_log(LogTarget_stdout, fmt, argList); | |||||
os_print(StdStream_stdout, fmt, argList); | |||||
va_end(argList); | va_end(argList); | ||||
} | } | ||||
void log(const char *fmt, ...) { | |||||
void print(const char *fmt, ...) { | |||||
va_list argList; | va_list argList; | ||||
va_start(argList, fmt); | va_start(argList, fmt); | ||||
os_log(LogTarget_stdout, fmt, argList); | |||||
os_print(StdStream_stdout, fmt, argList); | |||||
va_end(argList); | va_end(argList); | ||||
} | } | ||||
void log(list<int> l, LogTarget target) { | |||||
void (*logFn)(const char *fmt, ...) = target == LogTarget_stdout ? &logStdout : &logErr; | |||||
void print(list<int> l, StdStream target) { | |||||
void (*logFn)(const char *fmt, ...) = target == StdStream_stdout ? &printStdout : &printStderr; | |||||
logFn("{ "); | logFn("{ "); | ||||
for (size_t i = 0; i < l.length; i++) { | for (size_t i = 0; i < l.length; i++) { | ||||
if (i != 0) { | if (i != 0) { | ||||
@@ -416,8 +416,8 @@ void log(list<int> l, LogTarget target) { | |||||
logFn(" } length: %zu, head: %zu\n", l.length, l.head); | logFn(" } length: %zu, head: %zu\n", l.length, l.head); | ||||
} | } | ||||
void log(list<string> l, LogTarget target) { | |||||
void (*logFn)(const char *fmt, ...) = target == LogTarget_stdout ? &logStdout : &logErr; | |||||
void print(list<string> l, StdStream target) { | |||||
void (*logFn)(const char *fmt, ...) = target == StdStream_stdout ? &printStdout : &printStderr; | |||||
logFn("{ "); | logFn("{ "); | ||||
for (size_t i = 0; i < l.length; i++) { | for (size_t i = 0; i < l.length; i++) { | ||||
if (i != 0) { | if (i != 0) { | ||||
@@ -201,11 +201,10 @@ string formatTimeYmd(Arena *arena, Timestamp *time); | |||||
// TODO(djledda): implement basic linked lists (based on arenas?) | // TODO(djledda): implement basic linked lists (based on arenas?) | ||||
// ### Logging ### | // ### Logging ### | ||||
enum LogTarget { | |||||
LogTarget_stdout, | |||||
LogTarget_stdin, | |||||
LogTarget_stderr, | |||||
LogTarget_count, | |||||
enum StdStream { | |||||
StdStream_stdout, | |||||
StdStream_stdin, | |||||
StdStream_stderr, | |||||
}; | }; | ||||
#define ANSI_INSTRUCTION_FROM_ENUM(ansiCodeEnum) ANSI_INSTRUCTION(ansiCodeEnum) | #define ANSI_INSTRUCTION_FROM_ENUM(ansiCodeEnum) ANSI_INSTRUCTION(ansiCodeEnum) | ||||
@@ -254,10 +253,10 @@ enum LogTarget { | |||||
#define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET | #define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET | ||||
#define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET | #define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET | ||||
void log(list<int> l, LogTarget target = LogTarget_stdout); | |||||
void log(list<string> l, LogTarget target = LogTarget_stdout); | |||||
void log(const char *fmt, ...); | |||||
void logError(const char *fmt, ...); | |||||
void print(list<int> l, StdStream target = StdStream_stdout); | |||||
void print(list<string> l, StdStream target = StdStream_stdout); | |||||
void print(const char *fmt, ...); | |||||
void printErr(const char *fmt, ...); | |||||
// ### Loops ### | // ### Loops ### | ||||
#define EachIn(list, it) size_t it = 0; it < (list).head; it++ | #define EachIn(list, it) size_t it = 0; it < (list).head; it++ | ||||
@@ -15,6 +15,6 @@ bool os_writeEntireFile(Arena *arena, string filename, const byte *contents, siz | |||||
bool os_fileAppend(Arena *arena, string filename, const byte *contents, size_t contentsLength); | bool os_fileAppend(Arena *arena, string filename, const byte *contents, size_t contentsLength); | ||||
// ### Standard IO ### | // ### Standard IO ### | ||||
void os_log(LogTarget target, const char *fmt, va_list argList); | |||||
void os_print(StdStream target, const char *fmt, va_list argList); | |||||
#endif | #endif |
@@ -72,20 +72,20 @@ bool os_fileAppend(Arena *arena, string filename, const byte *contents, size_t c | |||||
return result; | return result; | ||||
} | } | ||||
void os_log(LogTarget target, const char *fmt, va_list argList) { | |||||
void os_print(StdStream target, const char *fmt, va_list argList) { | |||||
Scratch temp = scratchStart(0, 0); | Scratch temp = scratchStart(0, 0); | ||||
string result = strPrintfv(temp.arena, fmt, argList); | string result = strPrintfv(temp.arena, fmt, argList); | ||||
// TODO(djledda): finish implementation without cstdlib | // TODO(djledda): finish implementation without cstdlib | ||||
switch (target) { | switch (target) { | ||||
case LogTarget_stdin: | |||||
case StdStream_stdin: | |||||
write(0, (const void *)result.str, result.length); | write(0, (const void *)result.str, result.length); | ||||
break; | break; | ||||
case LogTarget_stderr: | |||||
case StdStream_stderr: | |||||
fflush(stderr); | fflush(stderr); | ||||
write(2, (const void *)result.str, result.length); | write(2, (const void *)result.str, result.length); | ||||
break; | break; | ||||
case LogTarget_stdout: | |||||
case StdStream_stdout: | |||||
default: | default: | ||||
fflush(stdout); | fflush(stdout); | ||||
write(1, (const void *)result.str, result.length); | write(1, (const void *)result.str, result.length); | ||||
@@ -66,19 +66,19 @@ bool os_fileAppend(Arena *arena, string filename, const byte *contents, size_t c | |||||
return result; | return result; | ||||
} | } | ||||
function void os_log(LogTarget target, const char *fmt, va_list argList) { | |||||
function void os_print(StdStream target, const char *fmt, va_list argList) { | |||||
Scratch scratch = scratchStart(0, 0); | Scratch scratch = scratchStart(0, 0); | ||||
string result = strPrintfv(scratch.arena, fmt, argList); | string result = strPrintfv(scratch.arena, fmt, argList); | ||||
DWORD done; | DWORD done; | ||||
HANDLE stdHandle; | HANDLE stdHandle; | ||||
switch (target) { | switch (target) { | ||||
case LogTarget_stdin: | |||||
case StdStream_stdin: | |||||
stdHandle = GetStdHandle(STD_INPUT_HANDLE); | stdHandle = GetStdHandle(STD_INPUT_HANDLE); | ||||
break; | break; | ||||
case LogTarget_stdout: | |||||
case StdStream_stdout: | |||||
stdHandle = GetStdHandle(STD_ERROR_HANDLE); | stdHandle = GetStdHandle(STD_ERROR_HANDLE); | ||||
break; | break; | ||||
case LogTarget_stderr: | |||||
case StdStream_stderr: | |||||
stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); | stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); | ||||
break; | break; | ||||
default: | default: | ||||