Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {.deadCodeElim: on.}
- when defined(windows):
- const
- libname* = "libbearlibterminal.dll"
- elif defined(macosx):
- const
- libname* = "libbearlibterminal.dylib"
- else:
- const
- libname* = "libbearlibterminal.so"
- type
- color_t* = uint32
- dimensions_t* = object
- width*: cint
- height*: cint
- proc terminal_open*(): cint {.cdecl, importc: "terminal_open", dynlib: libname.}
- proc terminal_close*() {.cdecl, importc: "terminal_close", dynlib: libname.}
- proc terminal_set8*(value: ptr int8): cint {.cdecl, importc: "terminal_set8",
- dynlib: libname.}
- proc terminal_set16*(value: ptr int16): cint {.cdecl, importc: "terminal_set16",
- dynlib: libname.}
- proc terminal_set32*(value: ptr int32): cint {.cdecl, importc: "terminal_set32",
- dynlib: libname.}
- proc terminal_refresh*() {.cdecl, importc: "terminal_refresh", dynlib: libname.}
- proc terminal_clear*() {.cdecl, importc: "terminal_clear", dynlib: libname.}
- proc terminal_clear_area*(x: cint; y: cint; w: cint; h: cint) {.cdecl,
- importc: "terminal_clear_area", dynlib: libname.}
- proc terminal_crop*(x: cint; y: cint; w: cint; h: cint) {.cdecl, importc: "terminal_crop",
- dynlib: libname.}
- proc terminal_layer*(index: cint) {.cdecl, importc: "terminal_layer", dynlib: libname.}
- proc terminal_color*(color: color_t) {.cdecl, importc: "terminal_color",
- dynlib: libname.}
- proc terminal_bkcolor*(color: color_t) {.cdecl, importc: "terminal_bkcolor",
- dynlib: libname.}
- proc terminal_composition*(mode: cint) {.cdecl, importc: "terminal_composition",
- dynlib: libname.}
- proc terminal_put*(x: cint; y: cint; code: cint) {.cdecl, importc: "terminal_put",
- dynlib: libname.}
- proc terminal_put_ext*(x: cint; y: cint; dx: cint; dy: cint; code: cint;
- corners: ptr color_t) {.cdecl, importc: "terminal_put_ext",
- dynlib: libname.}
- proc terminal_pick*(x: cint; y: cint; index: cint): cint {.cdecl,
- importc: "terminal_pick", dynlib: libname.}
- proc terminal_pick_color*(x: cint; y: cint; index: cint): color_t {.cdecl,
- importc: "terminal_pick_color", dynlib: libname.}
- proc terminal_pick_bkcolor*(x: cint; y: cint): color_t {.cdecl,
- importc: "terminal_pick_bkcolor", dynlib: libname.}
- proc terminal_print_ext8*(x: cint; y: cint; w: cint; h: cint; align: cint; s: ptr int8;
- out_w: ptr cint; out_h: ptr cint) {.cdecl,
- importc: "terminal_print_ext8", dynlib: libname.}
- proc terminal_print_ext16*(x: cint; y: cint; w: cint; h: cint; align: cint; s: ptr int16;
- out_w: ptr cint; out_h: ptr cint) {.cdecl,
- importc: "terminal_print_ext16", dynlib: libname.}
- proc terminal_print_ext32*(x: cint; y: cint; w: cint; h: cint; align: cint; s: ptr int32;
- out_w: ptr cint; out_h: ptr cint) {.cdecl,
- importc: "terminal_print_ext32", dynlib: libname.}
- proc terminal_measure_ext8*(w: cint; h: cint; s: ptr int8; out_w: ptr cint; out_h: ptr cint) {.
- cdecl, importc: "terminal_measure_ext8", dynlib: libname.}
- proc terminal_measure_ext16*(w: cint; h: cint; s: ptr int16; out_w: ptr cint;
- out_h: ptr cint) {.cdecl,
- importc: "terminal_measure_ext16", dynlib: libname.}
- proc terminal_measure_ext32*(w: cint; h: cint; s: ptr int32; out_w: ptr cint;
- out_h: ptr cint) {.cdecl,
- importc: "terminal_measure_ext32", dynlib: libname.}
- proc terminal_has_input*(): cint {.cdecl, importc: "terminal_has_input",
- dynlib: libname.}
- proc terminal_state*(code: cint): cint {.cdecl, importc: "terminal_state",
- dynlib: libname.}
- proc terminal_read*(): cint {.cdecl, importc: "terminal_read", dynlib: libname.}
- proc terminal_read_str8*(x: cint; y: cint; buffer: ptr int8; max: cint): cint {.cdecl,
- importc: "terminal_read_str8", dynlib: libname.}
- proc terminal_read_str16*(x: cint; y: cint; buffer: ptr int16; max: cint): cint {.cdecl,
- importc: "terminal_read_str16", dynlib: libname.}
- proc terminal_read_str32*(x: cint; y: cint; buffer: ptr int32; max: cint): cint {.cdecl,
- importc: "terminal_read_str32", dynlib: libname.}
- proc terminal_peek*(): cint {.cdecl, importc: "terminal_peek", dynlib: libname.}
- proc terminal_delay*(period: cint) {.cdecl, importc: "terminal_delay", dynlib: libname.}
- proc terminal_get8*(key: ptr int8; def: ptr int8): ptr int8 {.cdecl,
- importc: "terminal_get8", dynlib: libname.}
- proc terminal_get16*(key: ptr int16; def: ptr int16): ptr int16 {.cdecl,
- importc: "terminal_get16", dynlib: libname.}
- proc terminal_get32*(key: ptr int32; def: ptr int32): ptr int32 {.cdecl,
- importc: "terminal_get32", dynlib: libname.}
- proc color_from_name8*(name: ptr int8): color_t {.cdecl, importc: "color_from_name8",
- dynlib: libname.}
- proc color_from_name16*(name: ptr int16): color_t {.cdecl,
- importc: "color_from_name16", dynlib: libname.}
- proc color_from_name32*(name: ptr int32): color_t {.cdecl,
- importc: "color_from_name32", dynlib: libname.}
- proc terminal_vsprintf*(s: cstring; args: va_list): cstring {.inline, cdecl.} =
- var buffer_size: cint
- var buffer: cstring
- var rc: cint
- if s.isNil: return nil
- elif buffer.isNil: buffer = cast[cstring](malloc(buffer_size))
- while 1:
- buffer[buffer_size - 1] = '\0'
- rc = vsnprintf(buffer, buffer_size, s, args)
- if rc >= buffer_size or buffer[buffer_size - 1] != '\0':
- if buffer_size >= 65536: return nil
- buffer_size = buffer_size * 2
- buffer = cast[cstring](realloc(buffer, buffer_size))
- else:
- break
- return if rc >= 0: buffer else: nil
- proc terminal_vswprintf*(s: ptr wchar_t; args: va_list): ptr wchar_t {.inline, cdecl.} =
- var buffer_size: cint
- var buffer: ptr wchar_t
- var rc: cint
- if not s:
- return nil
- elif not buffer:
- buffer = cast[ptr wchar_t](malloc(buffer_size * sizeof((wchar_t))))
- while 1:
- buffer[buffer_size - 1] = '\0'
- rc = vswprintf(buffer, buffer_size, s, args)
- if rc >= buffer_size or buffer[buffer_size - 1] != '\0':
- if buffer_size >= 65536: return nil
- buffer_size = buffer_size * 2
- buffer = cast[ptr wchar_t](realloc(buffer, buffer_size * sizeof((wchar_t))))
- else:
- break
- return if rc >= 0: buffer else: nil
- proc terminal_set*(s: cstring): cint {.inline, cdecl.} =
- return terminal_set8(cast[ptr int8](s))
- proc terminal_setf*(s: cstring): cint {.inline, varargs, cdecl.} =
- var ret: cint
- var args: va_list
- va_start(args, s)
- ret = terminal_set(terminal_vsprintf(s, args))
- va_end(args)
- return ret
- proc terminal_wset*(s: ptr wchar_t): cint {.inline, cdecl.} =
- return terminal_set32(cast[ptr int32](s))
- proc terminal_wsetf*(s: ptr wchar_t): cint {.inline, varargs, cdecl.} =
- var ret: cint
- var args: va_list
- va_start(args, s)
- ret = terminal_wset(terminal_vswprintf(s, args))
- va_end(args)
- return ret
- proc terminal_print*(x: cint; y: cint; s: cstring): dimensions_t {.inline, cdecl.} =
- var ret: dimensions_t
- terminal_print_ext8(x, y, 0, 0, 0, cast[ptr int8](s), addr(ret.width),
- addr(ret.height))
- return ret
- proc terminal_printf*(x: cint; y: cint; s: cstring): dimensions_t {.inline, varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_print(x, y, terminal_vsprintf(s, args))
- va_end(args)
- return ret
- proc terminal_wprint*(x: cint; y: cint; s: ptr wchar_t): dimensions_t {.inline, cdecl.} =
- var ret: dimensions_t
- terminal_print_ext32(x, y, 0, 0, 0, cast[ptr int32](s), addr(ret.width),
- addr(ret.height))
- return ret
- proc terminal_wprintf*(x: cint; y: cint; s: ptr wchar_t): dimensions_t {.inline, varargs,
- cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_wprint(x, y, terminal_vswprintf(s, args))
- va_end(args)
- return ret
- proc terminal_print_ext*(x: cint; y: cint; w: cint; h: cint; align: cint; s: cstring): dimensions_t {.
- inline, cdecl.} =
- var ret: dimensions_t
- terminal_print_ext8(x, y, w, h, align, cast[ptr int8](s), addr(ret.width),
- addr(ret.height))
- return ret
- proc terminal_printf_ext*(x: cint; y: cint; w: cint; h: cint; align: cint; s: cstring): dimensions_t {.
- inline, varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_print_ext(x, y, w, h, align, terminal_vsprintf(s, args))
- va_end(args)
- return ret
- nil
- proc terminal_wprint_ext*(x: cint; y: cint; w: cint; h: cint; align: cint; s: ptr wchar_t): dimensions_t {.
- inline, cdecl.} =
- var ret: dimensions_t
- terminal_print_ext32(x, y, w, h, align, cast[ptr int32](s), addr(ret.width),
- addr(ret.height))
- return ret
- proc terminal_wprintf_ext*(x: cint; y: cint; w: cint; h: cint; align: cint; s: ptr wchar_t): dimensions_t {.
- inline, varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_wprint_ext(x, y, w, h, align, terminal_vswprintf(s, args))
- va_end(args)
- return ret
- proc terminal_measure*(s: cstring): dimensions_t {.inline, cdecl.} =
- var ret: dimensions_t
- terminal_measure_ext8(0, 0, cast[ptr int8](s), addr(ret.width), addr(ret.height))
- return ret
- proc terminal_measuref*(s: cstring): dimensions_t {.inline, varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_measure(terminal_vsprintf(s, args))
- va_end(args)
- return ret
- proc terminal_wmeasure*(s: ptr wchar_t): dimensions_t {.inline, cdecl.} =
- var ret: dimensions_t
- terminal_measure_ext32(0, 0, cast[ptr int32](s), addr(ret.width), addr(ret.height))
- return ret
- proc terminal_wmeasuref*(s: ptr wchar_t): dimensions_t {.inline, varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_wmeasure(terminal_vswprintf(s, args))
- va_end(args)
- return ret
- proc terminal_measure_ext*(w: cint; h: cint; s: cstring): dimensions_t {.inline, cdecl.} =
- var ret: dimensions_t
- terminal_measure_ext8(w, h, cast[ptr int8](s), addr(ret.width), addr(ret.height))
- return ret
- proc terminal_measuref_ext*(w: cint; h: cint; s: cstring): dimensions_t {.inline,
- varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_measure_ext(w, h, terminal_vsprintf(s, args))
- va_end(args)
- return ret
- proc terminal_wmeasure_ext*(w: cint; h: cint; s: ptr wchar_t): dimensions_t {.inline,
- cdecl.} =
- var ret: dimensions_t
- terminal_measure_ext32(w, h, cast[ptr int32](s), addr(ret.width), addr(ret.height))
- return ret
- proc terminal_wmeasuref_ext*(w: cint; h: cint; s: ptr wchar_t): dimensions_t {.inline,
- varargs, cdecl.} =
- var ret: dimensions_t
- var args: va_list
- va_start(args, s)
- ret = terminal_wmeasure_ext(w, h, terminal_vswprintf(s, args))
- va_end(args)
- return ret
- proc terminal_read_str*(x: cint; y: cint; buffer: cstring; max: cint): cint {.inline, cdecl.} =
- return terminal_read_str8(x, y, cast[ptr int8](buffer), max)
- proc terminal_read_wstr*(x: cint; y: cint; buffer: ptr wchar_t; max: cint): cint {.inline,
- cdecl.} =
- return terminal_read_str32(x, y, cast[ptr int32](buffer), max)
- proc terminal_get*(key: cstring; def: cstring): cstring {.inline, cdecl.} =
- return cast[cstring](terminal_get8(cast[ptr int8](key), cast[ptr int8](def)))
- proc terminal_wget*(key: ptr wchar_t; def: ptr wchar_t): ptr wchar_t {.inline, cdecl.} =
- return cast[ptr wchar_t](terminal_get32(cast[ptr int32](key), cast[ptr int32](def)))
- proc color_from_name*(name: cstring): color_t {.inline, cdecl.} =
- return color_from_name8(cast[ptr int8](name))
- proc color_from_wname*(name: ptr wchar_t): color_t {.inline, cdecl.} =
- return color_from_name32(cast[ptr int32](name))
- proc color_from_argb*(a: uint8; r: uint8; g: uint8; b: uint8): color_t {.inline, cdecl.} =
- return (cast[color_t](a) shl 24) or (r shl 16) or (g shl 8) or b
- proc terminal_check*(code: cint): cint {.inline, cdecl.} =
- return terminal_state(code) > 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement