]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
cmdproc_test: Set terminal to non-canonical mode
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 31 Jul 2013 15:43:36 +0000 (17:43 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 31 Jul 2013 15:43:36 +0000 (17:43 +0200)
This is to allow testing of backspace handling.

libs4c/cmdproc/cmdio_std_line.c
libs4c/cmdproc/cmdproc_test.c

index 34fd5c849ac04110d2bb480589edd9dd477b7add..63cb615292201fadfd0112b16f2cdbc7fc21bece 100644 (file)
@@ -18,7 +18,7 @@ char ed_line_out_std[ED_LINE_CHARS+1];
 
 
 ed_line_buf_t ed_line_buf_in_std={
-//    flg:FL_ELB_ECHO,
+    flg:FL_ELB_ECHO,
     inbuf:0,
     alloc:sizeof(ed_line_in_std),
     maxlen:0,
index 170cd5464aa5ab14fb52bfd3f865a30cf57dd799..ec584e2014c2bc53fd24c292a5ad6435b34657a3 100644 (file)
@@ -1,5 +1,9 @@
 #include <cmd_proc.h>
 #include <stdio.h>
+#include <termios.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
 
 int cmd_do_testopchar(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[])
 {
@@ -197,8 +201,26 @@ cmd_des_t const **cmd_list = cmd_list_main;
 
 cmd_io_t cmd_io_std_line;
 
+struct termios tcbackup;
+
+void sigint(int arg)
+{
+    tcsetattr(0, TCSAFLUSH, &tcbackup);
+    exit(0);
+}
+
 int main()
 {
+    struct termios tc;
+    tcgetattr(0, &tc);
+    tcbackup = tc;
+    tc.c_lflag &= ~(ICANON|ECHO);
+    tc.c_cc[VMIN] = 1;
+    tc.c_cc[VTIME] = 0;
+    tc.c_cc[VERASE] = '\b';
+    tcsetattr(0, TCSAFLUSH, &tc);
+    signal(SIGINT, sigint);
+
     while (1) {
         cmd_processor_run(&cmd_io_std_line, cmd_list_main);
     }