app layer refactor
This commit is contained in:
parent
dd3427db83
commit
a29c728b92
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user