AcessNative - Added PTY init to AcessKernel
[tpg/acess2.git] / AcessNative / acesskernel_src / main.c
index 609ea2a..be03fe6 100644 (file)
@@ -13,6 +13,7 @@
 #endif
 #include <unistd.h>
 #include <string.h>
+#include "../../KernelLand/Kernel/include/logdebug.h"
 
 #define VALGRIND_CLIENT        0
 
 extern int     UI_Initialise(int Width, int Height);
 extern void    UI_MainLoop(void);
 extern int     VFS_Init(void);
+extern int     PTY_Install(char **Arguments);
 extern int     Video_Install(char **Arguments);
 extern int     NativeKeyboard_Install(char **Arguments);
 extern int     NativeFS_Install(char **Arguments);
 extern void    Debug_SetKTerminal(char *Path);
 extern int     VT_Install(char **Arguments);
+extern int     Mouse_Install(char **Arguments);
+extern int     IPCPipe_Install(char **Arguments);
 extern int     VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options);
 extern int     VFS_MkDir(const char *Path);
 extern int     SyscallServer(void);
@@ -37,6 +41,19 @@ extern int   giBuildNumber;
 const char     *gsAcessDir = "../Usermode/Output/x86_64";
 
 // === CODE ===
+#ifndef __WIN32__
+#define P_NOWAIT       0
+int spawnv(int flags, const char *execuable, char * const argv[])
+{
+       int pid = fork();
+       if( pid != 0 )  return pid;
+
+       execv(execuable, argv);
+       perror("spawnv - execve");
+       for(;;);
+}
+#endif
+
 int main(int argc, char *argv[])
 {
        char    **rootapp = NULL;
@@ -66,7 +83,9 @@ int main(int argc, char *argv[])
        UI_Initialise(800, 480);
        
        // - Ignore SIGUSR1 (used to wake threads)
+       #ifdef SIGUSR1
        signal(SIGUSR1, SIG_IGN);
+       #endif
                
        // Initialise VFS
        VFS_Init();
@@ -78,6 +97,9 @@ int main(int argc, char *argv[])
                Log_Error("Init", "Unable to load NativeKeyboard");
        }
        NativeFS_Install(NULL);
+       Mouse_Install(NULL);
+       IPCPipe_Install(NULL);
+       PTY_Install(NULL);
        // - Start VTerm
        {
                char    *args[] = {
@@ -91,7 +113,7 @@ int main(int argc, char *argv[])
        VFS_MkDir("/Acess");    
        VFS_Mount(gsAcessDir, "/Acess", "nativefs", "");
 
-       Debug_SetKTerminal("/Devices/VTerm/8");
+       Debug_SetKTerminal("/Devices/pts/vt7c");
        
        // Start syscall server
        SyscallServer();
@@ -101,7 +123,7 @@ int main(int argc, char *argv[])
        {
                 int    pid;
                 int    argcount = 0;
-               char    *args[7+rootapp_argc+1+1];
+               const char      *args[7+rootapp_argc+1+1];
 
                #if VALGRIND_CLIENT
                args[argcount++] = "valgrind";
@@ -113,23 +135,11 @@ int main(int argc, char *argv[])
                for( i = 0; i < rootapp_argc; i ++ )
                        args[argcount+i] = rootapp[i];
                args[argcount+rootapp_argc] = NULL;
-               
-               pid = fork();
+               pid = spawnv(P_NOWAIT, "./ld-acess", args);
                if(pid < 0) {
                        perror("Starting root application [fork(2)]");
                        return 1;
                }
-               if(pid == 0)
-               {
-                       #ifdef __LINUX__
-                       prctl(PR_SET_PDEATHSIG, SIGHUP);        // LINUX ONLY!
-                       #endif
-                       #if VALGRIND_CLIENT
-                       execv("valgrind", args);
-                       #else
-                       execv("./ld-acess", args);
-                       #endif
-               }
                printf("Root application running as PID %i\n", pid);
        }
 

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