tui.c (1276B)
1 #include "tui.h" 2 3 #include <stdlib.h> 4 #include <signal.h> 5 #include <termios.h> 6 #include <unistd.h> 7 #include <stdio.h> 8 9 struct termios initial; 10 11 void restore_terminal() { 12 type( 13 switch_to alternate_buffer 14 clear_buffer 15 switch_to main_buffer 16 show_cursor 17 ); 18 // restore original termios params 19 tcsetattr(1, TCSANOW, &initial); 20 } 21 22 void restore_terminal_exit(int i) { 23 exit(1); 24 } 25 26 void initialize_terminal() { 27 // 1. save initial termios params 28 // 2. disable echo and canonical mode 29 struct termios t; 30 tcgetattr(1, &t); 31 initial = t; 32 t.c_lflag &= (~ECHO & ~ICANON); 33 tcsetattr(1, TCSANOW, &t); 34 35 // register cleanup function 36 atexit(restore_terminal); 37 signal(SIGTERM, restore_terminal_exit); 38 signal(SIGINT, restore_terminal_exit); 39 40 // disable output buffering 41 setvbuf(stdout, NULL, _IONBF, 0); 42 43 type( 44 switch_to alternate_buffer 45 clear_buffer 46 hide_cursor 47 ); 48 } 49 50 void type_line(const char* msg, unsigned int line) { 51 const unsigned int buf_len = 64; 52 char buf[buf_len]; 53 unsigned int str_len = snprintf( 54 buf, 55 buf_len - 1, 56 set_cursor("%d", "1"), 57 line 58 ); 59 buf[str_len] = '\0'; 60 type(buf); 61 //printf(msg); 62 }