Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / Usermode / Applications / irc_src / main.c
index 3f46d15..16eee39 100644 (file)
@@ -78,7 +78,7 @@ char  *gsNickname = "acess";
 tServer        *gpServers;\r
 tWindow        gWindow_Status = {\r
        NULL, NULL, NULL,       // No next, empty list, no server\r
-       0, ""   // No activity, empty name (rendered as status)\r
+       0, {""} // No activity, empty name (rendered as status)\r
 };\r
 tWindow        *gpWindows = &gWindow_Status;\r
 tWindow        *gpCurrentWindow = &gWindow_Status;\r
@@ -102,8 +102,8 @@ int main(int argc, const char *argv[], const char *envp[])
        \r
        atexit(ExitHandler);\r
        \r
-       giTerminal_Width = ioctl(1, 5, NULL);   // getset_width\r
-       giTerminal_Height = ioctl(1, 6, NULL);  // getset_height\r
+       giTerminal_Width = _SysIOCtl(1, 5, NULL);       // getset_width\r
+       giTerminal_Height = _SysIOCtl(1, 6, NULL);      // getset_height\r
        \r
        printf("\x1B[?1047h");\r
        printf("\x1B[%i;%ir", 0, giTerminal_Height-1);\r
@@ -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
@@ -192,7 +194,7 @@ int main(int argc, const char *argv[], const char *envp[])
        {\r
                tServer *srv;\r
                for( srv = gpServers; srv; srv = srv->Next )\r
-                       close(srv->FD);\r
+                       _SysClose(srv->FD);\r
        }\r
        return 0;\r
 }\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
@@ -519,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
@@ -547,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
@@ -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
@@ -638,11 +659,11 @@ int ProcessIncoming(tServer *Server)
        // ioctl#8 on a TCP client gets the number of bytes in the recieve buffer\r
        // - Used to avoid blocking\r
        #if NON_BLOCK_READ\r
-       while( (len = ioctl(Server->FD, 8, NULL)) > 0 )\r
+       while( (len = _SysIOCtl(Server->FD, 8, NULL)) > 0 )\r
        {\r
        #endif\r
                // Read data\r
-               len = read(Server->FD, &Server->InBuf[Server->ReadPos], BUFSIZ - Server->ReadPos);\r
+               len = _SysRead(Server->FD, &Server->InBuf[Server->ReadPos], BUFSIZ - Server->ReadPos);\r
                if( len == -1 ) {\r
                        return -1;\r
                }\r
@@ -696,7 +717,7 @@ int writef(int FD, const char *Format, ...)
                vsnprintf(buf, len+1, Format, args);\r
                va_end(args);\r
                \r
-               return write(FD, buf, len);\r
+               return _SysWrite(FD, buf, len);\r
        }\r
 }\r
 \r
@@ -726,12 +747,12 @@ int OpenTCP(const char *AddressString, short PortNumber)
        \r
        // Set remote port and address\r
 //     printf("Setting port and remote address\n");\r
-       ioctl(fd, 5, &PortNumber);\r
-       ioctl(fd, 6, addrBuffer);\r
+       _SysIOCtl(fd, 5, &PortNumber);\r
+       _SysIOCtl(fd, 6, addrBuffer);\r
        \r
        // Connect\r
 //     printf("Initiating connection\n");\r
-       if( ioctl(fd, 7, NULL) == 0 ) {\r
+       if( _SysIOCtl(fd, 7, NULL) == 0 ) {\r
                // Shouldn't happen :(\r
                fprintf(stderr, "Unable to start connection\n");\r
                return -1;\r
@@ -776,7 +797,7 @@ int SetCursorPos(int Row, int Col)
                Row = Col / giTerminal_Width;\r
                Col = Col % giTerminal_Width;\r
        }\r
-       rv = ioctl(1, 9, NULL); // Ugh, constants\r
+       rv = _SysIOCtl(1, 9, NULL);     // Ugh, constants\r
        printf("\x1B[%i;%iH", Col, Row);\r
        return rv;\r
 }\r

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