]> git.armaanb.net Git - sic.git/blobdiff - sic.c
new stuff
[sic.git] / sic.c
diff --git a/sic.c b/sic.c
index 1c286f448565ee45b341f578f09f3ad0d526ed97..9b06c6bf937a7f8dfc716a83782c143be77d5302 100644 (file)
--- a/sic.c
+++ b/sic.c
@@ -22,11 +22,12 @@ enum { Tnick, Tuser, Tcmd, Tchan, Targ, Ttext, Tlast };
 static const char *ping = "PING irc.oftc.net\r\n";
 static const char *host = "irc.oftc.net";
 static const int port = 6667;
-static const char *nick = "garbeam2";
+static const char *nick = "arg";
 static const char *fullname = "Anselm R. Garbe";
 static const char *password = NULL;
 
 static char bufin[MAXMSG], bufout[MAXMSG];
+static char channel[256];
 static int srv;
 static time_t trespond;
 
@@ -52,7 +53,7 @@ pout(char *channel, char *msg)
        time_t t = time(0);
 
        strftime(timestr, sizeof(timestr), "%a %R", localtime(&t));
-       fprintf(stdout, "%s:\t%s\t%s\n", channel, timestr, msg);
+       fprintf(stdout, "%s: %s %s\n", channel, timestr, msg);
 }
 
 static void
@@ -72,7 +73,7 @@ parsein(char *msg)
        if((p = strchr(msg, ' ')))
                *(p++) = 0;
        if(msg[0] != '/' && msg[0] != 0) {
-               privmsg(msg, p);
+               privmsg(channel, p);
                return;
        }
        if((p = strchr(&msg[3], ' ')))
@@ -92,6 +93,12 @@ parsein(char *msg)
                else
                        snprintf(bufout, sizeof(bufout), "PART %s :sic\r\n", &msg[3]);
                break;
+       case 'm':
+               privmsg(msg, p);
+               break;
+       case 's':
+               strncpy(channel, msg, sizeof(channel));
+               break;
        case 't':
                snprintf(bufout, sizeof(bufout), "TOPIC %s :%s\r\n", &msg[3], p);
                break;
@@ -220,8 +227,7 @@ parsesrv(char *msg)
        else if(!strncmp("NOTICE", argv[Tcmd], 7))
                snprintf(bufout, sizeof(bufout), "-!- \"%s\")",
                                argv[Ttext] ? argv[Ttext] : "");
-       else if(!strncmp("PRIVMSG", argv[Tcmd], 8))
-               snprintf(bufout, sizeof(bufout), "<%s> %s",
+       else if(!strncmp("PRIVMSG", argv[Tcmd], 8)) snprintf(bufout, sizeof(bufout), "<%s> %s",
                                argv[Tnick], argv[Ttext] ? argv[Ttext] : "");
        if(!argv[Tchan] || !strncmp(argv[Tchan], nick, strlen(nick)))
                pout(argv[Tnick], bufout);
@@ -229,34 +235,13 @@ parsesrv(char *msg)
                pout(argv[Tchan], bufout);
 }
 
-static int
-tcpopen()
-{
-       int fd = -1;
-       struct sockaddr_in addr = { 0 };
-       struct hostent *hp;
-       
-       /* init */
-       if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
-               return -1;
-       hp = gethostbyname(host);
-       addr.sin_family = AF_INET;
-       addr.sin_port = htons(port);
-       bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
-
-       if(connect(fd, (struct sockaddr *) &addr,
-                               sizeof(struct sockaddr_in))) {
-               close(fd);
-               return -1;
-       }
-       return fd;
-}
-
 int
 main(int argc, char *argv[])
 {
        int i;
        struct timeval tv;
+       struct hostent *hp;
+       struct sockaddr_in addr = { 0 };
        fd_set rd;
 
        for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
@@ -272,10 +257,21 @@ main(int argc, char *argv[])
                }
        }
 
-       if((srv = tcpopen()) == -1) {
+       /* init */
+       if((srv = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+               fprintf(stderr, "sic: cannot connect server '%s'\n", host);
+               exit(EXIT_FAILURE);
+       }
+       hp = gethostbyname(host);
+       addr.sin_family = AF_INET;
+       addr.sin_port = htons(port);
+       bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
+       if(connect(srv, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))) {
+               close(srv);
                fprintf(stderr, "sic: cannot connect server '%s'\n", host);
                exit(EXIT_FAILURE);
        }
+
        /* login */
        if(password)
                snprintf(bufout, sizeof(bufout),
@@ -286,6 +282,7 @@ main(int argc, char *argv[])
                                 nick, nick, host, fullname ? fullname : nick);
        write(srv, bufout, strlen(bufout));
 
+       channel[0] = 0;
        setbuf(stdout, NULL); /* unbuffered stdout */
        for(;;) {
                FD_ZERO(&rd);