diff options
Diffstat (limited to 'reduced_system_layer.c')
-rwxr-xr-x | reduced_system_layer.c | 66 |
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__ // ================================================================ |