@@ -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: | |||