From a29c728b9248b51cbd4cc2a1c9e02666e8c2371e Mon Sep 17 00:00:00 2001 From: jacob Date: Wed, 30 Jul 2025 16:09:40 -0500 Subject: [PATCH] app layer refactor --- src/app/app_core.c | 76 +++++++++++++++++----------------------------- src/app/app_core.h | 42 ++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 49 deletions(-) diff --git a/src/app/app_core.c b/src/app/app_core.c index 651f0d88..4d8b353e 100644 --- a/src/app/app_core.c +++ b/src/app/app_core.c @@ -1,13 +1,9 @@ -Global struct { - Arena *arena; - String write_path; -} G = ZI, DebugAlias(G, G_app); +SharedAppState shared_app_state = ZI; -/* ========================== * - * Write directory - * ========================== */ +//////////////////////////////// +//~ Write directory -internal String initialize_write_directory(Arena *arena, String write_dir) +String InitializeAppWriteDirectory(Arena *arena, String write_dir) { TempArena scratch = BeginScratch(arena); @@ -32,16 +28,16 @@ internal String initialize_write_directory(Arena *arena, String write_dir) return write_path; } -String app_write_path_cat(Arena *arena, String filename) +String CatAppWritePath(Arena *arena, String filename) { - return CatString(arena, G.write_path, filename); + SharedAppState *g = &shared_app_state; + return CatString(arena, g->write_path, filename); } -/* ========================== * - * Default settings - * ========================== */ +//////////////////////////////// +//~ Default settings -internal P_WindowSettings default_window_settings(P_Window *window) +P_WindowSettings GetDefaultAppWindowSettings(P_Window *window) { __prof; @@ -61,26 +57,13 @@ internal P_WindowSettings default_window_settings(P_Window *window) }; } -/* ========================== * - * Args - * ========================== */ - -struct app_arg { - String key; - String value; - struct app_arg *next; -}; - -struct app_arg_list { - struct app_arg *first; - struct app_arg *last; - u64 count; -}; +//////////////////////////////// +//~ Args /* TODO: Remove this and do real argument parsing */ -internal struct app_arg_list parse_args(Arena *arena, String args_str) +AppArgList ParseAppArgs(Arena *arena, String args_str) { - struct app_arg_list result = ZI; + AppArgList result = ZI; i64 mode = 0; i64 i = 0; i64 key_start = -1; @@ -120,7 +103,7 @@ internal struct app_arg_list parse_args(Arena *arena, String args_str) if (key_start >= 0 && key_end > key_start && key_end <= (i64)args_str.len && value_start >= 0 && value_end > value_start && value_end <= (i64)args_str.len) { String key = CopyString(arena, STRING(key_end - key_start, args_str.text + key_start)); String value = CopyString(arena, STRING(value_end - value_start, args_str.text + value_start)); - struct app_arg *arg = PushStruct(arena, struct app_arg); + AppArg *arg = PushStruct(arena, AppArg); arg->key = key; arg->value = value; if (result.last) { @@ -142,20 +125,20 @@ internal struct app_arg_list parse_args(Arena *arena, String args_str) return result; } -/* ========================== * - * Entry point - * ========================== */ +//////////////////////////////// +//~ Entry point void P_AppStartup(String args_str) { __prof; TempArena scratch = BeginScratchNoConflict(); + SharedAppState *g = &shared_app_state; - struct app_arg_list args = parse_args(scratch.arena, args_str); + AppArgList args = ParseAppArgs(scratch.arena, args_str); String logfile_name = Lit("log.log"); String settings_file_name = Lit("settings.txt"); String connect_address = ZI; - for (struct app_arg *arg = args.first; arg; arg = arg->next) { + for (AppArg *arg = args.first; arg; arg = arg->next) { String key = arg->key; String value = arg->value; if (EqString(key, Lit("log"))) { @@ -167,14 +150,11 @@ void P_AppStartup(String args_str) } } - - - (UNUSED)args; (UNUSED)logfile_name; (UNUSED)settings_file_name; (UNUSED)connect_address; - (UNUSED)default_window_settings; + (UNUSED)GetDefaultAppWindowSettings; @@ -188,15 +168,15 @@ void P_AppStartup(String args_str) BB_Test(); #endif - G.arena = AllocArena(Gibi(64)); + g->arena = AllocArena(Gibi(64)); - G.write_path = initialize_write_directory(G.arena, Lit(WRITE_DIR)); + g->write_path = InitializeAppWriteDirectory(g->arena, Lit(WRITE_DIR)); /* Startup logging */ { TempArena temp = BeginTempArena(scratch.arena); - String logfile_dir = CatString(temp.arena, G.write_path, Lit("logs/")); + String logfile_dir = CatString(temp.arena, g->write_path, Lit("logs/")); String logfile_path = CatString(temp.arena, logfile_dir, logfile_name); P_MkDir(logfile_dir); @@ -205,7 +185,7 @@ void P_AppStartup(String args_str) EndTempArena(temp); } P_LogInfoF("App started with args \"%F\" (%F parsed)", FmtString(args_str), FmtUint(args.count)); - for (struct app_arg *arg = args.first; arg; arg = arg->next) { + for (AppArg *arg = args.first; arg; arg = arg->next) { P_LogInfoF("Parsed arg: key = \"%F\", value = \"%F\"", FmtString(arg->key), FmtString(arg->value)); } @@ -215,7 +195,7 @@ void P_AppStartup(String args_str) TempArena temp = BeginTempArena(scratch.arena); P_WindowSettings window_settings = ZI; - String settings_path = app_write_path_cat(temp.arena, settings_file_name); + String settings_path = CatAppWritePath(temp.arena, settings_file_name); P_LogInfoF("Looking for settings file \"%F\"", FmtString(settings_path)); if (P_IsFile(settings_path)) { P_LogInfoF("Settings file found"); @@ -243,7 +223,7 @@ void P_AppStartup(String args_str) window_settings = *deser; } else { P_LogInfoF("Settings file not found, loading default"); - window_settings = default_window_settings(window); + window_settings = GetDefaultAppWindowSettings(window); } CopyStringToBuffer(StringFromArray(window_settings.title), Lit(WINDOW_TITLE)); P_UpdateWindowSettings(window, &window_settings); @@ -281,7 +261,7 @@ void P_AppStartup(String args_str) __profn("Write settings file"); TempArena temp = BeginTempArena(scratch.arena); - String window_settings_path = app_write_path_cat(temp.arena, settings_file_name); + String window_settings_path = CatAppWritePath(temp.arena, settings_file_name); P_WindowSettings settings = P_GetWindowSettings(window); String str = settings_serialize(temp.arena, &settings); diff --git a/src/app/app_core.h b/src/app/app_core.h index b097943f..9ee86e14 100644 --- a/src/app/app_core.h +++ b/src/app/app_core.h @@ -1 +1,41 @@ -String app_write_path_cat(Arena *arena, String filename); +//////////////////////////////// +//~ App arg types + +Struct(AppArg) +{ + String key; + String value; + AppArg *next; +}; + +Struct(AppArgList) +{ + AppArg *first; + AppArg *last; + u64 count; +}; + +//////////////////////////////// +//~ Shared state + +Struct(SharedAppState) +{ + Arena *arena; + String write_path; +}; + +extern SharedAppState shared_app_state; + +//////////////////////////////// +//~ App functions + +//- Write path +String InitializeAppWriteDirectory(Arena *arena, String write_dir); +String CatAppWritePath(Arena *arena, String filename); + +//- Default window settings +P_WindowSettings GetDefaultAppWindowSettings(P_Window *window); + +//- App args + +AppArgList ParseAppArgs(Arena *arena, String args_str);