src/main.c
changeset 0 586472add385
child 6 7eb12be31bb5
new file mode 100644
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,135 @@
+/**
+ *  $Id: main.c 51 2008-01-10 00:19:39Z mbroeker $
+ * $URL: http://localhost/svn/c/mcbot/trunk/src/main.c $
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include <signal.h>
+#include <locale.h>
+#include <libintl.h>
+
+#include <mcbot.h>
+#include <config.h>
+
+#ifndef CONFIG_FILE
+#define CONFIG_FILE "/var/lib/nobody/.mcbotrc"
+#endif
+
+#ifndef LOCALE_PATH
+#define LOCALE_PATH "/var/lib/nobody/data/locale"
+#endif
+
+short active = 1;
+
+void sigproc ()
+{
+    signal (SIGTERM, sigproc);
+    active = 0;
+}
+
+int main (int argc, char **argv)
+{
+    UC uc;
+    MSG message;
+    char buf[513];
+    char *msg;
+    char *command;
+    int len;
+
+    if (bindtextdomain ("mcbot", LOCALE_PATH) != NULL) {
+        (void)textdomain ("mcbot");
+        (void)setlocale (LC_MESSAGES, "");
+    }
+
+    printf ("mcbot-%1.2f\n", VERSION);
+
+    if ((len = config (&uc, CONFIG_FILE)) != 0) {
+        switch (len) {
+        case -1:
+            printf ("You need to create a config file %s\n", CONFIG_FILE);
+            break;
+        case -2:
+            printf
+                ("You need at least entries for user, password, server and channel in your config file %s\n",
+                 CONFIG_FILE);
+            break;
+        }
+        return len;
+    }
+
+    if (uc.nick)
+        message.nick = uc.nick;
+    else
+        return -1;
+
+    if (!(message.stream = irc_connect (uc.server, uc.port)))
+        return EXIT_FAILURE;
+
+    if ((len = irc_login (message.stream, uc.nick, uc.pass)) != 0) {
+        switch (len) {
+        case IRC_GENERAL_ERROR:
+            printf ("GENERAL ERROR\n");
+            break;
+        case IRC_LOGIN_ERROR:
+            printf ("LOGIN ERROR\n");
+            break;
+        default:
+            printf ("Unknown Error %d\n", len);
+        }
+        return len;
+    }
+
+    signal (SIGTERM, sigproc);
+
+    if (uc.channel) {
+        fprintf (message.stream, "JOIN :%s\r\n", uc.channel);
+        if (uc.topic)
+            fprintf (message.stream, "TOPIC %s :%s\r\n", uc.channel, uc.topic);
+    }
+
+    while (active) {
+        if (fgets (buf, 512, message.stream) == NULL) {
+            active = 0;
+            break;
+        }
+
+        if ((command = irc_parsemessage (buf, &message))) {
+            printf ("%10s %s %s\n", command, message.channel, message.line);
+        } else {
+            if ((msg = parse (&message, &active)) != NULL) {
+                fprintf (message.stream, "%s\r\n", msg);
+                printf ("%10s %s", "WRITE", msg);
+            }
+        }
+        *buf = 0;
+    }
+    printf ("\n\nClosing Connection\n\n");
+    fclose (message.stream);
+
+    /*
+     * cleanup
+     */
+
+    if (uc.nick)
+        free (uc.nick);
+    if (uc.pass)
+        free (uc.pass);
+    if (uc.server)
+        free (uc.server);
+    if (uc.channel)
+        free (uc.channel);
+    if (uc.topic)
+        free (uc.topic);
+
+    return EXIT_SUCCESS;
+}