testing display related segfaults .. :(
[my-code/ivac.git] / src / input.c
index 30f60b9..b29688c 100644 (file)
@@ -9,25 +9,33 @@
 int input_init(t_input *input) {
 
   struct termios tios;
+  int size;
 
   puts("[input] initializing input system ...");
 
-  if((input->content=(char *)malloc(MAX_CONTENT))==NULL) {
+  size=((input->mode&CONTENT_BUFFER)?MAX_CONTENT:1);
+
+  if((input->content=(char *)malloc(size))==NULL) {
     perror("[input] malloc call");
     return I_ERROR;
   }
+    
+  memset(input->content,0,size);
   input->c_count=0;
 
   tcgetattr(0,&(input->tios));
   tios=input->tios;
 
-  if(!(input->mode&LINE_BUFFERED)) {
-    tios.c_lflag&=(~ICANON);
-    tios.c_lflag&=(~ECHO);
-    tios.c_cc[VTIME]=0;
-    tios.c_cc[VMIN]=1;
-    tcsetattr(0,TCSANOW,&tios);
-  }
+  /* general settings */
+  tios.c_iflag&=ICRNL; /* \r -> \n */
+  tios.c_cc[VTIME]=0; /* no timeout */
+  tios.c_cc[VMIN]=1; /* 1 char for non-can. mode */
+
+  /* depending on used modes */
+  if(!(input->mode&LINE_BUFFERED)) tios.c_lflag&=(~ICANON);
+  if(!(input->mode&INPUT_ECHO)) tios.c_lflag&=(~ECHO);
+
+  tcsetattr(0,TCSANOW,&tios);
 
   return I_SUCCESS;
 }