X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=src%2Finput.c;h=a2886ee0399e6cd53c9113eaeba0fa2ae8623c09;hp=47f808b80b679cda6b20d93f017d48d89c87f4a2;hb=f7d9ad56ad9c10284c067cb2db36a7c72b33c5b3;hpb=c8c162c2b1f82f32160bcaa4159ea8735a8582c5 diff --git a/src/input.c b/src/input.c index 47f808b..a2886ee 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,&tios); + /* switch off canonical mode */ + tios.c_lflag&=(~ICANON); + tios.c_lflag&=(~ECHO); + tcsetattr(0,TCSANOW,&tios); - return K_SUCCESS; + 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); + puts("[input] shutdown"); - return K_SUCCESS; + return I_SUCCESS; } -int input_get_char(t_input *input) { +int input_get_char(t_input *input,int (*callback)(t_input *input,void *ptr), + void *ptr) { + + char data[1]; + + if(read(0,data,1)==-1) { + perror("[input] read call"); + return I_ERROR; + } + + 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++; - char data[64]; + if(data[0]=='\n') input->c_count=0; - puts("a hopefully nice display for user interaction will popup soon ;)"); - read(0,data,64); + callback(input,ptr); - return K_SUCCESS; + return I_SUCCESS; }