URI: 
       some more simplifications - sic - simple irc client
  HTML git clone git://git.suckless.org/sic
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit cb68ce9e2c8406bd19fad4376dd024b623946d66
   DIR parent 5569a14e8edbc4e8e219b28658c7194201ed0417
  HTML Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Thu,  8 Feb 2007 14:51:04 +0100
       
       some more simplifications
       Diffstat:
         M sic.c                               |      78 ++++++++-----------------------
       
       1 file changed, 20 insertions(+), 58 deletions(-)
       ---
   DIR diff --git a/sic.c b/sic.c
       @@ -16,8 +16,6 @@
        #define PINGTIMEOUT 300
        #define MAXMSG 4096
        
       -enum { Tnick, Tuser, Tcmd, Tchan, Targ, Ttext, Tlast };
       -
        static char *server = "irc.oftc.net";
        static unsigned short port = 6667;
        static char *nick = NULL;
       @@ -95,82 +93,46 @@ parsein(char *msg) {
                write(srv, bufout, strlen(bufout));
        }
        
       -static unsigned int
       -tokenize(char **result, unsigned int reslen, char *str, char delim) {
       -        char *p, *n;
       -        unsigned int i = 0;
       -
       -        if(!str)
       -                return 0;
       -        for(n = str; *n == delim; n++);
       -        p = n;
       -        for(i = 0; *n != 0;) {
       -                if(i == reslen)
       -                        return i;
       -                if(*n == delim) {
       -                        *n = 0;
       -                        if(strlen(p))
       -                                result[i++] = p;
       -                        p = ++n;
       -                } else
       -                        n++;
       -        }
       -        if((i < reslen) && (p < n) && strlen(p))
       -                result[i++] = p;
       -        return i;        /* number of tokens */
       -}
       -
        static void
        parsesrv(char *msg) {
       -        char *argv[Tlast], *cmd, *p;
       -        int i;
       +        char *chan, *cmd, *p, *txt, *usr; 
        
                if(!msg || !(*msg))
                        return;
       -        for(i = 0; i < Tlast; i++)
       -                argv[i] = NULL;
       -        /* <bufout>  ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
       -         * <prefix>   ::= <servername> | <nick> [ '!' <user> ] [ '@' <server> ]
       -         * <command>  ::= <letter> { <letter> } | <number> <number> <number>
       -         * <SPACE>    ::= ' ' { ' ' }
       -         * <params>   ::= <SPACE> [ ':' <trailing> | <middle> <params> ]
       -         * <middle>   ::= <Any *non-empty* sequence of octets not including SPACE
       -         * or NUL or CR or LF, the first of which may not be ':'>
       -         * <trailing> ::= <Any, possibly *empty*, sequence of octets not including NUL or CR or LF>
       -         * <crlf>     ::= CR LF
       -         */
                if(msg[0] == ':') { /* check prefix */
       -                if (!(p = strchr(msg, ' ')))
       +                if(!(p = strchr(msg, ' ')))
                                return;
                        *p = 0;
                        for(++p; *p == ' '; p++);
                        cmd = p;
       -                argv[Tnick] = &msg[1];
       -                if((p = strchr(msg, '!'))) {
       +                usr = &msg[1];
       +                if((p = strchr(msg, '!')))
                                *p = 0;
       -                        argv[Tuser] = ++p;
       -                }
                } else
                        cmd = msg;
                /* remove CRLFs */
                for(p = cmd; p && *p != 0; p++)
                        if(*p == '\r' || *p == '\n')
                                *p = 0;
       -        if((p = strchr(cmd, ':'))) {
       -                *p = 0;
       -                argv[Ttext] = ++p;
       -        }
       -
       +        if(!strncmp("PONG", cmd, 4))
       +                return;
                if(!strncmp("PRIVMSG", cmd, 7) || !strncmp("PING", cmd, 4)) {
       -                if(tokenize(&argv[Tcmd], Tlast - Tcmd, cmd, ' ') != Tlast - Tcmd)
       +                if(!(p = strchr(cmd, ' ')))
                                return;
       -                if(!strncmp("PRIVMSG", argv[Tcmd], 8)) {
       -                        snprintf(bufout, sizeof bufout, "<%s> %s",
       -                                        argv[Tnick], argv[Ttext] ? argv[Ttext] : "");
       -                        pout(argv[Tchan], bufout);
       +                *p = 0;
       +                chan = ++p;
       +                for(; *p && *p != ' '; p++);
       +                *p = 0;
       +                if(!(p = strchr(++p, ':')))
       +                        return;
       +                *p = 0;
       +                txt = ++p;
       +                if(!strncmp("PRIVMSG", cmd, 8) && chan && txt) {
       +                        snprintf(bufout, sizeof bufout, "<%s> %s", usr, txt);
       +                        pout(chan, bufout);
                        }
       -                else if(!strncmp("PING", argv[Tcmd], 5)) {
       -                        snprintf(bufout, sizeof bufout, "PONG %s\r\n", argv[Ttext]);
       +                else if(!strncmp("PING", cmd, 5) && txt) {
       +                        snprintf(bufout, sizeof bufout, "PONG %s\r\n", txt);
                                write(srv, bufout, strlen(bufout));
                        }
                        return;