X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=src%2Finput.c;h=30f60b9a7f03c28d0d79c2d59aea24168825fa2c;hb=26a86acbe548b3df9a14d703603907a4a5486404;hp=47f808b80b679cda6b20d93f017d48d89c87f4a2;hpb=c8c162c2b1f82f32160bcaa4159ea8735a8582c5;p=my-code%2Fivac.git diff --git a/src/input.c b/src/input.c index 47f808b..30f60b9 100644 --- a/src/input.c +++ b/src/input.c @@ -8,30 +8,62 @@ int input_init(t_input *input) { + struct termios tios; + puts("[input] initializing input system ..."); if((input->content=(char *)malloc(MAX_CONTENT))==NULL) { perror("[input] malloc call"); - return K_ERROR; + return I_ERROR; } + input->c_count=0; + + tcgetattr(0,&(input->tios)); + tios=input->tios; - return K_SUCCESS; + 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) { free(input->content); + tcsetattr(0,TCSANOW,&(input->tios)); puts("[input] shutdown"); - return K_SUCCESS; + return I_SUCCESS; } -int input_get_char(t_input *input) { +int input_get_event(t_input *input,int (*callback)(t_input *input,void *ptr), + void *ptr) { + + char data[MAX_CONTENT]; + int count; + + /* delete char counter if not buffered */ + if(!(input->mode&CONTENT_BUFFER)) input->c_count=0; + + if((count=read(0,data,MAX_CONTENT))==-1) { + perror("[input] read call"); + return I_ERROR; + } + + if(input->c_count>=MAX_CONTENT) { + puts("[input] max input length reached"); + return I_ERROR; + } - char data[64]; + strncpy(&(input->content[input->c_count]),data,count); + input->c_count+=count; - puts("a hopefully nice display for user interaction will popup soon ;)"); - read(0,data,64); + callback(input,ptr); - return K_SUCCESS; + return I_SUCCESS; }