vtgl

terminal emulator implemented in OpenGL
git clone anongit@rnpnr.xyz:vtgl.git
Log | Files | Refs | Feed | LICENSE

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_ */