AcesNative+Usermode - libacessnative "works" (for some definitions)
[tpg/acess2.git] / Usermode / Applications / axwin3_src / WM / main.c
index 0996f90..a9266b4 100644 (file)
@@ -18,6 +18,7 @@ extern int    Renderer_Menu_Init(void);
 extern int     Renderer_Widget_Init(void);
 extern int     Renderer_Background_Init(void);
 extern int     Renderer_Framebuffer_Init(void);
+extern int     Renderer_RichText_Init(void);
 extern void    WM_Update(void);
 extern void    WM_Hotkey_Register(int nKeys, uint32_t *Keys, const char *ActionName);
 
@@ -38,6 +39,8 @@ const char    *gsMouseDevice = NULL;
 #define __INSTALL_ROOT "/Acess/Apps/AxWin/3.0"
 
 const char     *gsInstallRoot = __INSTALL_ROOT;
+const char     *gsInterfaceApp = __INSTALL_ROOT"/AxWinUI";
+ int   gbNoSpawnUI = 0;
 
 // === CODE ===
 /**
@@ -45,8 +48,6 @@ const char    *gsInstallRoot = __INSTALL_ROOT;
  */
 int main(int argc, char *argv[])
 {
-        int    server_tid = gettid();
-       
        ParseCommandline(argc, argv);
        
        if( gsTerminalDevice == NULL ) {
@@ -64,24 +65,33 @@ int main(int argc, char *argv[])
        Renderer_Widget_Init();
        Renderer_Background_Init();
        Renderer_Framebuffer_Init();
+       Renderer_RichText_Init();
        WM_Initialise();
 
-       // TODO: Config
+       // TODO: Move these to config
        uint32_t        keys[4];
        keys[0] = KEYSYM_LEFTGUI;       keys[1] = KEYSYM_r;
        WM_Hotkey_Register(2, keys, "Interface>Run");
+       keys[0] = KEYSYM_LEFTGUI;       keys[1] = KEYSYM_t;
+       WM_Hotkey_Register(2, keys, "Interface>Terminal");
+       keys[0] = KEYSYM_LEFTGUI;       keys[1] = KEYSYM_e;
+       WM_Hotkey_Register(2, keys, "Interface>TextEdit");
        
        // Spawn interface root
-       if( clone(CLONE_VM, 0) == 0 )
+       if( !gbNoSpawnUI )
        {
-               static char csInterfaceApp[] = __INSTALL_ROOT"/AxWinUI";
+               int     server_tid = gettid();
+               _SysDebug("server_tid = %i", server_tid);
                char    server_info[] = "AXWIN3_SERVER=00000";
-               char    *envp[] = {server_info, NULL};
-               char    *argv[] = {csInterfaceApp, NULL};
+               const char      *envp[] = {server_info, NULL};
+               const char      *argv[] = {gsInterfaceApp, NULL};
                _SysDebug("server_tid = %i, &server_tid = %p", server_tid, &server_tid);
                sprintf(server_info, "AXWIN3_SERVER=%i", server_tid);
-               execve(csInterfaceApp, argv, envp);
-               exit(1);
+               // TODO: Does the client need FDs?
+                int    rv = _SysSpawn(gsInterfaceApp, argv, envp, 0, NULL, NULL);
+               if( rv < 0 ) {
+                       _SysDebug("_SysSpawn chucked a sad, rv=%i, errno=%i", rv, _errno);
+               }
        }
 
        // Main Loop
@@ -108,8 +118,37 @@ int main(int argc, char *argv[])
        return 0;
 }
 
+void PrintUsage(void)
+{
+       fprintf(stderr, "Arguments:\n");
+       fprintf(stderr, "  --no-ui  : Don't spawn the UI process\n");
+}
+
 void ParseCommandline(int argc, char **argv)
 {
-       
+       for( int i = 1; i < argc; i ++ )
+       {
+               if( argv[i][0] != '-' ) {
+                       // Error?
+                       PrintUsage();
+                       exit(-1);
+               }
+               else if( argv[i][1] != '-' ) {
+                       // Short
+                       PrintUsage();
+                       exit(-1);
+               }
+               else {
+                       // Long
+                       if( strcmp(argv[i], "--no-ui") == 0 ) {
+                               gbNoSpawnUI = 1;
+                       }
+                       else {
+                               // Error.
+                               PrintUsage();
+                               exit(-1);
+                       }
+               }
+       }
 }
 

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