Shell commands musage, mmap, date
This commit is contained in:
parent
fcffbcabe9
commit
3ddfce4ba8
2
Makefile
2
Makefile
|
@ -99,7 +99,7 @@ KernSources = kernel/cpu/cpuid.c \
|
||||||
kernel/init/info.c kernel/init/ssp.c \
|
kernel/init/info.c kernel/init/ssp.c \
|
||||||
kernel/io/rtc.c kernel/io/keyb.c \
|
kernel/io/rtc.c kernel/io/keyb.c \
|
||||||
kernel/io/spkr.c kernel/po/shtdwn.c \
|
kernel/io/spkr.c kernel/po/shtdwn.c \
|
||||||
kernel/ke/shell.c kernel/ke/shcmds.c
|
kernel/sh/shell.c kernel/sh/shcmds.c
|
||||||
|
|
||||||
LibCObj=$(patsubst %.c,$(KOBJDIR)/%.o,$(LibCSources))
|
LibCObj=$(patsubst %.c,$(KOBJDIR)/%.o,$(LibCSources))
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ void IoChangeCodePage(char *CodePage);
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|
||||||
#define KEY_ESC 27
|
#define KEY_ESC 27
|
||||||
|
#define KEY_BS 8
|
||||||
#define KEY_BEL 7
|
#define KEY_BEL 7
|
||||||
#define KEY_DC1 17
|
#define KEY_DC1 17
|
||||||
#define KEY_DC2 18
|
#define KEY_DC2 18
|
||||||
|
|
|
@ -27,8 +27,11 @@
|
||||||
Command_t cmdtable[] =
|
Command_t cmdtable[] =
|
||||||
{
|
{
|
||||||
{ "beep", CmdBeep, "Make a beep" },
|
{ "beep", CmdBeep, "Make a beep" },
|
||||||
|
{ "date", CmdDate, "Print date" },
|
||||||
{ "exit", CmdQuit, "Initiate shutdown" },
|
{ "exit", CmdQuit, "Initiate shutdown" },
|
||||||
{ "help", CmdHelp, "Show this message" },
|
{ "help", CmdHelp, "Show this message" },
|
||||||
|
{ "mmap", CmdMemMap, "Show memory map" },
|
||||||
|
{ "musage", CmdMemUsage, "Show memory statistics" },
|
||||||
{ "quit", CmdQuit, "Alias for 'exit'" },
|
{ "quit", CmdQuit, "Alias for 'exit'" },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
@ -58,10 +61,74 @@ error_t CmdHelp(int argc, char **argv, char *cmdline)
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
KernLog("List of all shell built-ins:\n");
|
KernLog("List of all shell built-ins:\n");
|
||||||
for (cmd = cmdtable; cmd->name != NULL; cmd++, count++) {
|
for (cmd = cmdtable; cmd->name != NULL; cmd++, count++) {
|
||||||
KernLog("\t%s\t%s\n", cmd->name, cmd->help);
|
KernLog("\t%s\t\t%s\n", cmd->name, cmd->help);
|
||||||
}
|
}
|
||||||
KernLog("End of list; %u commands total\n\n", count);
|
KernLog("End of list; %u commands total\n", count);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EOK;
|
return EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_t CmdDate(int argc, char **argv, char *cmdline)
|
||||||
|
{
|
||||||
|
IoPrintRtcTime();
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_t CmdMemMap(int argc, char **argv, char *cmdline)
|
||||||
|
{
|
||||||
|
MmPrintMemoryMap();
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ADDR_TO_MB(x) ((x)>>20)
|
||||||
|
#define ADDR_TO_KB(x) (((x)>>10)&(KB-1))
|
||||||
|
#define ADDR_TO_B(x) ((x)&(KB-1))
|
||||||
|
|
||||||
|
error_t CmdMemUsage(int argc, char **argv, char *cmdline)
|
||||||
|
{
|
||||||
|
size_t start, end;
|
||||||
|
size_t diff, max;
|
||||||
|
|
||||||
|
ulong flags = KePauseIRQs();
|
||||||
|
|
||||||
|
start = (size_t)_heap_start;
|
||||||
|
end = (size_t)_heap_end;
|
||||||
|
max = _heap_max;
|
||||||
|
|
||||||
|
KeRestoreIRQs(flags);
|
||||||
|
|
||||||
|
diff = (size_t)end - (size_t)start;
|
||||||
|
|
||||||
|
KernLog("Heap start:\t\t%p (%luMB + %luKB + %luB)\n",
|
||||||
|
start, ADDR_TO_MB(start),
|
||||||
|
ADDR_TO_KB(start),
|
||||||
|
ADDR_TO_B(start));
|
||||||
|
|
||||||
|
KernLog("Heap end:\t\t%p (%luMB + %luKB + %luB)\n",
|
||||||
|
end, ADDR_TO_MB(end),
|
||||||
|
ADDR_TO_KB(end),
|
||||||
|
ADDR_TO_B(end));
|
||||||
|
|
||||||
|
KernLog("Heap size:\t\t%p (%luMB + %luKB + %luB)\n",
|
||||||
|
diff, ADDR_TO_MB(diff),
|
||||||
|
ADDR_TO_KB(diff),
|
||||||
|
ADDR_TO_B(diff));
|
||||||
|
|
||||||
|
KernLog("Max heap size:\t%luMB + %luKB + %luB\n",
|
||||||
|
ADDR_TO_MB(max),
|
||||||
|
ADDR_TO_KB(max),
|
||||||
|
ADDR_TO_B(max));
|
||||||
|
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ void KeStartShell(void)
|
||||||
memzero(argv0, ARG_MAX);
|
memzero(argv0, ARG_MAX);
|
||||||
shargv = &argv0;
|
shargv = &argv0;
|
||||||
|
|
||||||
KernLog("\nshell> ");
|
KernLog("shell> ");
|
||||||
BFlushBuf(BStdOut);
|
BFlushBuf(BStdOut);
|
||||||
|
|
||||||
while ((rc = BGetFromBuf(BStdIn, &ch)) == EOK || rc == EENDF) {
|
while ((rc = BGetFromBuf(BStdIn, &ch)) == EOK || rc == EENDF) {
|
||||||
|
@ -85,6 +85,13 @@ void KeStartShell(void)
|
||||||
|
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
|
|
||||||
|
case KEY_BS:
|
||||||
|
*bufptr = 0;
|
||||||
|
if (bufptr > cmdbuf) {
|
||||||
|
bufptr--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case KEY_BEL:
|
case KEY_BEL:
|
||||||
if (rand() % 64 == 0) {
|
if (rand() % 64 == 0) {
|
||||||
IoDoStarWars();
|
IoDoStarWars();
|
|
@ -24,6 +24,9 @@
|
||||||
|
|
||||||
#include <extras/buf.h>
|
#include <extras/buf.h>
|
||||||
#include <extras/argv.h>
|
#include <extras/argv.h>
|
||||||
|
|
||||||
|
#include <kernel/mm.h>
|
||||||
|
#include <kernel/heap.h>
|
||||||
#include <kernel/time.h>
|
#include <kernel/time.h>
|
||||||
#include <kernel/speaker.h>
|
#include <kernel/speaker.h>
|
||||||
#include <kernel/iomisc.h>
|
#include <kernel/iomisc.h>
|
||||||
|
@ -53,6 +56,9 @@ struct Command_t
|
||||||
DEC_CMD(Beep);
|
DEC_CMD(Beep);
|
||||||
DEC_CMD(Quit);
|
DEC_CMD(Quit);
|
||||||
DEC_CMD(Help);
|
DEC_CMD(Help);
|
||||||
|
DEC_CMD(Date);
|
||||||
|
DEC_CMD(MemMap);
|
||||||
|
DEC_CMD(MemUsage);
|
||||||
|
|
||||||
extern Command_t cmdtable[];
|
extern Command_t cmdtable[];
|
||||||
|
|
Loading…
Reference in New Issue