os.h (3564B)
1 /* See LICENSE for copyright details */ 2 #ifndef _OS_H_ 3 #define _OS_H_ 4 5 #define INVALID_FILE (-1) 6 typedef enum { 7 OS_FA_READ = 1 << 0, 8 OS_FA_WRITE = 1 << 1, 9 OS_FA_APPEND = 1 << 2, 10 } OSFileAttribute; 11 12 /* NOTE(rnp): if your platform doesn't support secondary clipboard just push to primary */ 13 typedef enum { 14 OS_CLIPBOARD_PRIMARY, 15 OS_CLIPBOARD_SECONDARY, 16 } OSClipboard; 17 18 typedef struct { void *memory; iz size; } OSMemoryBlock; 19 20 /* NOTE: virtual memory ring buffer */ 21 typedef struct { 22 iz capacity; 23 iz filled; 24 iz write_index; 25 u8 *data; 26 } OSRingBuffer; 27 28 typedef struct OS OS; 29 /* NOTE: for now we will do the callback route but this will change if we do multithreading */ 30 #define OS_FILE_WATCH_CALLBACK_FN(name) void name(u8 *path, void *user_ctx) 31 typedef OS_FILE_WATCH_CALLBACK_FN(os_file_watch_callback_fn); 32 33 #define OS_ADD_FILE_WATCH_FN(name) void name(u8 *path, os_file_watch_callback_fn *fn, void *user_ctx) 34 typedef OS_ADD_FILE_WATCH_FN(os_add_file_watch_fn); 35 36 #define OS_ALLOCATE_RING_BUFFER_FN(name) OSRingBuffer name(iz capacity) 37 typedef OS_ALLOCATE_RING_BUFFER_FN(os_allocate_ring_buffer_fn); 38 39 #define OS_GET_CLIPBOARD_FN(name) u8 *name(OSClipboard clipboard) 40 typedef OS_GET_CLIPBOARD_FN(os_get_clipboard_fn); 41 42 #define OS_SET_CLIPBOARD_FN(name) b32 name(u8 *buffer, iz length, OSClipboard clipboard) 43 typedef OS_SET_CLIPBOARD_FN(os_set_clipboard_fn); 44 45 #define OS_READ_FILE_FN(name) s8 name(u8 *path, Arena *a) 46 typedef OS_READ_FILE_FN(os_read_file_fn); 47 48 /* TODO: this should possibly just take a stream buffer */ 49 #define OS_READ_FN(name) iz name(iptr file, s8 buffer) 50 typedef OS_READ_FN(os_read_fn); 51 52 #define OS_SET_TERMINAL_SIZE_FN(name) void name(iptr child, i32 rows, i32 columns, \ 53 i32 window_width, i32 window_height) 54 typedef OS_SET_TERMINAL_SIZE_FN(os_set_terminal_size_fn); 55 56 #define OS_GET_WINDOW_TITLE_FN(name) u8 *name(void) 57 typedef OS_GET_WINDOW_TITLE_FN(os_get_window_title_fn); 58 59 #define OS_SET_WINDOW_TITLE_FN(name) void name(s8 title) 60 typedef OS_SET_WINDOW_TITLE_FN(os_set_window_title_fn); 61 62 #define OS_THREAD_ENTRY_POINT_FN(name) i64 name(OS *os, iptr context, i32 *sync) 63 typedef OS_THREAD_ENTRY_POINT_FN(os_thread_entry_point_fn); 64 65 #define OS_GL_SWAP_BUFFERS_FN(name) void name(iptr window) 66 typedef OS_GL_SWAP_BUFFERS_FN(os_gl_swap_buffers_fn); 67 68 #define OS_GL_MAKE_CONTEXT_CURRENT_FN(name) void name(iptr window) 69 typedef OS_GL_MAKE_CONTEXT_CURRENT_FN(os_gl_make_context_current_fn); 70 71 #define OS_SPAWN_THREAD_FN(name) i32 *name(OS *os, os_thread_entry_point_fn *entry_point, \ 72 char *thread_name, iptr user_context) 73 typedef OS_SPAWN_THREAD_FN(os_spawn_thread_fn); 74 75 #define OS_WAIT_ON_VALUE_FN(name) b32 name(i32 *value, i32 current, u32 timeout_ms) 76 typedef OS_WAIT_ON_VALUE_FN(os_wait_on_value_fn); 77 78 #define OS_WAKE_WAITERS_FN(name) void name(i32 *sync) 79 typedef OS_WAKE_WAITERS_FN(os_wake_waiters_fn); 80 81 #define OS_WRITE_FN(name) b32 name(iptr file, s8 raw) 82 typedef OS_WRITE_FN(os_write_fn); 83 84 #define OS_FUNCTIONS \ 85 X(add_file_watch) \ 86 X(allocate_ring_buffer) \ 87 X(get_clipboard) \ 88 X(set_clipboard) \ 89 X(read_file) \ 90 X(read) \ 91 X(set_terminal_size) \ 92 X(get_window_title) \ 93 X(set_window_title) \ 94 X(gl_swap_buffers) \ 95 X(gl_make_context_current) \ 96 X(spawn_thread) \ 97 X(wait_on_value) \ 98 X(wake_waiters) \ 99 X(write) 100 101 #define X(name) os_ ## name ## _fn *name; 102 struct OS { OS_FUNCTIONS }; 103 #undef X 104 105 #endif /* _OS_H_ */