raiguard/tcom

git clone https://git.raiguard.me/raiguard/tcom

Caleb HeuerNo idea what I was working on...7992681

trunk
2.2 KiB92 linesraw
1#+vet explicit-allocators
2
3// Public system API.
4package tcom
5
6import rt "base:runtime"
7import "core:io"
8
9g_sys_term_cached_dims: TTY_Pos
10
11// ---------------------------------------------------------------------------------------------------------------------
12// BOOTSTRAP
13
14sys_init :: proc() {
15    _sys_init()
16}
17
18sys_fini :: proc() {
19    _sys_fini()
20}
21
22// ---------------------------------------------------------------------------------------------------------------------
23// CHILD
24
25Sys_Child_Info :: _Sys_Child_Info
26
27sys_child_start :: proc(cmd: []string, dim: TTY_Pos, allocator: rt.Allocator) -> (info: Sys_Child_Info, err: rt.Allocator_Error) {
28    return _sys_child_start(cmd, dim, allocator)
29}
30
31sys_child_write :: proc(info: Sys_Child_Info, str: string) -> (ok: bool) {
32    return _sys_child_write(info, str)
33}
34
35// ---------------------------------------------------------------------------------------------------------------------
36// EVENTS
37
38Sys_Event :: union {
39	Sys_Event_Pane_Died,
40	Sys_Event_TTY,
41	Sys_Event_TTY_Error,
42	Sys_Event_Input_Raw,
43	Sys_Event_IO_Error,
44}
45
46Sys_Event_Pane_Died :: struct {
47	pane: Pane_Handle,
48}
49Sys_Event_TTY :: TTY_Event
50Sys_Event_TTY_Error :: TTY_Error
51Sys_Event_Input_Raw :: struct {
52    text: string,
53}
54Sys_Event_IO_Error :: struct {
55    data: []byte,
56    start_i, end_i: int,
57    err: io.Error,
58}
59
60Sys_Event_Iterator :: struct {
61    allocator: rt.Allocator,
62    _sys_info: _Sys_Event_Iterator_Info,
63}
64
65sys_event_iterator_create :: proc(allocator: rt.Allocator) -> (it: Sys_Event_Iterator) {
66    it.allocator = allocator
67    _sys_event_iterator_create(&it)
68    return
69}
70
71sys_event_iterator_iterate :: proc(it: ^Sys_Event_Iterator) -> (e: Sys_Event, cond: bool) {
72    return _sys_event_iterator_iterate(it)
73}
74
75sys_event_iterator_destroy :: proc(it: ^Sys_Event_Iterator) {
76    _sys_event_iterator_destroy(it)
77}
78
79// ---------------------------------------------------------------------------------------------------------------------
80// TERMINAL
81
82sys_term_get_dims :: proc() -> (d: TTY_Pos) {
83    dims, ok := _sys_term_get_dims()
84    if ok {
85        g_sys_term_cached_dims = dims
86    }
87    return g_sys_term_cached_dims
88}
89
90sys_term_set_dims :: proc(d: TTY_Pos, c: Sys_Child_Info) {
91    _sys_term_set_dims(d, c)
92}