| @@ -8,7 +8,7 @@ int main(int argc, char **argv) { | |||
| Arena *arena = arenaAlloc(Megabytes(64)); | |||
| 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; | |||
| } | |||
| @@ -383,29 +383,29 @@ string formatTimeYmd(Arena *arena, Timestamp *time) { | |||
| return buf; | |||
| } | |||
| void logErr(const char *fmt, ...) { | |||
| void printStderr(const char *fmt, ...) { | |||
| va_list argList; | |||
| va_start(argList, fmt); | |||
| os_log(LogTarget_stdout, fmt, argList); | |||
| os_print(StdStream_stdout, fmt, argList); | |||
| va_end(argList); | |||
| } | |||
| function void logStdout(const char *fmt, ...) { | |||
| function void printStdout(const char *fmt, ...) { | |||
| va_list argList; | |||
| va_start(argList, fmt); | |||
| os_log(LogTarget_stdout, fmt, argList); | |||
| os_print(StdStream_stdout, fmt, argList); | |||
| va_end(argList); | |||
| } | |||
| void log(const char *fmt, ...) { | |||
| void print(const char *fmt, ...) { | |||
| va_list argList; | |||
| va_start(argList, fmt); | |||
| os_log(LogTarget_stdout, fmt, argList); | |||
| os_print(StdStream_stdout, fmt, 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("{ "); | |||
| for (size_t i = 0; i < l.length; i++) { | |||
| if (i != 0) { | |||
| @@ -416,8 +416,8 @@ void log(list<int> l, LogTarget target) { | |||
| 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("{ "); | |||
| for (size_t i = 0; i < l.length; i++) { | |||
| if (i != 0) { | |||
| @@ -201,11 +201,10 @@ string formatTimeYmd(Arena *arena, Timestamp *time); | |||
| // TODO(djledda): implement basic linked lists (based on arenas?) | |||
| // ### 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) | |||
| @@ -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_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 ### | |||
| #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); | |||
| // ### 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 | |||
| @@ -72,20 +72,20 @@ bool os_fileAppend(Arena *arena, string filename, const byte *contents, size_t c | |||
| 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); | |||
| string result = strPrintfv(temp.arena, fmt, argList); | |||
| // TODO(djledda): finish implementation without cstdlib | |||
| switch (target) { | |||
| case LogTarget_stdin: | |||
| case StdStream_stdin: | |||
| write(0, (const void *)result.str, result.length); | |||
| break; | |||
| case LogTarget_stderr: | |||
| case StdStream_stderr: | |||
| fflush(stderr); | |||
| write(2, (const void *)result.str, result.length); | |||
| break; | |||
| case LogTarget_stdout: | |||
| case StdStream_stdout: | |||
| default: | |||
| fflush(stdout); | |||
| 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; | |||
| } | |||
| 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); | |||
| string result = strPrintfv(scratch.arena, fmt, argList); | |||
| DWORD done; | |||
| HANDLE stdHandle; | |||
| switch (target) { | |||
| case LogTarget_stdin: | |||
| case StdStream_stdin: | |||
| stdHandle = GetStdHandle(STD_INPUT_HANDLE); | |||
| break; | |||
| case LogTarget_stdout: | |||
| case StdStream_stdout: | |||
| stdHandle = GetStdHandle(STD_ERROR_HANDLE); | |||
| break; | |||
| case LogTarget_stderr: | |||
| case StdStream_stderr: | |||
| stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); | |||
| break; | |||
| default: | |||