Various Changes
[tpg/acess2.git] / Usermode / Applications / CLIShell_src / main.c
index 2e51419..d6c40d6 100644 (file)
@@ -17,18 +17,17 @@ void        Parse_Args(char *str, char **dest);
 void   CallCommand(char **Args);\r
 void   Command_Logout(int argc, char **argv);\r
 void   Command_Clear(int argc, char **argv);\r
-void   Command_Colour(int argc, char **argv);\r
+void   Command_Help(int argc, char **argv);\r
 void   Command_Cd(int argc, char **argv);\r
 void   Command_Dir(int argc, char **argv);\r
 \r
 // ==== CONSTANT GLOBALS ====\r
-char   *cCOLOUR_NAMES[8] = {"black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"};\r
 struct {\r
        char    *name;\r
        void    (*fcn)(int argc, char **argv);\r
 }      cBUILTINS[] = {\r
        {"exit", Command_Logout},       {"logout", Command_Logout},\r
-       {"colour", Command_Colour}, {"clear", Command_Clear},\r
+       {"help", Command_Help}, {"clear", Command_Clear},\r
        {"cd", Command_Cd}, {"dir", Command_Dir}\r
 };\r
 static char    *cDEFAULT_PATH[] = {"/Acess/Bin"};\r
@@ -77,8 +76,9 @@ int main(int argc, char *argv[], char *envp[])
                if(saArgs[0])   free(saArgs);\r
                if(!bCached)    free(sCommandStr);\r
                bCached = 0;\r
+               \r
                write(_stdout, strlen(gsCurrentDirectory), gsCurrentDirectory);\r
-               write(_stdout, 3, "$ ");\r
+               write(_stdout, 2, "$ ");\r
                \r
                // Read Command line\r
                sCommandStr = ReadCommandLine( &length );\r
@@ -135,6 +135,7 @@ char *ReadCommandLine(int *Length)
        char    *ret;\r
         int    len, pos, space = 1023;\r
        char    ch;\r
+       // int  scrollbackPos = giLastCommand;\r
         \r
        // Preset Variables\r
        ret = malloc( space+1 );\r
@@ -149,14 +150,43 @@ char *ReadCommandLine(int *Length)
                        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 '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
+                               #if 0\r
+                               case 'A':       // Up\r
+                                       if( scrollbackPos > 0 ) break;\r
+                                       \r
+                                       free(ret);\r
+                                       ret = strdup( gasCommandHistory[--scrollbackPos] );\r
+                                       \r
+                                       len = strlen(ret);\r
+                                       while(pos--)    write(_stdout, 3, "\x1B[D");\r
+                                       while(pos++ < len)      write(_stdout, 3, "\x1B[C");\r
+                                       break;\r
+                               case 'B':       // Down\r
+                                       if( scrollbackPos < giLastCommand-1 )   break;\r
+                                       free(ret);\r
+                                       ret = strdup( gasCommandHistory[++scrollbackPos] );\r
+                                       \r
+                                       len = strlen(ret);\r
+                                       while(pos--)    write(_stdout, 3, "\x1B[D");\r
+                                       while(pos++ < len)      write(_stdout, 3, "\x1B[C");\r
+                                       break;\r
+                               #endif\r
+                               case 'D':       // Left\r
+                                       if(pos == 0)    break;\r
+                                       pos --;\r
+                                       write(_stdout, 3, "\x1B[D");\r
+                                       break;\r
+                               case 'C':       // Right\r
+                                       if(pos == len-1)        break;\r
+                                       pos++;\r
+                                       write(_stdout, 3, "\x1B[C");\r
+                                       break;\r
                                }\r
                        }\r
                        continue;\r
@@ -331,76 +361,32 @@ void Command_Logout(int argc, char **argv)
 }\r
 \r
 /**\r
- * \fn void Command_Clear(int argc, char **argv)\r
- * \brief Clear the screen\r
+ * \fn void Command_Colour(int argc, char **argv)\r
+ * \brief Displays the help screen\r
  */\r
-void Command_Clear(int argc, char **argv)\r
+void Command_Help(int argc, char **argv)\r
 {\r
-       write(_stdout, 4, "\x1B[2J");   //Clear Screen\r
+       Print("Acess 2 Command Line Interface\n");\r
+       Print(" By John Hodge (thePowersGang / [TPG])\n");\r
+       Print("\n");\r
+       Print("Builtin Commands:\n");\r
+       Print(" logout: Return to the login prompt\n");\r
+       Print(" exit:   Same\n");\r
+       Print(" help:   Display this message\n");\r
+       Print(" clear:  Clear the screen\n");\r
+       Print(" cd:     Change the current directory\n");\r
+       Print(" dir:    Print the contents of the current directory\n");\r
+       //Print("\n");\r
+       return;\r
 }\r
 \r
 /**\r
- * \fn void Command_Colour(int argc, char **argv)\r
- * \brief Set the colour of the shell prompt\r
- * \note Conflicts with coloured `dir` display\r
+ * \fn void Command_Clear(int argc, char **argv)\r
+ * \brief Clear the screen\r
  */\r
-void Command_Colour(int argc, char **argv)\r
+void Command_Clear(int argc, char **argv)\r
 {\r
-       int fg, bg;\r
-       char    clrStr[6] = "\x1B[37m";\r
-       \r
-       // Verify Arg Count\r
-       if(argc < 2)\r
-       {\r
-               goto usage;\r
-       }\r
-       \r
-       // Check Colour\r
-       for(fg=0;fg<8;fg++)\r
-               if(strcmp(cCOLOUR_NAMES[fg], argv[1]) == 0)\r
-                       break;\r
-\r
-       // Foreground a valid colour\r
-       if(fg == 8) {\r
-               Print("Unknown Colour '");Print(argv[1]);Print("'\n");\r
-               goto usage;\r
-       }\r
-       // Set Foreground\r
-       clrStr[3] = '0' + fg;\r
-       write(_stdout, 6, clrStr);\r
-       \r
-       // Need to Set Background?\r
-       if(argc > 2)\r
-       {\r
-               for(bg=0;bg<8;bg++)\r
-                       if(strcmp(cCOLOUR_NAMES[bg], argv[2]) == 0)\r
-                               break;\r
-       \r
-               // Valid colour\r
-               if(bg == 8)\r
-               {\r
-                       Print("Unknown Colour '");Print(argv[2]);Print("'\n");\r
-                       goto usage;\r
-               }\r
-       \r
-               clrStr[2] = '4';\r
-               clrStr[3] = '0' + bg;\r
-               write(_stdout, 6, clrStr);\r
-       }\r
-       // Return\r
-       return;\r
-\r
-       // Function Usage (Requested via a Goto (I know it's ugly))\r
-usage:\r
-       Print("Usage: colour <foreground> [<background>]\n");\r
-       Print("Valid Colours are ");\r
-       for(fg=0;fg<8;fg++)\r
-       {\r
-               Print(cCOLOUR_NAMES[fg]);\r
-               write(_stdout, 3, ", ");\r
-       }\r
-       write(_stdout, 4, "\b\b\n");\r
-       return;\r
+       write(_stdout, 4, "\x1B[2J");   //Clear Screen\r
 }\r
 \r
 /**\r

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