summary refs log tree commit diff stats
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rwxr-xr-xgui/build_script.sh16
-rw-r--r--gui/radio-receiver.c80
2 files changed, 96 insertions, 0 deletions
diff --git a/gui/build_script.sh b/gui/build_script.sh
new file mode 100755
index 0000000..5d7c649
--- /dev/null
+++ b/gui/build_script.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+s_EXPORTED_FUNCTIONS="-s EXPORTED_FUNCTIONS=_init,_render"
+
+shared_flags="-Oz -flto -fno-inline -fno-unroll-loops -mnontrapping-fptoint"
+compile_flags="$shared_flags --std=c23"
+link_flags="$shared_flags -s MALLOC=emmalloc -s ASSERTIONS=0 -s INITIAL_MEMORY=65536 -s TOTAL_STACK=16384 -s STANDALONE_WASM=1 -s PURE_WASI=1 -s STACK_OVERFLOW_CHECK=0 -s WASM_BIGINT=1 -s ABORTING_MALLOC=0 -s MEMORY_GROWTH_GEOMETRIC_STEP=0 -s ALLOW_MEMORY_GROWTH=1"
+
+emcc --no-entry $s_EXPORTED_FUNCTIONS $link_flags $compile_flags -o radio-receiver.wasm radio-receiver.c
+
+mkdir -p ../src/main/resources/assets/pirate-radio/guis
+cp radio-receiver.wasm ../src/main/resources/assets/pirate-radio/guis/radio-receiver.wasm
+
+exit 0
diff --git a/gui/radio-receiver.c b/gui/radio-receiver.c
new file mode 100644
index 0000000..de879a2
--- /dev/null
+++ b/gui/radio-receiver.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+
+enum logger_level : int {
+	LOG_TRACE = 0,
+	LOG_DEBUG = 10,
+	LOG_INFO = 20,
+	LOG_WARN = 30,
+	LOG_ERROR = 40,
+};
+
+[[clang::import_module("logger")]] [[clang::import_name("log")]]
+extern void logger_log(void);
+[[clang::import_module("logger")]] [[clang::import_name("log-message")]]
+extern void logger_log_message(char *message);
+[[clang::import_module("logger")]] [[clang::import_name("add-argument-int")]]
+extern void logger_add_argument_int(int arg);
+[[clang::import_module("logger")]] [[clang::import_name("begin")]]
+extern void logger_log_begin(enum logger_level level);
+
+[[clang::import_module("screen")]] [[clang::import_name("set-background-size")]]
+extern void set_background_size(int width, int height);
+[[clang::import_module("screen")]] [[clang::import_name("set-background-texture-size")]]
+extern void set_background_texture_size(int width, int height);
+
+[[clang::import_module("text")]] [[clang::import_name("free")]]
+extern void text_free(int handle);
+[[clang::import_module("text")]] [[clang::import_name("literal")]]
+extern int text_literal(char *text);
+[[clang::import_module("text")]] [[clang::import_name("translatable")]]
+extern int text_translatable(char *key);
+[[clang::import_module("text")]] [[clang::import_name("translatable-arguments")]]
+extern int text_arguments(char *key, int size, int *args);
+[[clang::import_module("screen")]] [[clang::import_name("render-text-object")]]
+extern void render_text_object(int handle, int x, int y, int color, bool shadow);
+
+enum simulator_mode : int {
+	SIMULATOR_FULL = 0,
+	SIMULATOR_FAST = 1,
+	SIMULATOR_DEAF = 2,
+};
+
+[[clang::import_module("simulator")]] [[clang::import_name("get-mode")]]
+extern enum simulator_mode simulator_get_mode();
+[[clang::import_module("simulator")]] [[clang::import_name("get-volume")]]
+extern int simulator_get_volume();
+[[clang::import_module("simulator")]] [[clang::import_name("get-frequency")]]
+extern int simulator_get_frequency();
+
+[[clang::import_module("screen")]] [[clang::import_name("get-width")]]
+extern int screen_get_width();
+[[clang::import_module("screen")]] [[clang::import_name("get-height")]]
+extern int screen_get_height();
+
+[[clang::import_module("buttons")]] [[clang::import_name("set-dimensions")]]
+extern int buttons_set_dimensions(int button, int x, int y, int width, int height);
+[[clang::import_module("buttons")]] [[clang::import_name("set-base-layout")]]
+extern void buttons_set_base_layout(int layout);
+
+#define BACKGROUND_WIDTH 320
+#define BACKGROUND_HEIGHT 100
+
+void init() {
+	logger_log_begin(LOG_INFO);
+	logger_log_message("placeholder radio skin.");
+	set_background_size(BACKGROUND_WIDTH, BACKGROUND_HEIGHT);
+
+	buttons_set_base_layout(1);
+
+	int width = screen_get_width();
+	int height = screen_get_height();
+	int base_x = (width - BACKGROUND_WIDTH) / 2;
+	int base_y = (height - BACKGROUND_HEIGHT) / 2;
+	buttons_set_dimensions(0, base_x, base_y + 0, 320, 20);
+	buttons_set_dimensions(1, base_x, base_y + 20, 320, 20);
+	buttons_set_dimensions(2, base_x, base_y + 40, 320, 20);
+	buttons_set_dimensions(3, base_x, base_y + 60, 320, 20);
+}
+
+void render(int mouseX, int mouseY, float delta) {
+}