diff --git a/include/sh/shell.h b/include/sh/shell.h index f3da477..2766086 100644 --- a/include/sh/shell.h +++ b/include/sh/shell.h @@ -31,10 +31,6 @@ //----------------------------------------------------------------------------// -void ShStartShell(void); - -//----------------------------------------------------------------------------// - #define CMDBUFSIZE 256 typedef struct Command_t Command_t; @@ -55,5 +51,9 @@ extern Command_t shcmdtable[]; //----------------------------------------------------------------------------// +void ShStartShell(void); +void ExecuteCommand(char *cmdbuf, Command_t *cmdtable); + + #endif diff --git a/kaleid/kernel/sh/shcmds.c b/kaleid/kernel/sh/shcmds.c index bda36a8..8151ed2 100644 --- a/kaleid/kernel/sh/shcmds.c +++ b/kaleid/kernel/sh/shcmds.c @@ -32,6 +32,8 @@ #include #include +static Command_t testcmdtable[]; + static inline int ShAtoi(char* str) { int res = 0; @@ -182,6 +184,26 @@ error_t CmdHelp(int argc, char **argv, char *cmdline) return EOK; } +error_t CmdHelpTest(int argc, char **argv, char *cmdline) +{ + uint i, count = 0; + Command_t *cmd; + + if (argc == 1) { + KernLog("List of all test built-ins:\n"); + for (cmd = testcmdtable; cmd->name != NULL; cmd++, count++) { + KernLog("\t%s", cmd->name); + for (i = strlen(cmd->name)/4; i<3; i++) { + KernLog("\t"); + } + KernLog("%C%s%C\n", VGA_COLOR_DARK_GREY, cmd->help, shcol); + } + KernLog("End of list; %u commands total\n", count); + } + + return EOK; +} + error_t CmdMemMap(int argc, char **argv, char *cmdline) { MmPrintMemoryMap(); @@ -259,12 +281,9 @@ error_t CmdStarWars(int argc, char **argv, char *cmdline) error_t CmdTest(int argc, char **argv, char *cmdline) { + ExecuteCommand(cmdline+5, testcmdtable); + KernLog ("\n"); -} - -error_t CmdTest(int argc, char **argv, char *cmdline) -{ - KernLog("%s\n", &KeFormatCurTime()[13]); return EOK; } @@ -314,30 +333,37 @@ error_t CmdVersion(int argc, char **argv, char *cmdline) //----------------------------------------------------------------------------// -Command_t shcmdtable[] = +static Command_t testcmdtable[] = { { "args", CmdArgs, "Print command line" }, + { "dmpsec", CmdDumpATASect, "Dump an ATA sector on screen" }, + { "help", CmdHelpTest, "Show this message" }, + { "pfault", CmdPF, "Provoke a PF. Usage: pfault
"}, + { "pstest", CmdPsTest, "Scheduler test routine" }, + { "rpag", CmdReloadPage, "Reload the pages directory" }, + { "shell", CmdShell, "Start a new shell (nested)", }, + { "stkov", CmdStackOverflow, "Provoke a stack overflow" }, + { "stkun", CmdStackUnderflow, "Provoke a stack underflow" }, + { "timer", CmdTimerTest, "test timer of x ms" }, + { NULL, NULL, NULL } +}; + +Command_t shcmdtable[] = +{ { "beep", CmdBeep, "Make a beep" }, { "cls", CmdClear, "Clears standard output" }, { "color", CmdColor, "Change shell text color" }, { "date", CmdDate, "Print date" }, - { "dmpsec", CmdDumpATASect, "Dump an ATA sector on screen" }, { "exit", CmdQuit, "Initiate shutdown" }, { "help", CmdHelp, "Show this message" }, { "march", CmdStarWars, "Play the Imperial March" }, { "mmap", CmdMemMap, "Show memory map" }, { "musage", CmdMemUsage, "Show memory statistics" }, - { "pfault", CmdPF, "Provoke a PF. Usage: pfault
"}, - { "pstest", CmdPsTest, "Scheduler test routine" }, { "quit", CmdQuit, "Alias for 'exit'" }, - { "rpag", CmdReloadPage, "Reload the pages directory" }, { "shell", CmdShell, "Start a new shell (nested)", }, - { "stkov", CmdStackOverflow, "Provoke a stack overflow" }, - { "stkun", CmdStackUnderflow, "Provoke a stack underflow" }, { "sleep", CmdSleep, "Sleep x ms" }, - { "testimer", CmdTimerTest, "test timer of x ms" }, { "time", CmdTime, "Print time" }, + { "test", CmdTest, "Launch the x test" }, { "ver", CmdVersion, "Version and legal infos" }, { NULL, NULL, NULL } }; - diff --git a/kaleid/kernel/sh/shell.c b/kaleid/kernel/sh/shell.c index f9bf1ab..99fde03 100644 --- a/kaleid/kernel/sh/shell.c +++ b/kaleid/kernel/sh/shell.c @@ -36,7 +36,7 @@ int shcol = VGA_COLOR_LIGHT_GREY; static char *argvbuf = 0; -static void ExecuteCommand(char *cmdbuf) +void ExecuteCommand(char *cmdbuf, Command_t *cmdtable) { error_t rc; Command_t *cmd; @@ -49,7 +49,7 @@ static void ExecuteCommand(char *cmdbuf) rc = ShCmdLineToArgVec(cmdbuf, &shargc, argvbuf); if (rc) KeStartPanic("Shell: Couldn't parse command line: %d", rc); - for (cmd = shcmdtable; cmd->name != NULL; cmd++) { + for (cmd = cmdtable; cmd->name != NULL; cmd++) { if (!strcmp(cmd->name, shargv[0])) { cmd->func(shargc, shargv, cmdbuf); found = true; @@ -86,7 +86,7 @@ void ShStartShell(void) if (!(BStdIn->flags & BF_ERR)) { *bufptr = 0; bufptr = cmdbuf; - ExecuteCommand(cmdbuf); + ExecuteCommand(cmdbuf, shcmdtable); memzero(cmdbuf, CMDBUFSIZE); BFlushBuf(BStdIn); @@ -148,7 +148,7 @@ void ShStartShell(void) *bufptr = 0; bufptr = cmdbuf; - ExecuteCommand(cmdbuf); + ExecuteCommand(cmdbuf, shcmdtable); memzero(cmdbuf, CMDBUFSIZE); KernLog("%Cshell> %C", VGA_COLOR_WHITE, shcol); @@ -161,4 +161,3 @@ void ShStartShell(void) } KernLog("[EOI]\n"); } -