iHeavy surgery on tgetch. - irc - Unnamed repository; edit this file 'description' to name the repository. Err vernunftzentrum.de 70 hgit clone git://vernunftzentrum.de/irc.git URL:git://vernunftzentrum.de/irc.git vernunftzentrum.de 70 1Log /ckeen/repos/irc/log.gph vernunftzentrum.de 70 1Files /ckeen/repos/irc/files.gph vernunftzentrum.de 70 1Refs /ckeen/repos/irc/refs.gph vernunftzentrum.de 70 1README /ckeen/repos/irc/file/README.gph vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1commit 43b2c32a6d4ddbb64edbd7428a7d0a425cab6e96 /ckeen/repos/irc/commit/43b2c32a6d4ddbb64edbd7428a7d0a425cab6e96.gph vernunftzentrum.de 70 1parent 110c0a8075a87cf1991233c158ad51fe69e48e2a /ckeen/repos/irc/commit/110c0a8075a87cf1991233c158ad51fe69e48e2a.gph vernunftzentrum.de 70 hAuthor: Quentin Carbonneaux URL:mailto:qcarbonneaux@gmail.com vernunftzentrum.de 70 iDate: Mon, 12 Mar 2012 09:40:37 +0100 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iHeavy surgery on tgetch. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iThe code layout used in the main switch was unified. The printer was re Err vernunftzentrum.de 70 iwritten from scratch to handle long input lines. The code is supposed to Err vernunftzentrum.de 70 iresist to terminal resizes (with some slight refresh problems). Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i irc.c | 62 +++++++++++++++++++++---------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i1 file changed, 42 insertions(+), 20 deletions(-) Err vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1diff --git a/irc.c b/irc.c /ckeen/repos/irc/file/irc.c.gph vernunftzentrum.de 70 i@@ -410,14 +410,20 @@ static void Err vernunftzentrum.de 70 i tgetch(void) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i static char l[BufSz]; Err vernunftzentrum.de 70 i- static size_t cu=0, len=0; Err vernunftzentrum.de 70 i+ static size_t shft, cu, len; Err vernunftzentrum.de 70 i size_t dirty=len+1, i; Err vernunftzentrum.de 70 i int c; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i c=wgetch(scr.iw); Err vernunftzentrum.de 70 i switch (c) { Err vernunftzentrum.de 70 i- case 0xe: ch=(ch+1)%nch; tredraw(); return; Err vernunftzentrum.de 70 i- case 0x10: ch=(ch+nch-1)%nch; tredraw(); return; Err vernunftzentrum.de 70 i+ case CTRL('n'): //0xe: Err vernunftzentrum.de 70 i+ ch=(ch+1)%nch; Err vernunftzentrum.de 70 i+ tredraw(); Err vernunftzentrum.de 70 i+ return; Err vernunftzentrum.de 70 i+ case CTRL('p'): //0x10: Err vernunftzentrum.de 70 i+ ch=(ch+nch-1)%nch; Err vernunftzentrum.de 70 i+ tredraw(); Err vernunftzentrum.de 70 i+ return; Err vernunftzentrum.de 70 i case KEY_PPAGE: Err vernunftzentrum.de 70 i chl[ch].n+=SCROLL; Err vernunftzentrum.de 70 i tredraw(); Err vernunftzentrum.de 70 i@@ -427,14 +433,24 @@ tgetch(void) Err vernunftzentrum.de 70 i if (chl[ch].n<0) chl[ch].n=0; Err vernunftzentrum.de 70 i tredraw(); Err vernunftzentrum.de 70 i return; Err vernunftzentrum.de 70 i- case 0x1: cu=0; break; Err vernunftzentrum.de 70 i- case 0x5: cu=len; break; Err vernunftzentrum.de 70 i- case 0x2: Err vernunftzentrum.de 70 i- case KEY_LEFT: if (cu) cu--; break; Err vernunftzentrum.de 70 i- case 0x6: Err vernunftzentrum.de 70 i- case KEY_RIGHT: if (cu=scr.x/2 ? scr.x/2 : shft; Err vernunftzentrum.de 70 i+ while (cu>=scr.x+shft) Err vernunftzentrum.de 70 i+ dirty=0, shft += scr.x/2; Err vernunftzentrum.de 70 i+ if (dirty<=shft) Err vernunftzentrum.de 70 i+ i=shft; Err vernunftzentrum.de 70 i+ else if (dirty>scr.x+shft || dirty>len) Err vernunftzentrum.de 70 i+ goto mvcur; Err vernunftzentrum.de 70 i+ else Err vernunftzentrum.de 70 i+ i=dirty; Err vernunftzentrum.de 70 i+ wmove(scr.iw, 0, i-shft); Err vernunftzentrum.de 70 i+ wclrtoeol(scr.iw); Err vernunftzentrum.de 70 i+ for (; i-shft