Implemented SYS_CHDIR at user level. Added process dump key combo to KB driver
authorJohn Hodge <[email protected]>
Sat, 26 Sep 2009 15:03:58 +0000 (23:03 +0800)
committerJohn Hodge <[email protected]>
Sat, 26 Sep 2009 15:03:58 +0000 (23:03 +0800)
Kernel/drv/kb.c
Usermode/Applications/CLIShell_src/main.c
Usermode/Libraries/libacess.so_src/vfs.asm

index 0de8fe1..fc07897 100644 (file)
@@ -12,6 +12,9 @@
 // === CONSTANTS ===
 #define        KB_BUFFER_SIZE  1024
 
+// === IMPORTS ===
+void   Threads_Dump();
+
 // === PROTOTYPES ===
  int   KB_Install(char **Arguments);
 void   KB_IRQHandler();
@@ -178,6 +181,7 @@ void KB_IRQHandler()
                switch(ch)
                {
                case 'D':       __asm__ __volatile__ ("xchg %bx, %bx"); break;
+               case 'P':       Threads_Dump(); break;
                }
        }
        
index 5c431bd..24c93dd 100644 (file)
@@ -48,7 +48,7 @@ int main(int argc, char *argv[], char *envp[])
         int    bCached = 1;\r
        t_sysFInfo      info;\r
        \r
-       //Command_Clear(0, NULL);\r
+       Command_Clear(0, NULL);\r
        \r
        {\r
                char    *tmp = getenv("CWD");\r
@@ -70,7 +70,6 @@ int main(int argc, char *argv[], char *envp[])
                if(saArgs[0])   free(saArgs);\r
                if(!bCached)    free(sCommandStr);\r
                bCached = 0;\r
-               write(_stdout, 1, "\n");\r
                write(_stdout, strlen(gsCurrentDirectory), gsCurrentDirectory);\r
                write(_stdout, 3, "$ ");\r
                \r
@@ -131,6 +130,7 @@ int main(int argc, char *argv[], char *envp[])
                }\r
                // Load new executable\r
                pid = clone(CLONE_VM, 0);\r
+               printf("pid = %i\n", pid);\r
                if(pid == 0)    execve(gsTmpBuffer, &saArgs[1], envp);\r
                if(pid <= 0) {\r
                        Print("Unablt to create process: `");Print(gsTmpBuffer);Print("'\n");   // Error Message
@@ -155,6 +155,7 @@ char *ReadCommandLine(int *Length)
         \r
        // Preset Variables\r
        ret = malloc( space+1 );\r
+       if(!ret)        return NULL;\r
        len = 0;\r
        pos = 0;\r
                \r
@@ -162,7 +163,22 @@ char *ReadCommandLine(int *Length)
        do {\r
                read(_stdin, 1, &ch);   // Read Character from stdin (read is a blocking call)\r
                // Ignore control characters\r
-               if(ch < 0)      continue;\r
+               if(ch == '\x1B') {\r
+                       read(_stdin, 1, &ch);   // Read control character\r
+                       switch(ch)\r
+                       {\r
+                       case 'D':       if(pos) pos--;  break;\r
+                       case 'C':       if(pos<len)     pos++;  break;\r
+                       case '[':\r
+                               read(_stdin, 1, &ch);   // Read control character\r
+                               switch(ch)\r
+                               {\r
+                               case 'D':       if(pos) pos--;  break;\r
+                               case 'C':       if(pos<len)     pos++;  break;\r
+                               }\r
+                       }\r
+                       continue;\r
+               }\r
                // Backspace\r
                if(ch == '\b') {\r
                        if(len <= 0)            continue;       // Protect against underflows\r
index 4cd4153..1f9ba34 100644 (file)
@@ -16,3 +16,4 @@ SYSCALL4      seek, SYS_SEEK          ; int, int64_t, int
 SYSCALL3       finfo, SYS_FINFO        ; int, void*, int
 SYSCALL2       readdir, SYS_READDIR    ; int, char*
 SYSCALL2       _SysGetACL, SYS_GETACL  ; int, void*
+SYSCALL1       chdir, SYS_CHDIR        ; char*

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