#+vet explicit-allocators // Public system API. package tcom import rt "base:runtime" import "core:io" g_sys_term_cached_dims: TTY_Pos // --------------------------------------------------------------------------------------------------------------------- // BOOTSTRAP sys_init :: proc() { _sys_init() } sys_fini :: proc() { _sys_fini() } // --------------------------------------------------------------------------------------------------------------------- // CHILD Sys_Child_Info :: _Sys_Child_Info sys_child_start :: proc(cmd: []string, dim: TTY_Pos, allocator: rt.Allocator) -> (info: Sys_Child_Info, err: rt.Allocator_Error) { return _sys_child_start(cmd, dim, allocator) } sys_child_write :: proc(info: Sys_Child_Info, str: string) -> (ok: bool) { return _sys_child_write(info, str) } // --------------------------------------------------------------------------------------------------------------------- // EVENTS Sys_Event :: union { Sys_Event_Pane_Died, Sys_Event_TTY, Sys_Event_TTY_Error, Sys_Event_Input_Raw, Sys_Event_IO_Error, } Sys_Event_Pane_Died :: struct { pane: Pane_Handle, } Sys_Event_TTY :: TTY_Event Sys_Event_TTY_Error :: TTY_Error Sys_Event_Input_Raw :: struct { text: string, } Sys_Event_IO_Error :: struct { data: []byte, start_i, end_i: int, err: io.Error, } Sys_Event_Iterator :: struct { allocator: rt.Allocator, _sys_info: _Sys_Event_Iterator_Info, } sys_event_iterator_create :: proc(allocator: rt.Allocator) -> (it: Sys_Event_Iterator) { it.allocator = allocator _sys_event_iterator_create(&it) return } sys_event_iterator_iterate :: proc(it: ^Sys_Event_Iterator) -> (e: Sys_Event, cond: bool) { return _sys_event_iterator_iterate(it) } sys_event_iterator_destroy :: proc(it: ^Sys_Event_Iterator) { _sys_event_iterator_destroy(it) } // --------------------------------------------------------------------------------------------------------------------- // TERMINAL sys_term_get_dims :: proc() -> (d: TTY_Pos) { dims, ok := _sys_term_get_dims() if ok { g_sys_term_cached_dims = dims } return g_sys_term_cached_dims } sys_term_set_dims :: proc(d: TTY_Pos, c: Sys_Child_Info) { _sys_term_set_dims(d, c) }