app layer refactor
This commit is contained in:
parent
dd3427db83
commit
a29c728b92
@ -1,13 +1,9 @@
|
|||||||
Global struct {
|
SharedAppState shared_app_state = ZI;
|
||||||
Arena *arena;
|
|
||||||
String write_path;
|
|
||||||
} G = ZI, DebugAlias(G, G_app);
|
|
||||||
|
|
||||||
/* ========================== *
|
////////////////////////////////
|
||||||
* 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);
|
TempArena scratch = BeginScratch(arena);
|
||||||
|
|
||||||
@ -32,16 +28,16 @@ internal String initialize_write_directory(Arena *arena, String write_dir)
|
|||||||
return write_path;
|
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;
|
__prof;
|
||||||
|
|
||||||
@ -61,26 +57,13 @@ internal P_WindowSettings default_window_settings(P_Window *window)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================== *
|
////////////////////////////////
|
||||||
* Args
|
//~ 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;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* TODO: Remove this and do real argument parsing */
|
/* 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 mode = 0;
|
||||||
i64 i = 0;
|
i64 i = 0;
|
||||||
i64 key_start = -1;
|
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) {
|
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 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));
|
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->key = key;
|
||||||
arg->value = value;
|
arg->value = value;
|
||||||
if (result.last) {
|
if (result.last) {
|
||||||
@ -142,20 +125,20 @@ internal struct app_arg_list parse_args(Arena *arena, String args_str)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================== *
|
////////////////////////////////
|
||||||
* Entry point
|
//~ Entry point
|
||||||
* ========================== */
|
|
||||||
|
|
||||||
void P_AppStartup(String args_str)
|
void P_AppStartup(String args_str)
|
||||||
{
|
{
|
||||||
__prof;
|
__prof;
|
||||||
TempArena scratch = BeginScratchNoConflict();
|
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 logfile_name = Lit("log.log");
|
||||||
String settings_file_name = Lit("settings.txt");
|
String settings_file_name = Lit("settings.txt");
|
||||||
String connect_address = ZI;
|
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 key = arg->key;
|
||||||
String value = arg->value;
|
String value = arg->value;
|
||||||
if (EqString(key, Lit("log"))) {
|
if (EqString(key, Lit("log"))) {
|
||||||
@ -167,14 +150,11 @@ void P_AppStartup(String args_str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(UNUSED)args;
|
(UNUSED)args;
|
||||||
(UNUSED)logfile_name;
|
(UNUSED)logfile_name;
|
||||||
(UNUSED)settings_file_name;
|
(UNUSED)settings_file_name;
|
||||||
(UNUSED)connect_address;
|
(UNUSED)connect_address;
|
||||||
(UNUSED)default_window_settings;
|
(UNUSED)GetDefaultAppWindowSettings;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -188,15 +168,15 @@ void P_AppStartup(String args_str)
|
|||||||
BB_Test();
|
BB_Test();
|
||||||
#endif
|
#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 */
|
/* Startup logging */
|
||||||
{
|
{
|
||||||
TempArena temp = BeginTempArena(scratch.arena);
|
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);
|
String logfile_path = CatString(temp.arena, logfile_dir, logfile_name);
|
||||||
P_MkDir(logfile_dir);
|
P_MkDir(logfile_dir);
|
||||||
|
|
||||||
@ -205,7 +185,7 @@ void P_AppStartup(String args_str)
|
|||||||
EndTempArena(temp);
|
EndTempArena(temp);
|
||||||
}
|
}
|
||||||
P_LogInfoF("App started with args \"%F\" (%F parsed)", FmtString(args_str), FmtUint(args.count));
|
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));
|
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);
|
TempArena temp = BeginTempArena(scratch.arena);
|
||||||
|
|
||||||
P_WindowSettings window_settings = ZI;
|
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));
|
P_LogInfoF("Looking for settings file \"%F\"", FmtString(settings_path));
|
||||||
if (P_IsFile(settings_path)) {
|
if (P_IsFile(settings_path)) {
|
||||||
P_LogInfoF("Settings file found");
|
P_LogInfoF("Settings file found");
|
||||||
@ -243,7 +223,7 @@ void P_AppStartup(String args_str)
|
|||||||
window_settings = *deser;
|
window_settings = *deser;
|
||||||
} else {
|
} else {
|
||||||
P_LogInfoF("Settings file not found, loading default");
|
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));
|
CopyStringToBuffer(StringFromArray(window_settings.title), Lit(WINDOW_TITLE));
|
||||||
P_UpdateWindowSettings(window, &window_settings);
|
P_UpdateWindowSettings(window, &window_settings);
|
||||||
@ -281,7 +261,7 @@ void P_AppStartup(String args_str)
|
|||||||
__profn("Write settings file");
|
__profn("Write settings file");
|
||||||
TempArena temp = BeginTempArena(scratch.arena);
|
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);
|
P_WindowSettings settings = P_GetWindowSettings(window);
|
||||||
String str = settings_serialize(temp.arena, &settings);
|
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