Usermode - Working on AxWin3 SubWin widget (also API change for SysSpawn)
[tpg/acess2.git] / Usermode / Applications / irc_src / main.c
index cf01d60..901e8ac 100644 (file)
@@ -113,10 +113,12 @@ int main(int argc, const char *argv[], const char *envp[])
        \r
        // HACK: Static server entry\r
        // UCC (University [of Western Australia] Computer Club) IRC Server\r
-//     gWindow_Status.Server = Server_Connect( "UCC", "130.95.13.18", 6667 );\r
-       gWindow_Status.Server = Server_Connect( "Freenode", "89.16.176.16", 6667 );\r
+       gWindow_Status.Server = Server_Connect( "UCC", "130.95.13.18", 6667 );\r
+       // Freenode (#osdev)\r
+//     gWindow_Status.Server = Server_Connect( "Freenode", "89.16.176.16", 6667 );\r
 //     gWindow_Status.Server = Server_Connect( "Host", "10.0.2.2", 6667 );\r
-//     gWindow_Status.Server = Server_Connect( "BitlBee", "192.168.1.34", 6667 );\r
+       // Local server\r
+//     gWindow_Status.Server = Server_Connect( "BitlBee", "192.168.1.39", 6667 );\r
        \r
        if( !gWindow_Status.Server )\r
                return -1;\r
@@ -205,6 +207,9 @@ int ParseArguments(int argc, const char *argv[])
        return 0;\r
 }\r
 \r
+/**\r
+ * \brief Handle a line from the prompt\r
+ */\r
 int ParseUserCommand(char *String)\r
 {\r
        if( String[0] == '/' )\r
@@ -357,8 +362,7 @@ tMessage *Message_Append(tServer *Server, int Type, const char *Source, const ch
        // Determine if it's a channel or PM message\r
        else if( Dest[0] == '#' || Dest[0] == '&' )     // TODO: Better determining here\r
        {\r
-               tWindow *prev = NULL;\r
-               for(win = gpWindows; win; prev = win, win = win->Next)\r
+               for(win = gpWindows; win; win = win->Next)\r
                {\r
                        if( win->Server == Server && strcmp(win->Name, Dest) == 0 )\r
                        {\r
@@ -520,11 +524,12 @@ void ParseServerLine(tServer *Server, char *Line)
         int    pos = 0;\r
        char    *ident, *cmd;\r
 \r
-       _SysDebug("Server %s: Line = %s", Server->Name, Line);  \r
+       _SysDebug("[%s] %s", Server->Name, Line);       \r
        \r
        // Message?\r
        if( *Line == ':' )\r
        {\r
+               pos ++;\r
                ident = GetValue(Line, &pos);   // Ident (user or server)\r
                cmd = GetValue(Line, &pos);\r
                \r
@@ -548,18 +553,29 @@ void ParseServerLine(tServer *Server, char *Line)
                        \r
                        switch(num)\r
                        {\r
+                       case 332:       // Topic\r
+                               user = message; // Channel\r
+                               message = Line + pos + 1;       // Topic\r
+                               Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Topic: %s", message);\r
+                               break;\r
+                       case 333:       // Topic set by\r
+                               user = message; // Channel\r
+                               message = GetValue(Line, &pos); // User\r
+                               GetValue(Line, &pos);   // Timestamp\r
+                               Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Set by %s", message);\r
+                               break;\r
                        case 353:       // /NAMES list\r
                                // <user> = <channel> :list\r
-//                             GetValue(Line, &pos);   // '='\r
+                               // '=' was eaten in and set to message\r
                                user = GetValue(Line, &pos);    // Actually channel\r
                                message = Line + pos + 1;       // List\r
-                               Message_AppendF(Server, MSG_TYPE_SERVER, user, "", "Names: %s", message);\r
+                               Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Names: %s", message);\r
                                break;\r
                        case 366:       // end of /NAMES list\r
                                // <user> <channel> :msg\r
                                user = message;\r
                                message = Line + pos + 1;\r
-                               Message_Append(Server, MSG_TYPE_SERVER, user, "", message);\r
+                               Message_Append(Server, MSG_TYPE_SERVER, user, user, message);\r
                                break;\r
                        case 372:       // MOTD Data\r
                        case 376:       // MOTD End\r
@@ -575,6 +591,7 @@ void ParseServerLine(tServer *Server, char *Line)
                        char    *class, *message;\r
                        \r
                        class = GetValue(Line, &pos);\r
+                       _SysDebug("NOTICE class='%s'", class);\r
                        \r
                        if( Line[pos] == ':' ) {\r
                                message = Line + pos + 1;\r
@@ -597,13 +614,17 @@ void ParseServerLine(tServer *Server, char *Line)
                        else {\r
                                message = GetValue(Line, &pos);\r
                        }\r
+\r
+                       // TODO: Catch when the privmsg is addressed to the user\r
+\r
 //                     Cmd_PRIVMSG(Server, dest, ident, message);\r
+                       *strchr(ident, '!') = '\0';     // Hello SIGSEGV\r
                        Message_Append(Server, MSG_TYPE_STANDARD, ident, dest, message);\r
                }\r
                else if( strcmp(cmd, "JOIN" ) == 0 )\r
                {\r
                        char    *channel;\r
-                       channel = GetValue(Line, &pos) + 1;\r
+                       channel = Line + pos + 1;\r
                        Window_Create(Server, channel);\r
                }\r
                else\r
@@ -706,38 +727,21 @@ int writef(int FD, const char *Format, ...)
 int OpenTCP(const char *AddressString, short PortNumber)\r
 {\r
         int    fd, addrType;\r
-       char    *iface;\r
        char    addrBuffer[8];\r
        \r
        // Parse IP Address\r
        addrType = Net_ParseAddress(AddressString, addrBuffer);\r
        if( addrType == 0 ) {\r
                fprintf(stderr, "Unable to parse '%s' as an IP address\n", AddressString);\r
+               _SysDebug("Unable to parse '%s' as an IP address\n", AddressString);\r
                return -1;\r
        }\r
        \r
        // Finds the interface for the destination address\r
-       iface = Net_GetInterface(addrType, addrBuffer);\r
-       if( iface == NULL ) {\r
-               fprintf(stderr, "Unable to find a route to '%s'\n", AddressString);\r
-               return -1;\r
-       }\r
-       \r
-//     printf("iface = '%s'\n", iface);\r
-       \r
-       // Open client socket\r
-       // TODO: Move this out to libnet?\r
-       {\r
-                int    len = snprintf(NULL, 100, "/Devices/ip/%s/tcpc", iface);\r
-               char    path[len+1];\r
-               snprintf(path, 100, "/Devices/ip/%s/tcpc", iface);\r
-               fd = open(path, OPENFLAG_READ|OPENFLAG_WRITE);\r
-       }\r
-       \r
-       free(iface);\r
-       \r
+       fd = Net_OpenSocket(addrType, addrBuffer, "tcpc");\r
        if( fd == -1 ) {\r
-               fprintf(stderr, "Unable to open TCP Client for reading\n");\r
+               fprintf(stderr, "Unable to open TCP Client to '%s'\n", AddressString);\r
+               _SysDebug("Unable to open TCP client to '%s'\n", AddressString);\r
                return -1;\r
        }\r
        \r

UCC git Repository :: git.ucc.asn.au