From bcea8c46c25b4728912132b77f5c33b1485a28a2 Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Thu, 6 Feb 2020 14:10:56 +0100 Subject: [PATCH 1/3] ssp --- kaleid/kernel/init/ssp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kaleid/kernel/init/ssp.c b/kaleid/kernel/init/ssp.c index bf2d70d..f9e3869 100644 --- a/kaleid/kernel/init/ssp.c +++ b/kaleid/kernel/init/ssp.c @@ -24,7 +24,7 @@ #include -ulong __stack_chk_guard = 0xec0ffec0ffec0ffe; +ulong __stack_chk_guard = 0xc0ffeb4b37a7adcc; noreturn void __stack_chk_fail(void) { From 974211dc43a2bbb1ec61d7cd9bed4891fbe9341b Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Thu, 6 Feb 2020 15:01:37 +0100 Subject: [PATCH 2/3] prompt --- include/sh/shell.h | 4 ++++ kaleid/kernel/init/table.c | 1 - kaleid/kernel/io/scan.c | 3 +++ kaleid/kernel/io/vga.c | 4 ++++ kaleid/kernel/sh/shcmds.c | 19 ++++++++++++++++++- kaleid/kernel/sh/shell.c | 21 +++++++++++++++------ 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/include/sh/shell.h b/include/sh/shell.h index 41a1e44..54ff350 100644 --- a/include/sh/shell.h +++ b/include/sh/shell.h @@ -45,8 +45,12 @@ struct Command_t extern int shcol; extern int shargc; extern char **shargv; +extern char *shprompt; +extern size_t shpromptlen; extern Command_t shcmdtable[]; +#define SHPROMPT_MAXLEN (BStdOut->lineLen / 2) + //----------------------------------------------------------------------------// void ShStartShell(void); diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 75d200a..f1bf454 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -33,4 +33,3 @@ volatile bool KeIsPanicking = 0; volatile CpuCore_t *KeCurCPU = &_KeCPUTable[0]; volatile CpuInfo_t CpuInfo = { 0 }; - diff --git a/kaleid/kernel/io/scan.c b/kaleid/kernel/io/scan.c index 066c264..3740651 100644 --- a/kaleid/kernel/io/scan.c +++ b/kaleid/kernel/io/scan.c @@ -112,6 +112,7 @@ const uint RegularScanCodes[2 * 256] = ENTRY (0x51, '3', NONE), ENTRY (0x52, '0', NONE), ENTRY (0x53, '.', NONE), + ENTRY (0x56, '<', NONE), ENTRY (0xE0, 0, INVISIBLE), }; @@ -193,6 +194,8 @@ const uint LeftShiftScanCodes[2 * 256] = ENTRY (0x52, K_INSERT, INVISIBLE), ENTRY (0x53, K_DEL, INVISIBLE), + ENTRY (0x56, '>', NONE), + ENTRY (0xE0, 0, INVISIBLE), }; diff --git a/kaleid/kernel/io/vga.c b/kaleid/kernel/io/vga.c index dc673ff..cfc7b9c 100644 --- a/kaleid/kernel/io/vga.c +++ b/kaleid/kernel/io/vga.c @@ -189,6 +189,7 @@ error_t IoInitVGABuffer(void) BEnableAutoScroll(BStdOut); +#ifndef NDEBUG BStdDbg = &bdbgbufstruct; BOpenTermBufEx(&BStdDbg, @@ -198,6 +199,9 @@ error_t IoInitVGABuffer(void) 10, NULL); BEnableAutoScroll(BStdDbg); +#else + BStdDbg = NULL; +#endif return EOK; } diff --git a/kaleid/kernel/sh/shcmds.c b/kaleid/kernel/sh/shcmds.c index 43faa9e..ad68bda 100644 --- a/kaleid/kernel/sh/shcmds.c +++ b/kaleid/kernel/sh/shcmds.c @@ -151,6 +151,21 @@ error_t CmdMemMap(int argc, char **argv, char *cmdline) return EOK; } +error_t CmdPrompt(int argc, char **argv, char *cmdline) +{ + if (cmdline[6] == 0) { + shprompt[0] = 0; + shpromptlen = 0; + } + + else { + strnzcpy(shprompt, &cmdline[7], SHPROMPT_MAXLEN); + shpromptlen = strlen(shprompt); + } + + return EOK; +} + error_t CmdQuit(int argc, char **argv, char *cmdline) { PoShutdown(); @@ -216,10 +231,12 @@ Command_t shcmdtable[] = { "march", CmdStarWars, "Play the Imperial March" }, { "mmap", CmdMemMap, "Show memory map" }, { "musage", CmdMemUsage, "Show memory statistics" }, + { "prompt", CmdPrompt, "Change shell prompt" }, { "quit", CmdQuit, "Alias for 'exit'" }, { "sleep", CmdSleep, "Sleep N ms" }, { "time", CmdTime, "Print time" }, { "test", CmdTest, "Launch a test" }, { "ver", CmdVersion, "Version and legal infos" }, - { NULL, NULL, NULL } + { NULL, NULL, NULL }, }; + diff --git a/kaleid/kernel/sh/shell.c b/kaleid/kernel/sh/shell.c index 8d04c75..29a33de 100644 --- a/kaleid/kernel/sh/shell.c +++ b/kaleid/kernel/sh/shell.c @@ -35,6 +35,9 @@ int shargc = 0; char **shargv = 0; int shcol = VGA_COLOR_LIGHT_GREY; +char *shprompt = "shell> "; +size_t shpromptlen = 7; + static char *argvbuf = 0; void ExecuteCommand(char *cmdbuf, Command_t *cmdtable) @@ -66,7 +69,7 @@ void ExecuteCommand(char *cmdbuf, Command_t *cmdtable) } } -#define CMDBUFSIZE (BStdOut->lineLen - 9) // strlen("%Cshell> %C" = 9 +#define CMDBUFSIZE (BStdOut->lineLen - shpromptlen - 2) void ShStartShell(void) { @@ -81,18 +84,23 @@ void ShStartShell(void) // History... // We use a basic N-entries command history -#define N 10 // must be >1 + #define N 10 // must be >1 char *history = malloc(CMDBUFSIZE * N); int historyIndex = 0; int historyScroll = 0; bool insertMode = 0; + size_t nLines; argvbuf = malloc(ARG_MAX * 2); memzero(argvbuf, ARG_MAX * 2); shargv = (char **)argvbuf; - KernLog("\n%Cshell> %C", VGA_COLOR_WHITE, shcol); + shprompt = malloc(SHPROMPT_MAXLEN); + strcpy(shprompt, "shell> "); + shpromptlen = 7; + + KernLog("\n%C%s%C", VGA_COLOR_WHITE, shprompt, shcol); BFlushBuf(BStdOut); while ((rc = BGetFromBuf(BStdIn, &ch)) == EOK || rc == EENDF) { @@ -105,7 +113,7 @@ void ShStartShell(void) memzero(cmdbuf, CMDBUFSIZE); BFlushBuf(BStdIn); - KernLog("%Cshell> %C", VGA_COLOR_WHITE, shcol); + KernLog("%C%s%C", VGA_COLOR_WHITE, shprompt, shcol); BFlushBuf(BStdOut); } else break; @@ -242,7 +250,8 @@ void ShStartShell(void) BStdOut->wp -= BStdOut->lastLF; BStdOut->size -= BStdOut->lastLF; BStdOut->lastLF = 0; - bprintf(BStdOut, "%Cshell> %C%s", VGA_COLOR_WHITE, shcol, cmdbuf); + bprintf(BStdOut, "%C%s%C%s", + VGA_COLOR_WHITE, shprompt, shcol, cmdbuf); BUnlockBuf(BStdOut); @@ -286,7 +295,7 @@ void ShStartShell(void) memzero(cmdbuf, CMDBUFSIZE); } - KernLog("%Cshell> %C", VGA_COLOR_WHITE, shcol); + KernLog("%C%s%C", VGA_COLOR_WHITE, shprompt, shcol); BFlushBuf(BStdIn); BFlushBuf(BStdOut); break; From e87e3def47834d28668bc79bf85a8e85d936f555 Mon Sep 17 00:00:00 2001 From: Julian Barathieu Date: Thu, 6 Feb 2020 15:14:21 +0100 Subject: [PATCH 3/3] dmesg --- kaleid/kernel/sh/shcmds.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kaleid/kernel/sh/shcmds.c b/kaleid/kernel/sh/shcmds.c index ad68bda..af245e2 100644 --- a/kaleid/kernel/sh/shcmds.c +++ b/kaleid/kernel/sh/shcmds.c @@ -108,12 +108,16 @@ error_t CmdDmesg(int argc, char **argv, char *cmdline) size_t N = 0; if (argc == 1) N = 999; - else if (argc == 2) N = atoi(argv[1]); + else if (argc == 2) N = 1 + atoi(argv[1]); else { KernLog("dmesg: no more than one argument\n"); return EINVAL; } + DebugLog("dmesg requested from kernel shell (N=%d)\n", N); + + if (N == 0) return EOK; + BLockBuf(BStdDbg); ptr = (char *)lmax((ulong)BStdDbg->buf,