From dbbd6c9ac8f40f9253ba454c2af31d3cf2c5cc99 Mon Sep 17 00:00:00 2001 From: Sound and Fury Date: Thu, 16 Sep 2010 20:54:00 +0100 Subject: [PATCH] More work on the new input code --- Makefile | 6 +++--- input.c | 22 +++++++++++----------- quirc.c | 31 ++++++++++++++++--------------- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index b6549a2..63a3e6c 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ CFLAGS ?= -Wall AWK ?= gawk VERSION := `git describe --tags` PREFIX ?= /usr/local -LIBS := ttyraw.o ttyesc.o irc.o bits.o colour.o buffer.o names.o config.o input.o +LIBS := ttyraw.o ttyesc.o irc.o bits.o colour.o buffer.o names.o config.o input.o -lm INCLUDE := ttyraw.h ttyesc.h irc.h bits.h colour.h buffer.h names.h config.h input.h version.h DEFINES ?= -DHAVE_DEBUG @@ -18,12 +18,12 @@ uninstall: rm $(PREFIX)/bin/quirc quirc: quirc.c $(LIBS) $(INCLUDE) - $(CC) $(CFLAGS) -o quirc quirc.c $(LIBS) $(DEFINES) + $(CC) $(CFLAGS) $(CPPFLAGS) -o quirc quirc.c $(LIBS) $(DEFINES) mtrace: quirc-mtrace quirc-mtrace: quirc.c $(LIBS) $(INCLUDE) - $(CC) $(CFLAGS) -o quirc-mtrace quirc.c $(LIBS) -g -DUSE_MTRACE $(DEFINES) + $(CC) $(CFLAGS) $(CPPFLAGS) -o quirc-mtrace quirc.c $(LIBS) -g -DUSE_MTRACE $(DEFINES) clean: rm *.o quirc diff --git a/input.c b/input.c index b7b6690..a52c1ca 100644 --- a/input.c +++ b/input.c @@ -32,12 +32,12 @@ int inputchar(iline *inp, int *state) free(inp->right.data); inp->right.data=nr; inp->right.l=inp->left.i+inp->right.i+1; - inp->right.i=inp.right.l-1; + inp->right.i=inp->right.l-1; inp->left.i=inp->left.l=0; } if(c=='\t') // tab completion of nicks { - int sp=max(ino-1, 0); + int sp=max(inp->left.i-1, 0); while(sp>0 && !strchr(" \t", inp->left.data[sp-1])) sp--; name *curr=bufs[cbuf].nlist; @@ -46,7 +46,7 @@ int inputchar(iline *inp, int *state) int mlen; while(curr) { - if((ino==sp) || (irc_strncasecmp(inp->left.data+sp, curr->data, ino-sp, bufs[cbuf].casemapping)==0)) + if((inp->left.i==sp) || (irc_strncasecmp(inp->left.data+sp, curr->data, inp->left.i-sp, bufs[cbuf].casemapping)==0)) { n_add(&found, curr->data); if((found->next)&&(found->next->data)) @@ -70,7 +70,7 @@ int inputchar(iline *inp, int *state) } if(found) { - if((mlen>ino-sp)&&(count>1)) + if((mlen>inp->left.i-sp)&&(count>1)) { inp->left.data=(char *)realloc(inp->left.data, sp+mlen+4); snprintf(inp->left.data+sp, mlen+1, "%s", found->data); @@ -160,7 +160,7 @@ int inputchar(iline *inp, int *state) case 'C': // ^[[C // Right if(inp->right.data && *inp->right.data) { - append_ichar(inp->left, inp->right.data[0]); + append_ichar(&inp->left, inp->right.data[0]); inp->right.data=strdup(inp->right.data+1); inp->right.i--; inp->right.l=0; @@ -169,7 +169,7 @@ int inputchar(iline *inp, int *state) case 'D': // ^[[D // Left if(inp->left.i) { - unsigned char e=back_ichar(inp->left); + unsigned char e=back_ichar(&inp->left); if(e) { char *nr=(char *)malloc(inp->right.i+2); @@ -199,7 +199,7 @@ int inputchar(iline *inp, int *state) { size_t b=inp->left.i+inp->right.i; char *nl=(char *)malloc(b+1); - sprintf(nr, "%s%s", inp->left.data?inp->left.data:"", inp->right.data?inp->right.data:""); + sprintf(nl, "%s%s", inp->left.data?inp->left.data:"", inp->right.data?inp->right.data:""); ifree(inp); inp->left.data=nl; inp->left.i=b; @@ -209,7 +209,7 @@ int inputchar(iline *inp, int *state) case '3': // take another if(getchar()=='~') // delete { - back_ichar(inp); + back_ichar(&inp->left); } break; case '5': // ^[[5 @@ -325,14 +325,14 @@ int inputchar(iline *inp, int *state) if(c=='\n') { *state=3; - char out[(inp->left?strlen(inp->left):0)+(inp->right?strlen(inp->right):0)+1]; - sprintf(out, "%s%s", inp->left?inp->left:"", inp->right?inp->right:""); + char out[inp->left.i+inp->right.i+1]; + sprintf(out, "%s%s", inp->left.data?inp->left.data:"", inp->right.data?inp->right.data:""); addtoibuf(&bufs[cbuf].input, out); ifree(inp); } else { - in_update(inp); + in_update(*inp); } return(0); } diff --git a/quirc.c b/quirc.c index e124f16..896a86d 100644 --- a/quirc.c +++ b/quirc.c @@ -86,9 +86,9 @@ int main(int argc, char *argv[]) { w_buf_print(0, c_status, "Not connected - use /server to connect", ""); } - in_update(""); + iline inp={{NULL, 0, 0}, {NULL, 0, 0}}; + in_update(inp); struct timeval timeout; - char *inp=NULL; int state=0; // odd-numbered states are fatal while(!(state%2)) { @@ -243,21 +243,22 @@ int main(int argc, char *argv[]) switch(state) { case 3: // TODO: fix this stuff (inp isn't the right thing any more) - if(!inp) + if(!bufs[cbuf].input.line[bufs[cbuf].input.ptr]) { - fprintf(stderr, "\nInternal error - state==3 and inp is NULL!\n"); + fprintf(stderr, "\nInternal error - state==3 and inputline is NULL!\n"); break; } - if(*inp) + char *iinput=strdup(bufs[cbuf].input.line[bufs[cbuf].input.ptr]); + if(iinput&&*iinput) // ignore empty lines, and ignore if iinput is NULL { fflush(stdout); - char *deq=slash_dequote(inp); // dequote - free(inp); - inp=deq; - if(*inp=='/') + char *deq=slash_dequote(iinput); // dequote + free(iinput); + iinput=deq; + if(*iinput=='/') { - state=cmd_handle(inp, &qmsg, &master, &fdmax); - free(inp);inp=NULL; + state=cmd_handle(iinput, &qmsg, &master, &fdmax); + free(iinput);iinput=NULL; } else { @@ -267,8 +268,8 @@ int main(int argc, char *argv[]) { if(bufs[cbuf].live) { - char pmsg[12+strlen(bufs[cbuf].bname)+strlen(inp)]; - sprintf(pmsg, "PRIVMSG %s :%s", bufs[cbuf].bname, inp); + char pmsg[12+strlen(bufs[cbuf].bname)+strlen(iinput)]; + sprintf(pmsg, "PRIVMSG %s :%s", bufs[cbuf].bname, iinput); irc_tx(bufs[cbuf].handle, pmsg); char tag[maxnlen+4]; memset(tag, ' ', maxnlen+3); @@ -276,7 +277,7 @@ int main(int argc, char *argv[]) crush(&cnick, maxnlen); sprintf(tag+maxnlen-strlen(cnick), "<%s> ", cnick); free(cnick); - w_buf_print(cbuf, c_msg[0], inp, tag); + w_buf_print(cbuf, c_msg[0], iinput, tag); } else { @@ -292,7 +293,7 @@ int main(int argc, char *argv[]) { w_buf_print(cbuf, c_err, "Can't talk - view is not a channel!", ""); } - free(inp);inp=NULL; + free(iinput);iinput=NULL; state=0; } }