- if(length != BUILTIN_COUNT) continue;\r
-
- // - Calling a file\r
- GeneratePath(saArgs[1], gsCurrentDirectory, gsTmpBuffer);\r
- // Use length in place of fp\r
- length = open(gsTmpBuffer, 0);\r
- // Check file existence\r
- if(length == -1) {\r
- Print("Unknown Command: `");Print(saArgs[1]);Print("'\n"); // Error Message\r
- continue;\r
- }\r
- // Check if the file is a directory\r
- finfo( length, &info, 0 );
- close( length );\r
- if(info.flags & FILEFLAG_DIRECTORY) {\r
- Print("`");Print(saArgs[1]); // Error Message\r
- Print("' is a directory.\n");\r
- continue;\r
- }\r
- // Load new executable\r
- pid = clone(CLONE_VM, 0);\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
- //SysDebug("pid = %i\n", pid);\r
- }\r
- else {\r
- int status;\r
- waittid(pid, &status);\r
- }\r
- }\r
-}\r
-\r
-/**\r
- * \fn char *ReadCommandLine(int *Length)\r
- * \brief Read from the command line\r
- */\r
-char *ReadCommandLine(int *Length)\r
-{\r
- char *ret;\r
- int len, pos, space = 1023;\r
- char ch;\r
- \r
- // Preset Variables\r
- ret = malloc( space+1 );\r
- len = 0;\r
- pos = 0;\r
- \r
- // Read In Command Line\r
- 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
- // Backspace\r
- if(ch == '\b') {\r
- if(len <= 0) continue; // Protect against underflows\r
- if(pos == len) { // Simple case of end of string\r
- len --; pos--;\r
- } else {\r
- memmove(&ret[pos-1], &ret[pos], len-pos);\r
- pos --;\r
- len --;\r
- }\r
- write(_stdout, 1, &ch);\r
- continue;\r
- }\r
- // Expand Buffer\r
- if(len > space) {\r
- space += 256;\r
- ret = realloc(ret, space+1);\r
- if(!ret) return NULL;\r
- }\r