app layer refactor

This commit is contained in:
jacob 2025-07-30 16:09:40 -05:00
parent dd3427db83
commit a29c728b92
2 changed files with 69 additions and 49 deletions

View File

@ -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);

View File

@ -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);