refactor: pass structs as pointers except for background things

This commit is contained in:
2025-11-08 19:24:14 +01:00
parent 92f010ca70
commit 3b7a550b6a
23 changed files with 418 additions and 450 deletions
+54 -56
View File
@@ -100,31 +100,30 @@ static unsigned int parse_uint(char *arg, char *value) {
return (unsigned int)tmp_value;
}
Parameters args_parse(int argc, char **argv) {
Parameters params;
void args_parse(Parameters *params, int argc, char **argv) {
int i;
char *arg;
char *value;
strlcpy(params.project_path, DATADIR "/default", STR_LEN);
strlcpy(params.config_file, "forge_project.cfg", STR_LEN);
params.hot_reload = false;
params.output = true;
params.output_screen = 0;
params.monitor = false;
params.monitor_screen = 0;
params.windowed = false;
params.base_tempo = 60.0f;
params.demo = false;
params.auto_random = false;
params.video_in.length = 0;
params.video_size = 0;
params.internal_size = 720;
strlcpy(params.state_file, "forge_saved_state.txt", STR_LEN);
params.load_state = true;
params.save_state = true;
params.trace_midi = false;
params.trace_fps = false;
strncpy(params->project_path, DATADIR "/default", STR_LEN);
strncpy(params->config_file, "forge_project.cfg", STR_LEN);
params->hot_reload = false;
params->output = true;
params->output_screen = 0;
params->monitor = false;
params->monitor_screen = 0;
params->windowed = false;
params->base_tempo = 60.0f;
params->demo = false;
params->auto_random = false;
params->video_in.length = 0;
params->video_size = 0;
params->internal_size = 720;
strncpy(params->state_file, "forge_saved_state.txt", STR_LEN);
params->load_state = true;
params->save_state = true;
params->trace_midi = false;
params->trace_fps = false;
for (i = 1; i < argc; i++) {
arg = argv[i];
@@ -135,76 +134,75 @@ Parameters args_parse(int argc, char **argv) {
puts(PACKAGE " " VERSION);
exit(EXIT_SUCCESS);
} else if (is_arg(arg, "-p") || is_arg(arg, "--project")) {
strlcpy(params.project_path, value, STR_LEN);
strncpy(params->project_path, value, STR_LEN);
} else if (is_arg(arg, "-c") || is_arg(arg, "--config")) {
strlcpy(params.config_file, value, STR_LEN);
strncpy(params->config_file, value, STR_LEN);
} else if (is_arg(arg, "-hr") || is_arg(arg, "--hot-reload")) {
params.hot_reload = true;
params->hot_reload = true;
} else if (is_arg(arg, "-s") || is_arg(arg, "--screen")) {
params.output_screen = parse_uint(arg, value);
params->output_screen = parse_uint(arg, value);
} else if (is_arg(arg, "-m") || is_arg(arg, "--monitor")) {
params.monitor = true;
params.monitor_screen = parse_uint(arg, value);
params->monitor = true;
params->monitor_screen = parse_uint(arg, value);
} else if (is_arg(arg, "-mo") || is_arg(arg, "--monitor-only")) {
params.output = false;
params.monitor = true;
params->output = false;
params->monitor = true;
} else if (is_arg(arg, "-w") || is_arg(arg, "--windowed")) {
params.windowed = true;
params->windowed = true;
} else if (is_arg(arg, "-t") || is_arg(arg, "--tempo")) {
params.base_tempo = (float)parse_uint(arg, value);
params->base_tempo = (float)parse_uint(arg, value);
} else if (is_arg(arg, "-d") || is_arg(arg, "--demo")) {
params.demo = true;
params.load_state = false;
params.save_state = false;
params.auto_random = true;
params->demo = true;
params->load_state = false;
params->save_state = false;
params->auto_random = true;
} else if (is_arg(arg, "-ar") || is_arg(arg, "--auto-random")) {
params.auto_random = true;
params->auto_random = true;
} else if (is_arg(arg, "-nar") || is_arg(arg, "--no-auto-random")) {
params.auto_random = false;
params->auto_random = false;
} else if (is_arg(arg, "-v") || is_arg(arg, "--video-in")) {
if (params.video_in.length == MAX_VIDEO) {
if (params->video_in.length == MAX_VIDEO) {
log_error("maximum video input reached");
exit(EXIT_FAILURE);
}
strlcpy(params.video_in.values[params.video_in.length++], value, STR_LEN);
strncpy(params->video_in.values[params->video_in.length++], value,
STR_LEN);
} else if (is_arg(arg, "-vs") || is_arg(arg, "--video-size")) {
params.video_size = parse_uint(arg, value);
if (params.video_size == 0) {
params->video_size = parse_uint(arg, value);
if (params->video_size == 0) {
invalid_value(arg, value);
}
} else if (is_arg(arg, "-is") || is_arg(arg, "--internal-size")) {
params.internal_size = parse_uint(arg, value);
if (params.internal_size == 0) {
params->internal_size = parse_uint(arg, value);
if (params->internal_size == 0) {
invalid_value(arg, value);
}
} else if (is_arg(arg, "-sf") || is_arg(arg, "--state-file")) {
strlcpy(params.state_file, value, STR_LEN);
strncpy(params->state_file, value, STR_LEN);
} else if (is_arg(arg, "-ls") || is_arg(arg, "--load-state")) {
params.load_state = true;
params->load_state = true;
} else if (is_arg(arg, "-nls") || is_arg(arg, "--no-load-state")) {
params.load_state = false;
params->load_state = false;
} else if (is_arg(arg, "-ss") || is_arg(arg, "--save-state")) {
params.save_state = true;
params->save_state = true;
} else if (is_arg(arg, "-nss") || is_arg(arg, "--no-save-state")) {
params.save_state = false;
params->save_state = false;
} else if (is_arg(arg, "-tm") || is_arg(arg, "--trace-midi")) {
params.trace_midi = true;
params->trace_midi = true;
} else if (is_arg(arg, "-tf") || is_arg(arg, "--trace-fps")) {
params.trace_fps = true;
params->trace_fps = true;
} else {
invalid_arg(arg);
}
}
if (params.monitor && params.output &&
params.monitor_screen == params.output_screen && !params.windowed) {
if (params->monitor && params->output &&
params->monitor_screen == params->output_screen && !params->windowed) {
log_error("monitor screen cannot be the same as output screen");
exit(EXIT_FAILURE);
}
if (params.video_size == 0) {
params.video_size = params.internal_size;
if (params->video_size == 0) {
params->video_size = params->internal_size;
}
return params;
}