X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=src%2Finput.c;h=30f60b9a7f03c28d0d79c2d59aea24168825fa2c;hb=0bc14060d26317692d960c39e7e64b74d8963e61;hp=a2886ee0399e6cd53c9113eaeba0fa2ae8623c09;hpb=f7d9ad56ad9c10284c067cb2db36a7c72b33c5b3;p=my-code%2Fivac.git diff --git a/src/input.c b/src/input.c index a2886ee..30f60b9 100644 --- a/src/input.c +++ b/src/input.c @@ -18,50 +18,50 @@ int input_init(t_input *input) { } 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);