Merge branch 'master' of cadel.mutabah.net:acess2
[tpg/acess2.git] / Usermode / Applications / init_src / main.c
index b205e3b..c18e5f8 100644 (file)
@@ -2,34 +2,52 @@
  * Acess2 System Init Task
  */
 #include <acess/sys.h>
+#include <stdlib.h>
+#include <stdio.h>
+//#include "common.h"
 
 // === CONSTANTS ===
-#define NULL   ((void*)0)
+#define NUM_TERMS      4
 #define        DEFAULT_TERMINAL        "/Devices/VTerm/0"
-#define DEFAULT_SHELL  "/Acess/CLIShell"
+#define DEFAULT_SHELL  "/Acess/SBin/login"
+
+#define ARRAY_SIZE(x)  ((sizeof(x))/(sizeof((x)[0])))
+
+// === PROTOTYPES ===
 
 // === CODE ===
 /**
  * \fn int main(int argc, char *argv[])
+ * \brief Entrypoint
  */
 int main(int argc, char *argv[])
 {
         int    tid;
-       open(DEFAULT_TERMINAL, OPENFLAG_READ);  // Stdin
-       open(DEFAULT_TERMINAL, OPENFLAG_WRITE); // Stdout
-       open(DEFAULT_TERMINAL, OPENFLAG_WRITE); // Stderr
+        int    i;
+       char    termpath[sizeof(DEFAULT_TERMINAL)] = DEFAULT_TERMINAL;
+       char    *child_argv[2] = {DEFAULT_SHELL, 0};
        
-       write(1, 13, "Hello, World!");
+       // - Parse init script
        
-       tid = clone(CLONE_VM, 0);
-       __asm__ __volatile__("xchg %%bx, %%bx"::"a"(tid));
-       if(tid == 0)
-       {
-               execve(DEFAULT_SHELL, NULL, NULL);
-               for(;;) __asm__ __volatile__("hlt");
+       // - Start virtual terminals
+       for( i = 0; i < NUM_TERMS; i++ )
+       {               
+               tid = clone(CLONE_VM, 0);
+               if(tid == 0)
+               {
+                       termpath[sizeof(DEFAULT_TERMINAL)-2] = '0' + i;
+                       
+                       open(termpath, OPENFLAG_READ);  // Stdin
+                       open(termpath, OPENFLAG_WRITE); // Stdout
+                       open(termpath, OPENFLAG_WRITE); // Stderr
+                       execve(DEFAULT_SHELL, child_argv, NULL);
+                       for(;;) sleep();
+               }
        }
        
+       // TODO: Implement message watching
        for(;;) sleep();
        
        return 42;
 }
+

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