diff --git a/buffer.c b/buffer.c index 985aafd..a398398 100644 --- a/buffer.c +++ b/buffer.c @@ -101,18 +101,19 @@ int redraw_buffer(int buf) int buf_print(int buf, colour lc, char *lt, bool nl) { - setcolour(lc); - if(nl) printf(CLA "\n"); - printf(LOCATE, height-2, 1); - printf("%s" CLR "\n", lt); - resetcol(); - printf(CLA "\n"); - if(buf) - return(add_to_buffer(buf, lc, lt)); - return(0); + if(buf==cbuf) + { + setcolour(lc); + if(nl) printf(CLA "\n"); + printf(LOCATE, height-2, 1); + printf("%s" CLR "\n", lt); + resetcol(); + printf(CLA "\n"); + } + return(add_to_buffer(buf, lc, lt)); } -void in_update(char *inp, int cbuf) +void in_update(char *inp) { printf(LOCATE, height-1, 1); // tab strip @@ -163,7 +164,7 @@ void in_update(char *inp, int cbuf) putchar(brack[1]); resetcol(); } - putchar('\n'); + printf(CLR "\n"); // input int ino=inp?strlen(inp):0; if(ino>78) diff --git a/buffer.h b/buffer.h index 51d12b2..b8486dc 100644 --- a/buffer.h +++ b/buffer.h @@ -48,6 +48,7 @@ typedef struct _buf buffer; int nbufs; +int cbuf; buffer *bufs; int init_buffer(int buf, btype type, char *bname, int nlines); @@ -55,4 +56,4 @@ int free_buffer(int buf, int *cbuf); int add_to_buffer(int buf, colour lc, char *lt); int redraw_buffer(int buf); int buf_print(int buf, colour lc, char *lt, bool nl); // don't include trailing \n, because buf_print appends CLR \n -void in_update(char *inp, int cbuf); +void in_update(char *inp); diff --git a/quirc.c b/quirc.c index 898494a..3add27b 100644 --- a/quirc.c +++ b/quirc.c @@ -250,7 +250,7 @@ int main(int argc, char *argv[]) bufs=(buffer *)malloc(sizeof(buffer)); init_buffer(0, STATUS, "status", buflines); // buf 0 is always STATUS nbufs=1; - int cbuf=0; + cbuf=0; bufs[0].nick=strdup(nick); fd_set master, readfds; FD_ZERO(&master); @@ -444,7 +444,7 @@ int main(int argc, char *argv[]) } else { - in_update(inp, cbuf); + in_update(inp); } } else @@ -489,18 +489,22 @@ int main(int argc, char *argv[]) strtok(NULL, " "); // dest strtok(NULL, " "); // @ or +, dunno what for char *ch=strtok(NULL, " "); // channel - if(strcmp(ch, chan)==0) + int b2; + for(b2=0;b2data=strdup(nn); - new->prev=NULL; - new->next=bufs[b].nlist; - if(bufs[b].nlist) - bufs[b].nlist->prev=new; - bufs[b].nlist=new; + char *nn; + while((nn=strtok(NULL, ":@ "))) + { + name *new=(name *)malloc(sizeof(name)); + new->data=strdup(nn); + new->prev=NULL; + new->next=bufs[b2].nlist; + if(bufs[b2].nlist) + bufs[b2].nlist->prev=new; + bufs[b2].nlist=new; + } } } break; @@ -508,10 +512,7 @@ int main(int argc, char *argv[]) ; char umsg[16+strlen(cmd+4)]; sprintf(umsg, "<<%d? %s", num, cmd+4); - if(cbuf==b) - buf_print(b, c_unn, umsg, true); - else - add_to_buffer(b, c_unn, umsg); + buf_print(b, c_unn, umsg, true); break; } } @@ -520,7 +521,7 @@ int main(int argc, char *argv[]) char *sender=strtok(NULL, " "); char pong[8+strlen(uname)+strlen(sender)]; sprintf(pong, "PONG %s %s", uname, sender+1); - irc_tx(bufs[cbuf].handle, pong); + irc_tx(fd, pong); } else if(strcmp(cmd, "MODE")==0) { @@ -528,10 +529,10 @@ int main(int argc, char *argv[]) { char joinmsg[8+strlen(chan)]; sprintf(joinmsg, "JOIN %s", chan); - irc_tx(bufs[cbuf].handle, joinmsg); + irc_tx(fd, joinmsg); char jmsg[16+strlen(chan)]; sprintf(jmsg, "auto-Joining %s", chan); - buf_print(cbuf, c_join[0], jmsg, true); + buf_print(b, c_join[0], jmsg, true); join=true; } // apart from using it as a trigger, we don't look at modes just yet @@ -550,43 +551,50 @@ int main(int argc, char *argv[]) src[maxnlen-1]=src[strlen(src)-1]; src[maxnlen]=0; } - if(*msg==1) // CTCP + int b2; + for(b2=0;b2 ", src); + wordline(msg, 3+max(maxnlen, strlen(src)), &out); + buf_print(b2, c_msg[1], out, true); + free(out); + } } } - else - { - char *out=(char *)malloc(5+max(maxnlen, strlen(src))); - memset(out, ' ', max(maxnlen-strlen(src), 0)); - out[max(maxnlen-strlen(src), 0)]=0; - sprintf(out+strlen(out), "<%s> ", src); - wordline(msg, 3+max(maxnlen, strlen(src)), &out); - buf_print(cbuf, c_msg[1], out, true); - free(out); - } } else if(strcmp(cmd, "NOTICE")==0) { @@ -624,7 +632,7 @@ int main(int argc, char *argv[]) out[max(maxnlen-strlen(src), 0)]=0; sprintf(out+strlen(out), "(from %s) ", src); wordline(msg, 9+max(maxnlen, strlen(src)), &out); - buf_print(cbuf, c_notice[1], out, true); + buf_print(b, c_notice[1], out, true); free(out); } else if(strcmp(cmd, "JOIN")==0) @@ -634,11 +642,10 @@ int main(int argc, char *argv[]) char *bang=strchr(src, '!'); if(bang) *bang=0; - if(strcmp(src, bufs[bufs[cbuf].server].nick)==0) + if(strcmp(src, bufs[b].nick)==0) { char dstr[20+strlen(src)+strlen(dest+1)]; sprintf(dstr, "You (%s) have joined %s", src, dest+1); - buf_print(cbuf, c_join[1], dstr, true); chan=strdup(dest+1); join=true; char cstr[16+strlen(chan)+strlen(server)]; @@ -648,6 +655,7 @@ int main(int argc, char *argv[]) init_buffer(nbufs-1, CHANNEL, chan, buflines); bufs[nbufs-1].server=bufs[cbuf].server; cbuf=nbufs-1; + buf_print(cbuf, c_join[1], dstr, true); bufs[cbuf].handle=bufs[bufs[cbuf].server].handle; } else @@ -658,16 +666,23 @@ int main(int argc, char *argv[]) src[maxnlen-1]=src[strlen(src)-1]; src[maxnlen]=0; } - char dstr[16+strlen(src)+strlen(dest+1)]; - sprintf(dstr, "=%s= has joined %s", src, dest+1); - buf_print(cbuf, c_join[1], dstr, true); - name *new=(name *)malloc(sizeof(name)); - new->data=strdup(src); - new->prev=NULL; - new->next=bufs[cbuf].nlist; - if(bufs[cbuf].nlist) - bufs[cbuf].nlist->prev=new; - bufs[cbuf].nlist=new; + int b2; + for(b2=0;b2data=strdup(src); + new->prev=NULL; + new->next=bufs[cbuf].nlist; + if(bufs[cbuf].nlist) + bufs[cbuf].nlist->prev=new; + bufs[cbuf].nlist=new; + } + } } resetcol(); } @@ -678,18 +693,17 @@ int main(int argc, char *argv[]) char *bang=strchr(src, '!'); if(bang) *bang=0; - if(strcmp(src, bufs[bufs[cbuf].server].nick)==0) + if(strcmp(src, bufs[b].nick)==0) { - char dstr[20+strlen(src)+strlen(dest)]; - sprintf(dstr, "You (%s) have left %s", src, dest); - buf_print(cbuf, c_part[1], dstr, true); chan=NULL; char cstr[24+strlen(server)]; sprintf(cstr, "quIRC - connected to %s", server); settitle(cstr); - int srv=bufs[cbuf].server; - free_buffer(cbuf, &cbuf); - cbuf=srv; + if((bufs[cbuf].server==b) && (bufs[cbuf].type==CHANNEL) && (strcmp(dest, bufs[cbuf].bname)==0)) + { + free_buffer(cbuf, &cbuf); + cbuf=b; + } } else { @@ -699,29 +713,36 @@ int main(int argc, char *argv[]) src[maxnlen-1]=src[strlen(src)-1]; src[maxnlen]=0; } - char dstr[16+strlen(src)+strlen(dest)]; - sprintf(dstr, "=%s= has left %s", src, dest); - buf_print(cbuf, c_part[1], dstr, true); - name *curr=bufs[cbuf].nlist; - while(curr) + int b2; + for(b2=0;b2next; - if(strcmp(curr->data, src)==0) + if((bufs[b2].server==b) && (bufs[b2].type==CHANNEL) && (strcmp(dest, bufs[b2].bname)==0)) { - if(curr->prev) + char dstr[16+strlen(src)+strlen(dest)]; + sprintf(dstr, "=%s= has left %s", src, dest); + buf_print(b2, c_part[1], dstr, true); + name *curr=bufs[b2].nlist; + while(curr) { - curr->prev->next=curr->next; + name *next=curr->next; + if(strcmp(curr->data, src)==0) + { + if(curr->prev) + { + curr->prev->next=curr->next; + } + else + { + bufs[b2].nlist=curr->next; + } + if(curr->next) + curr->next->prev=curr->prev; + free(curr->data); + free(curr); + } + curr=next; } - else - { - bufs[cbuf].nlist=curr->next; - } - if(curr->next) - curr->next->prev=curr->prev; - free(curr->data); - free(curr); } - curr=next; } } resetcol(); @@ -734,11 +755,18 @@ int main(int argc, char *argv[]) if(bang) *bang=0; setcolour(c_quit[1]); - if(strcmp(src, bufs[bufs[cbuf].server].nick)==0) // this shouldn't happen??? + if(strcmp(src, bufs[b].nick)==0) // this shouldn't happen??? { - char dstr[24+strlen(src)+strlen(server)+strlen(dest+1)]; - sprintf(dstr, "You (%s) have left %s (%s)", src, server, dest+1); - buf_print(cbuf, c_quit[1], dstr, true); + int b2; + for(b2=0;b2next; - if(strcmp(curr->data, src)==0) + if((bufs[b2].server==b) && (bufs[b2].type==CHANNEL) && (strcmp(dest+1, bufs[b2].bname)==0)) { - if(curr->prev) + char dstr[24+strlen(src)+strlen(server)+strlen(dest+1)]; + sprintf(dstr, "=%s= has left %s (%s)", src, server, dest+1); + buf_print(b2, c_quit[1], dstr, true); + name *curr=bufs[b2].nlist; + while(curr) { - curr->prev->next=curr->next; + name *next=curr->next; + if(strcmp(curr->data, src)==0) + { + if(curr->prev) + { + curr->prev->next=curr->next; + } + else + { + bufs[b2].nlist=curr->next; + } + if(curr->next) + curr->next->prev=curr->prev; + free(curr->data); + free(curr); + } + curr=next; } - else - { - bufs[cbuf].nlist=curr->next; - } - if(curr->next) - curr->next->prev=curr->prev; - free(curr->data); - free(curr); } - curr=next; } } resetcol(); @@ -783,11 +818,28 @@ int main(int argc, char *argv[]) if(bang) *bang=0; setcolour(c_nick[1]); - if(strcmp(dest+1, bufs[bufs[cbuf].server].nick)==0) + if(strcmp(dest+1, bufs[b].nick)==0) { char dstr[30+strlen(src)+strlen(dest+1)]; sprintf(dstr, "You (%s) are now known as %s", src, dest+1); - buf_print(cbuf, c_nick[1], dstr, true); + int b2; + for(b2=0;b2data, src)==0) + { + free(curr->data); + curr->data=strdup(dest+1); + } + curr=curr->next; + } + } + } } else { @@ -797,19 +849,26 @@ int main(int argc, char *argv[]) src[maxnlen-1]=src[strlen(src)-1]; src[maxnlen]=0; } - char dstr[30+strlen(src)+strlen(dest+1)]; - sprintf(dstr, "=%s= is now known as %s", src, dest+1); - buf_print(cbuf, c_nick[1], dstr, true); - } - name *curr=bufs[cbuf].nlist; - while(curr) - { - if(strcmp(curr->data, src)==0) + int b2; + for(b2=0;b2data); - curr->data=strdup(dest+1); + if((bufs[b2].server==b) && (bufs[b2].type==CHANNEL)) + { + name *curr=bufs[b2].nlist; + while(curr) + { + if(strcmp(curr->data, src)==0) + { + free(curr->data); + curr->data=strdup(dest+1); + char dstr[30+strlen(src)+strlen(dest+1)]; + sprintf(dstr, "=%s= is now known as %s", src, dest+1); + buf_print(b2, c_nick[1], dstr, true); + } + curr=curr->next; + } + } } - curr=curr->next; } resetcol(); } @@ -817,13 +876,13 @@ int main(int argc, char *argv[]) { char dstr[5+strlen(pdata)]; sprintf(dstr, "