privmsg support, thanks Evil_Bob! - irc - IRC client based on c9x.me/irc client (HTM) git clone git://git.codemadness.org/irc (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 1d3c109eb02c514ecedda65cd1bda5256ef0c6c2 (DIR) parent 48569cdb36dd1a71f3221390b8f25e2ec62fecd7 (HTM) Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu> Date: Wed, 18 Jan 2017 15:12:44 -0500 privmsg support, thanks Evil_Bob! Diffstat: M irc.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) --- (DIR) diff --git a/irc.c b/irc.c @@ -238,7 +238,7 @@ dial(const char *host, const char *service) } static int -chadd(char *name) +chadd(char *name, int change) { if (nch >= MaxChans || strlen(name) >= ChanLen) return -1; @@ -249,7 +249,9 @@ chadd(char *name) panic("Out of memory."); chl[nch].eol = chl[nch].buf; chl[nch].n = 0; - ch = nch++; + if (change) + ch = nch; + nch++; tdrawbar(); return nch; } @@ -376,7 +378,7 @@ static void scmd(char *usr, char *cmd, char *par, char *data) { int s, c; - char *pm = strtok(par, " "); + char *pm = strtok(par, " "), *chan; if (!usr) usr = "?"; @@ -388,7 +390,16 @@ scmd(char *usr, char *cmd, char *par, char *data) if (!strcmp(cmd, "PRIVMSG")) { if (!pm || !data) return; - c = chfind(pm); + if (strchr("&#!+.~", pm[0])) + chan = pm; + else + chan = usr; + if (!(c = chfind(chan))) { + if (chadd(chan, 0) < 0) + return; + tredraw(); + } + c = chfind(chan); if (strcasestr(data, nick)) { pushf(c, PFMTHIGH, usr, data); chl[c].high |= ch != c; @@ -453,7 +464,7 @@ uparse(char *m) p += 1 + (p[1] == ' '); p = strtok(p, " "); while (p) { - if (chadd(p) < 0) + if (chadd(p, 1) < 0) break; sndf("JOIN %s", p); p = strtok(0, " "); @@ -783,7 +794,7 @@ main(int argc, char *argv[]) user = "anonymous"; tinit(); sfd = dial(server, port); - chadd("*server*"); + chadd("*server*", 1); sndf("NICK %s", nick); sndf("USER %s 8 * :%s", user, user); sndf("MODE %s +i", nick);