Introduction
Introduction Statistics Contact Development Disclaimer Help
Factoring of pushf and pushm, plus minor changes. - irc - Unnamed repository; e…
git clone git://vernunftzentrum.de/irc.git
Log
Files
Refs
README
---
commit f87508a1f9fd98d217a8dbe07281835160a58116
parent 9853570e09cd34fc5fd6a4a0c03055e5012920ec
Author: Quentin Carbonneaux <[email protected]>
Date: Sat, 10 Mar 2012 17:01:15 +0100
Factoring of pushf and pushm, plus minor changes.
Pushm was no used in the current code, I inlined it in pushf to save
lines and factor logic. I removed the call for tredraw to avoid blinking
and only redrawn the last line.
Some minor changes were done:
* NOTICE, and motd are now handled by the scmd function.
* Tredraw was slightly modified to make use of the last line of scr.mw.
* The sz element of channels was moved from int to size_t.
Diffstat:
irc.c | 70 +++++++++++++++----------------
1 file changed, 33 insertions(+), 37 deletions(-)
---
diff --git a/irc.c b/irc.c
@@ -21,7 +21,7 @@
#include <locale.h>
#define SCROLL 15
-#define DATEFMT "%T"
+#define DATEFMT "%H:%M"
#define PFMT "%-12s < %s"
enum { ChanLen = 64, LineLen = 512, MaxChans = 16, BufSz = 2048, LogSz = 4096 …
@@ -39,7 +39,8 @@ int eof; /* EOF reached on server side. */
struct Chan {
char name[ChanLen];
char *buf, *eol;
- size_t n, sz; /* n is the scoll offset, sz is size of buf. */
+ int n; /* Scroll offset. */
+ size_t sz; /* size of buf. */
} chl[MaxChans];
int nch, ch; /* Current number of channels, and current channel. */
char outb[BufSz], *outp=outb; /* Output buffer. */
@@ -176,48 +177,39 @@ chdel(char *name)
}
static void
-pushm(int cn, char *msg)
-{
- struct Chan * const c=&chl[cn];
- size_t blen=c->eol-c->buf, l=strlen(msg);
-
- if (blen+l>=c->sz) {
- do
- c->sz *= 2;
- while (blen+l>=c->sz);
- c->buf=realloc(c->buf, c->sz);
- if (!c->buf) panic("Out of memory.");
- c->eol = c->buf+blen;
- }
- strcpy(c->eol, msg);
- c->eol+=l;
- if (cn==ch && c->n==0) /* Redraw if the current channel was modified. …
- tredraw();
-}
-
-static void
pushf(int cn, const char *fmt, ...)
{
- //struct Chan *const c=&chl[cn];
- char lb[512];
- size_t n;
+ struct Chan *const c=&chl[cn];
+ size_t n, blen=c->eol-c->buf;
+ va_list vl;
time_t t;
struct tm *tm;
- va_list vl;
+ if (blen+LineLen>=c->sz) {
+ c->sz *= 2;
+ c->buf=realloc(c->buf, c->sz);
+ if (!c->buf) panic("Out of memory.");
+ c->eol=c->buf+blen;
+ }
t=time(0);
- tm=localtime(&t);
- if (!tm)
- panic("localtime failed.");
- n=strftime(lb, sizeof lb, DATEFMT, tm);
- lb[n]=' ';
- if (!n)
- panic("strftime failed.");
+ if (!(tm=localtime(&t))) panic("localtime failed.");
+ n=strftime(c->eol, LineLen, DATEFMT, tm);
+ c->eol[n++] = ' ';
va_start(vl, fmt);
- n+=vsnprintf(lb+n+1, sizeof lb-n-3, fmt, vl);
+ n+=vsnprintf(c->eol+n, LineLen-n-1, fmt, vl);
va_end(vl);
- strcat(lb, "\n");
- pushm(cn, lb);
+ strcat(c->eol, "\n");
+ if (n>=LineLen-1)
+ c->eol+=LineLen-1;
+ else
+ c->eol+=n+1;
+ if (cn==ch && c->n==0) {
+ char *p=c->eol-n-1;
+ if (p!=c->buf) waddch(scr.mw, '\n');
+ for (; p<c->eol-1; p++)
+ waddch(scr.mw, *p);
+ wrefresh(scr.mw);
+ }
}
static void
@@ -257,6 +249,9 @@ scmd(char *usr, char *cmd, char *par, char *data)
}
} else if (!strcmp(cmd, "QUIT")) { /* Commands we don't care about. */
return;
+ } else if (!strcmp(cmd, "NOTICE") || !strcmp(cmd, "375")
+ || !strcmp(cmd, "372") || !strcmp(cmd, "376")) {
+ pushf(0, "%s", data?data:"");
} else
pushf(0, "%s - %s %s", cmd, par, data?data:"(null)");
}
@@ -332,6 +327,7 @@ tinit(void)
|| (scr.iw=newwin(1, scr.x, scr.y-1, 0))==0)
panic("Cannot create windows.");
keypad(scr.iw, 1);
+ scrollok(scr.mw, 1);
if (has_colors()==TRUE) {
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
@@ -344,7 +340,7 @@ tredraw(void)
{
struct Chan * const c=&chl[ch];
char *q, *p;
- int llen=0, nl=0;
+ int llen=0, nl=-1;
if (c->eol==c->buf) {
wclear(scr.mw);
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.