}
input->c_count=0;
- tcgetattr(0,&tios);
- /* switch off canonical mode */
- tios.c_lflag&=(~ICANON);
- tios.c_lflag&=(~ECHO);
- tcsetattr(0,TCSANOW,&tios);
+ 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);
+ }
return I_SUCCESS;
}
int input_shutdown(t_input *input) {
- struct termios tios;
-
free(input->content);
-
- tcgetattr(0,&tios);
- tios.c_lflag|=ICANON;
- tios.c_lflag|=ECHO;
- tcsetattr(0,TCSANOW,&tios);
-
+ tcsetattr(0,TCSANOW,&(input->tios));
puts("[input] shutdown");
return I_SUCCESS;
}
-int input_get_char(t_input *input,int (*callback)(t_input *input,void *ptr),
+int input_get_event(t_input *input,int (*callback)(t_input *input,void *ptr),
void *ptr) {
- char data[1];
+ char data[MAX_CONTENT];
+ int count;
+
+ /* delete char counter if not buffered */
+ if(!(input->mode&CONTENT_BUFFER)) input->c_count=0;
- if(read(0,data,1)==-1) {
+ if((count=read(0,data,MAX_CONTENT))==-1) {
perror("[input] read call");
return I_ERROR;
}
- if(input->c_count==MAX_CONTENT) {
+ if(input->c_count>=MAX_CONTENT) {
puts("[input] max input length reached");
return I_ERROR;
}
- input->content[input->c_count]=data[0];
- input->c_count++;
-
- if(data[0]=='\n') input->c_count=0;
+ strncpy(&(input->content[input->c_count]),data,count);
+ input->c_count+=count;
callback(input,ptr);