gcode-interpreter

A gcode interpreter I use to control lasers.
git clone git://git.christianermann.dev/gcode-interpreter
Log | Files | Refs | README | LICENSE

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 }