summaryrefslogtreecommitdiff
path: root/reduced_system_layer.c
diff options
context:
space:
mode:
Diffstat (limited to 'reduced_system_layer.c')
-rwxr-xr-xreduced_system_layer.c66
1 files changed, 35 insertions, 31 deletions
diff --git a/reduced_system_layer.c b/reduced_system_layer.c
index 19c8a0c..5ddd3ab 100755
--- a/reduced_system_layer.c
+++ b/reduced_system_layer.c
@@ -102,17 +102,6 @@ typedef double f64;
#ifndef REDUCED_SYSTEM_LAYER_HEADER_GUARD_
#define REDUCED_SYSTEM_LAYER_HEADER_GUARD_
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <time.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
// ================================================================
//
// PLATFORM API
@@ -232,6 +221,8 @@ void p_render_frame(void);
// User-defined proc
void p_frame(void);
+void p_event_loop(void);
+
// Clipboard
void p_clipboard_write(i64 size, c8 *data);
@@ -245,6 +236,10 @@ i64 p_send(u16 slot, IP_Address address, i64 size, u8 *data, u16 *local_port);
extern Platform platform;
+#ifdef __wasm__
+i32 main(i32 argc, c8 **argv);
+#endif
+
#ifdef __cplusplus
}
#endif
@@ -292,13 +287,8 @@ i32 main(i32 argc, c8 **argv) {
.frame_height = 720,
};
- p_init();
-
- while (!platform.done) {
- p_frame();
- }
+ p_event_loop();
- p_cleanup();
return 0;
}
@@ -316,6 +306,12 @@ i32 main(i32 argc, c8 **argv) {
Platform platform = {0};
+void p_event_loop(void) {
+ p_init();
+ while (!platform.done) p_frame();
+ p_cleanup();
+}
+
// ================================================================
//
// Utilities
@@ -394,8 +390,13 @@ i32 utf8_write(c32 c, c8 *buffer) {
//
// ================================================================
-#ifdef __unix__
+#if defined(__unix__)
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <time.h>
#include <sched.h>
#include <unistd.h>
@@ -424,7 +425,7 @@ void p_sleep_for(i64 duration) {
usleep((duration % 1000) * 1000);
}
-#endif
+#endif // defined(__unix__)
// ================================================================
//
@@ -432,8 +433,11 @@ void p_sleep_for(i64 duration) {
//
// ================================================================
-#ifdef __unix__
+#if defined(__unix__)
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
#include <errno.h>
#include <signal.h>
#include <netinet/in.h>
@@ -651,7 +655,7 @@ i64 p_send(u16 slot, IP_Address address, i64 size, u8 *data, u16 *local_port) {
return sent;
}
-#endif
+#endif // defined(__unix__)
// ================================================================
//
@@ -659,7 +663,7 @@ i64 p_send(u16 slot, IP_Address address, i64 size, u8 *data, u16 *local_port) {
//
// ================================================================
-#ifdef __linux__
+#if defined(__linux__)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -1169,7 +1173,7 @@ void p_clipboard_write(i64 size, c8 *data) {
memcpy(platform.clipboard, data, platform.clipboard_size);
}
-#endif
+#endif // defined(__linux__)
// ================================================================
//
@@ -1177,7 +1181,7 @@ void p_clipboard_write(i64 size, c8 *data) {
//
// ================================================================
-#ifdef __linux__
+#if defined(__linux__)
void p_handle_audio(i64 time_elapsed) {
(void) time_elapsed;
@@ -1191,7 +1195,7 @@ void p_queue_sound(i64 delay, i64 num_samples, f32 *samples) {
assert(0);
}
-#endif
+#endif // defined(__linux__)
// ================================================================
//
@@ -1199,7 +1203,7 @@ void p_queue_sound(i64 delay, i64 num_samples, f32 *samples) {
//
// ================================================================
-#ifdef __EMSCRIPTEN__
+#ifdef __wasm__
static u32 _buffer[MAX_NUM_PIXELS] = {0};
@@ -1214,27 +1218,27 @@ void p_render_frame(void) {
p_render_frame_impl();
}
-void js_main(c8 *href) {
+__attribute__((export_name("js_main"))) void js_main(c8 *href) {
main(1, &href);
}
-void js_init(void) {
+__attribute__((export_name("js_init"))) void js_init(void) {
platform.pixels = _buffer;
platform.done = 1;
}
-void *js_pixels(void) {
+__attribute__((export_name("js_pixels"))) void *js_pixels(void) {
return platform.pixels;
}
-void js_frame(i32 frame_width, i32 frame_height) {
+__attribute__((export_name("js_frame"))) void js_frame(i32 frame_width, i32 frame_height) {
platform.frame_width = frame_width;
platform.frame_height = frame_height;
p_frame();
}
-#endif // __EMSCRIPTEN__
+#endif // __wasm__
// ================================================================