iFactoring of pushf and pushm, plus minor changes. - 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 f87508a1f9fd98d217a8dbe07281835160a58116 /ckeen/repos/irc/commit/f87508a1f9fd98d217a8dbe07281835160a58116.gph vernunftzentrum.de 70 1parent 9853570e09cd34fc5fd6a4a0c03055e5012920ec /ckeen/repos/irc/commit/9853570e09cd34fc5fd6a4a0c03055e5012920ec.gph vernunftzentrum.de 70 hAuthor: Quentin Carbonneaux URL:mailto:qcarbonneaux@gmail.com vernunftzentrum.de 70 iDate: Sat, 10 Mar 2012 17:01:15 +0100 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iFactoring of pushf and pushm, plus minor changes. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iPushm was no used in the current code, I inlined it in pushf to save Err vernunftzentrum.de 70 ilines and factor logic. I removed the call for tredraw to avoid blinking Err vernunftzentrum.de 70 iand only redrawn the last line. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iSome minor changes were done: Err vernunftzentrum.de 70 i* NOTICE, and motd are now handled by the scmd function. Err vernunftzentrum.de 70 i* Tredraw was slightly modified to make use of the last line of scr.mw. Err vernunftzentrum.de 70 i* The sz element of channels was moved from int to size_t. Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i irc.c | 70 +++++++++++++++---------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i1 file changed, 33 insertions(+), 37 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@@ -21,7 +21,7 @@ Err vernunftzentrum.de 70 i #include Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i #define SCROLL 15 Err vernunftzentrum.de 70 i-#define DATEFMT "%T" Err vernunftzentrum.de 70 i+#define DATEFMT "%H:%M" Err vernunftzentrum.de 70 i #define PFMT "%-12s < %s" Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i enum { ChanLen = 64, LineLen = 512, MaxChans = 16, BufSz = 2048, LogSz = 4096 }; Err vernunftzentrum.de 70 i@@ -39,7 +39,8 @@ int eof; /* EOF reached on server side. */ Err vernunftzentrum.de 70 i struct Chan { Err vernunftzentrum.de 70 i char name[ChanLen]; Err vernunftzentrum.de 70 i char *buf, *eol; Err vernunftzentrum.de 70 i- size_t n, sz; /* n is the scoll offset, sz is size of buf. */ Err vernunftzentrum.de 70 i+ int n; /* Scroll offset. */ Err vernunftzentrum.de 70 i+ size_t sz; /* size of buf. */ Err vernunftzentrum.de 70 i } chl[MaxChans]; Err vernunftzentrum.de 70 i int nch, ch; /* Current number of channels, and current channel. */ Err vernunftzentrum.de 70 i char outb[BufSz], *outp=outb; /* Output buffer. */ Err vernunftzentrum.de 70 i@@ -176,48 +177,39 @@ chdel(char *name) Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i static void Err vernunftzentrum.de 70 i-pushm(int cn, char *msg) Err vernunftzentrum.de 70 i-{ Err vernunftzentrum.de 70 i- struct Chan * const c=&chl[cn]; Err vernunftzentrum.de 70 i- size_t blen=c->eol-c->buf, l=strlen(msg); Err vernunftzentrum.de 70 i- Err vernunftzentrum.de 70 i- if (blen+l>=c->sz) { Err vernunftzentrum.de 70 i- do Err vernunftzentrum.de 70 i- c->sz *= 2; Err vernunftzentrum.de 70 i- while (blen+l>=c->sz); Err vernunftzentrum.de 70 i- c->buf=realloc(c->buf, c->sz); Err vernunftzentrum.de 70 i- if (!c->buf) panic("Out of memory."); Err vernunftzentrum.de 70 i- c->eol = c->buf+blen; Err vernunftzentrum.de 70 i- } Err vernunftzentrum.de 70 i- strcpy(c->eol, msg); Err vernunftzentrum.de 70 i- c->eol+=l; Err vernunftzentrum.de 70 i- if (cn==ch && c->n==0) /* Redraw if the current channel was modified. */ Err vernunftzentrum.de 70 i- tredraw(); Err vernunftzentrum.de 70 i-} Err vernunftzentrum.de 70 i- Err vernunftzentrum.de 70 i-static void Err vernunftzentrum.de 70 i pushf(int cn, const char *fmt, ...) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i- //struct Chan *const c=&chl[cn]; Err vernunftzentrum.de 70 i- char lb[512]; Err vernunftzentrum.de 70 i- size_t n; Err vernunftzentrum.de 70 i+ struct Chan *const c=&chl[cn]; Err vernunftzentrum.de 70 i+ size_t n, blen=c->eol-c->buf; Err vernunftzentrum.de 70 i+ va_list vl; Err vernunftzentrum.de 70 i time_t t; Err vernunftzentrum.de 70 i struct tm *tm; Err vernunftzentrum.de 70 i- va_list vl; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+ if (blen+LineLen>=c->sz) { Err vernunftzentrum.de 70 i+ c->sz *= 2; Err vernunftzentrum.de 70 i+ c->buf=realloc(c->buf, c->sz); Err vernunftzentrum.de 70 i+ if (!c->buf) panic("Out of memory."); Err vernunftzentrum.de 70 i+ c->eol=c->buf+blen; Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i t=time(0); Err vernunftzentrum.de 70 i- tm=localtime(&t); Err vernunftzentrum.de 70 i- if (!tm) Err vernunftzentrum.de 70 i- panic("localtime failed."); Err vernunftzentrum.de 70 i- n=strftime(lb, sizeof lb, DATEFMT, tm); Err vernunftzentrum.de 70 i- lb[n]=' '; Err vernunftzentrum.de 70 i- if (!n) Err vernunftzentrum.de 70 i- panic("strftime failed."); Err vernunftzentrum.de 70 i+ if (!(tm=localtime(&t))) panic("localtime failed."); Err vernunftzentrum.de 70 i+ n=strftime(c->eol, LineLen, DATEFMT, tm); Err vernunftzentrum.de 70 i+ c->eol[n++] = ' '; Err vernunftzentrum.de 70 i va_start(vl, fmt); Err vernunftzentrum.de 70 i- n+=vsnprintf(lb+n+1, sizeof lb-n-3, fmt, vl); Err vernunftzentrum.de 70 i+ n+=vsnprintf(c->eol+n, LineLen-n-1, fmt, vl); Err vernunftzentrum.de 70 i va_end(vl); Err vernunftzentrum.de 70 i- strcat(lb, "\n"); Err vernunftzentrum.de 70 i- pushm(cn, lb); Err vernunftzentrum.de 70 i+ strcat(c->eol, "\n"); Err vernunftzentrum.de 70 i+ if (n>=LineLen-1) Err vernunftzentrum.de 70 i+ c->eol+=LineLen-1; Err vernunftzentrum.de 70 i+ else Err vernunftzentrum.de 70 i+ c->eol+=n+1; Err vernunftzentrum.de 70 i+ if (cn==ch && c->n==0) { Err vernunftzentrum.de 70 i+ char *p=c->eol-n-1; Err vernunftzentrum.de 70 i+ if (p!=c->buf) waddch(scr.mw, '\n'); Err vernunftzentrum.de 70 i+ for (; peol-1; p++) Err vernunftzentrum.de 70 i+ waddch(scr.mw, *p); Err vernunftzentrum.de 70 i+ wrefresh(scr.mw); Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i static void Err vernunftzentrum.de 70 i@@ -257,6 +249,9 @@ scmd(char *usr, char *cmd, char *par, char *data) Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i } else if (!strcmp(cmd, "QUIT")) { /* Commands we don't care about. */ Err vernunftzentrum.de 70 i return; Err vernunftzentrum.de 70 i+ } else if (!strcmp(cmd, "NOTICE") || !strcmp(cmd, "375") Err vernunftzentrum.de 70 i+ || !strcmp(cmd, "372") || !strcmp(cmd, "376")) { Err vernunftzentrum.de 70 i+ pushf(0, "%s", data?data:""); Err vernunftzentrum.de 70 i } else Err vernunftzentrum.de 70 i pushf(0, "%s - %s %s", cmd, par, data?data:"(null)"); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i@@ -332,6 +327,7 @@ tinit(void) Err vernunftzentrum.de 70 i || (scr.iw=newwin(1, scr.x, scr.y-1, 0))==0) Err vernunftzentrum.de 70 i panic("Cannot create windows."); Err vernunftzentrum.de 70 i keypad(scr.iw, 1); Err vernunftzentrum.de 70 i+ scrollok(scr.mw, 1); Err vernunftzentrum.de 70 i if (has_colors()==TRUE) { Err vernunftzentrum.de 70 i start_color(); Err vernunftzentrum.de 70 i init_pair(1, COLOR_WHITE, COLOR_BLUE); Err vernunftzentrum.de 70 i@@ -344,7 +340,7 @@ tredraw(void) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i struct Chan * const c=&chl[ch]; Err vernunftzentrum.de 70 i char *q, *p; Err vernunftzentrum.de 70 i- int llen=0, nl=0; Err vernunftzentrum.de 70 i+ int llen=0, nl=-1; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i if (c->eol==c->buf) { Err vernunftzentrum.de 70 i wclear(scr.mw); Err vernunftzentrum.de 70 .