aboutsummaryrefslogtreecommitdiff
path: root/kscurses/init.jai
diff options
context:
space:
mode:
Diffstat (limited to 'kscurses/init.jai')
-rw-r--r--kscurses/init.jai125
1 files changed, 0 insertions, 125 deletions
diff --git a/kscurses/init.jai b/kscurses/init.jai
deleted file mode 100644
index b67c52f..0000000
--- a/kscurses/init.jai
+++ /dev/null
@@ -1,125 +0,0 @@
-terminal_state : struct {
- size : ivec2;
- cursor := ivec2.{-1, -1}; // {-1, -1} if cursor hidden
- last_mode : Graphics_Mode;
-}
-update_terminal_size :: () {
- TIOCGWINSZ :: 0x5413;
- winsize : struct {
- ws_row, ws_col, ws_xpixel, ws_ypixel : u16;
- }
- ioctl(0, TIOCGWINSZ, *winsize);
- terminal_state.size = .{xx winsize.ws_col, xx winsize.ws_row};
-}
-
-ks_init :: () {
- #if OS == .LINUX {
- __old_logger = context.logger;
- context.logger = file_logger;
-
- ks_write("\e[?25l"); // hide cursor
- ks_write("\e7"); // save cursor position
- ks_write("\e[?1047h"); // switch screen
- ks_write("\e[?30l"); // hide scrollbar
-
- ks_write("\e[H"); // move to top left corner
- ks_write("\e[0m"); // set default mode
- ks_write("\e[2J"); // clear screen
- {
- tcgetattr(STDIN_FILENO, *__term);
- term_new := __term;
-
- term_new.c_iflag &= 0xFFFFFA14;// ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
- term_new.c_oflag &= 0xFFFFFFFE;// ~OPOST;
- term_new.c_lflag &= 0xFFFF7FB4;// ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- term_new.c_cflag &= 0xFFFFFECF;// ~(CSIZE | PARENB);
- term_new.c_cflag |= 0x00000030;
-
- tcsetattr(STDIN_FILENO, 0, *term_new);
- }
- update_terminal_size();
- } else {
- assert(false, "procedure call on unsupported OS\n");
- }
-}
-ks_terminate :: () {
- #if OS == .LINUX {
- tcsetattr(STDIN_FILENO, 0, *__term); // return echo
-
- ks_write("\e[?47l"); // restore screen
- ks_write("\e8"); // restore cursor
- ks_write("\e[?25h"); // show cursor
- ks_write("\e[?30h"); // show scrollbar
- terminal_state = .{};
-
- context.logger = __old_logger;
- } else {
- assert(false, "procedure call on unsupported OS\n");
- }
-}
-use_ks_curses :: () #expand {
- ks_init();
- `defer {
- ks_terminate();
- }
-}
-use_default_winch_handler :: () #expand {
- init_default_winch_handler();
- `defer deinit_default_winch_handler();
-}
-init_default_winch_handler :: () {
- #if OS == .LINUX {
- act := sigaction_t.{
- sa_handler = (sig : s32) #c_call {
- new_context: Context;
- push_context new_context {
- update_terminal_size();
- }
- },
- sa_mask = sigset_t.{__val[0] = SIGWINCH}
- };
- sigaction(SIGWINCH, *act, null);
- } else {
- assert(false, "procedure call on unsupported OS\n");
- }
-}
-deinit_default_winch_handler :: () {
- #if OS == .LINUX {
- sa : sigaction_t;
- sa.sa_handler = SIG_DFL;
- sigaction(SIGWINCH, null, *sa);
- } else {
-
- }
-}
-
-#scope_file
-__old_logger : type_of(context.logger);
-
-#if OS == .LINUX {
- __term : My_Termios;
-
- My_Termios :: struct {
- c_iflag : u32;
- c_oflag : u32;
- c_cflag : u32;
- c_lflag : u32;
- unknown_pad : u8;
- c_cc : [32]u8;
- c_ispeed : u32;
- c_ospeed : u32;
- }
-
- libc :: #system_library "libc";
- tcsetattr :: (fd : s32, optional_actions : s32, termios_p : *My_Termios) -> s32 #foreign libc;
- tcgetattr :: (fd : s32, termios_p : *My_Termios) -> s32 #foreign libc;
-}
-
-#import "File";
-file_logger :: (message: string, data: *void, info: Log_Info) {
- file, ok := file_open("log.txt",for_writing=true, keep_existing_content=true);
- if !ok return;
-
- file_write(*file, tprint("[%] %", calendar_to_string(to_calendar(current_time_consensus())), message));
- file_close(*file);
-}