X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=src%2Finput.c;h=b29688ce50b90d31243d7a8d1968b065335eebce;hp=30f60b9a7f03c28d0d79c2d59aea24168825fa2c;hb=2fb65b9beceb0945b593e28332507aa1b7c3fd90;hpb=da2c28e700faec39bab322b103fe0298c52fbda7 diff --git a/src/input.c b/src/input.c index 30f60b9..b29688c 100644 --- a/src/input.c +++ b/src/input.c @@ -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; }