aboutsummaryrefslogtreecommitdiff
path: root/src/settings
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2022-09-27 17:03:06 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2022-11-01 16:26:16 +0100
commit980858186149651df5543b6fc99a4f7db0cdd089 (patch)
treed347200b0a562d84df505097651ad0642f207fdd /src/settings
parent39f50e601d395bbd2d78d0147ac530b756da2fff (diff)
downloadjancity-980858186149651df5543b6fc99a4f7db0cdd089.tar.gz
WIP
Diffstat (limited to 'src/settings')
-rw-r--r--src/settings/CMakeLists.txt13
-rw-r--r--src/settings/inc/settings.h36
-rw-r--r--src/settings/ps1/inc/settings/port.h16
-rw-r--r--src/settings/sdl-1.2/inc/settings/port.h15
-rw-r--r--src/settings/src/settings.c48
5 files changed, 128 insertions, 0 deletions
diff --git a/src/settings/CMakeLists.txt b/src/settings/CMakeLists.txt
new file mode 100644
index 0000000..f7442e4
--- /dev/null
+++ b/src/settings/CMakeLists.txt
@@ -0,0 +1,13 @@
+add_library(settings
+ "src/settings.c"
+)
+set(inc "inc")
+
+if(PS1_BUILD)
+ set(inc ${inc} "ps1/inc")
+elseif(SDL1_2_BUILD)
+ set(inc ${inc} "sdl-1.2/inc")
+endif()
+
+target_include_directories(settings PUBLIC ${inc})
+target_link_libraries(settings PUBLIC game peripheral PRIVATE gfx)
diff --git a/src/settings/inc/settings.h b/src/settings/inc/settings.h
new file mode 100644
index 0000000..25e73b9
--- /dev/null
+++ b/src/settings/inc/settings.h
@@ -0,0 +1,36 @@
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+#include <settings/port.h>
+#include <game.h>
+#include <peripheral.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+struct settings
+{
+ short screen_w, screen_h;
+ bool fullscreen;
+ enum peripheral_type periph_type;
+ int pad_i;
+ char name[GAME_PLAYER_NAME_LEN];
+};
+
+struct settings_rt
+{
+ union peripheral *p;
+};
+
+int settings_load_ex(const char *path, struct settings *s);
+int settings_apply(const struct settings *s, const struct settings_rt *r);
+int settings_save_ex(const char *path, const struct settings *s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SETTINGS_H */
diff --git a/src/settings/ps1/inc/settings/port.h b/src/settings/ps1/inc/settings/port.h
new file mode 100644
index 0000000..2792717
--- /dev/null
+++ b/src/settings/ps1/inc/settings/port.h
@@ -0,0 +1,16 @@
+#ifndef SETTINGS_PORT_H
+#define SETTINGS_PORT_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define settings_load(path, s) settings_load_ex("bu00:\\" path, s)
+#define settings_save(path, s) settings_save_ex("bu00:\\" path, s)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SETTINGS_PORT_H */
diff --git a/src/settings/sdl-1.2/inc/settings/port.h b/src/settings/sdl-1.2/inc/settings/port.h
new file mode 100644
index 0000000..6332842
--- /dev/null
+++ b/src/settings/sdl-1.2/inc/settings/port.h
@@ -0,0 +1,15 @@
+#ifndef SETTINGS_PORT_H
+#define SETTINGS_PORT_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define settings_load(...) settings_load_ex(__VA_ARGS__)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SETTINGS_PORT_H */
diff --git a/src/settings/src/settings.c b/src/settings/src/settings.c
new file mode 100644
index 0000000..0427ef8
--- /dev/null
+++ b/src/settings/src/settings.c
@@ -0,0 +1,48 @@
+#include <settings.h>
+#include <gfx.h>
+#include <peripheral.h>
+#include <stdio.h>
+
+int settings_apply(const struct settings *const s,
+ const struct settings_rt *const r)
+{
+ if (gfx_fullscreen_available()
+ && gfx_set_fullscreen(s->screen_w, s->screen_h))
+ return -1;
+
+ const struct peripheral_cfg cfg =
+ {
+ .padn = s->pad_i,
+ .type = s->periph_type
+ };
+
+ peripheral_init(&cfg, r->p);
+ return 0;
+}
+
+int settings_load_ex(const char *const path, struct settings *const s)
+{
+ int ret = -1;
+ FILE *const f = fopen(path, "rb");
+
+ if (!f)
+ goto end;
+
+ ret = 0;
+
+end:
+ if (ret)
+ {
+ *s = (const struct settings)
+ {
+ .name = "Player",
+ };
+
+ gfx_display_size(&s->screen_w, &s->screen_h);
+ }
+
+ if (f)
+ fclose(f);
+
+ return ret;
+}