diff options
author | Alexis211 <alexis211@gmail.com> | 2009-10-23 17:28:25 +0200 |
---|---|---|
committer | Alexis211 <alexis211@gmail.com> | 2009-10-23 17:28:25 +0200 |
commit | f0556ed7f051fb101dc68752526696365bf79a11 (patch) | |
tree | 61345fbadbf76c6f12b36b48a9dfadd744f6cbbd /Source/Kernel/Core | |
parent | df179c18baab4b5d85a283924fb23dfee7ea7fdb (diff) | |
download | Melon-f0556ed7f051fb101dc68752526696365bf79a11.tar.gz Melon-f0556ed7f051fb101dc68752526696365bf79a11.zip |
More work on syscalls and shell
Diffstat (limited to 'Source/Kernel/Core')
-rw-r--r-- | Source/Kernel/Core/Sys.ns.cpp | 17 | ||||
-rw-r--r-- | Source/Kernel/Core/Sys.ns.h | 1 |
2 files changed, 15 insertions, 3 deletions
diff --git a/Source/Kernel/Core/Sys.ns.cpp b/Source/Kernel/Core/Sys.ns.cpp index c99544b..1b52c0f 100644 --- a/Source/Kernel/Core/Sys.ns.cpp +++ b/Source/Kernel/Core/Sys.ns.cpp @@ -3,6 +3,8 @@ #include <Core/Log.ns.h> #include <VTManager/SimpleVT.class.h> #include <SyscallManager/IDT.ns.h> +#include <Sys.iface.h> +#include <UserManager/Usr.ns.h> #define DEBUGVT(x) SimpleVT *x = new SimpleVT(4, 56, 0, 15); x->map(); x->put('\n'); @@ -122,15 +124,18 @@ void panic_assert(char *file, u32int line, char *desc) { while (1) asm volatile("hlt"); //Enter infinite loop for halt } -void reboot() { +void shutdown_cleanup() { asm volatile("cli"); Log::close(); +} + +void reboot() { + shutdown_cleanup(); outb(0x64, 0xFE); } void halt() { - asm volatile("cli"); - Log::close(); + shutdown_cleanup(); String message("MELON SEZ : KTHXBYE, U CAN NAOW TURNZ OFF UR COMPUTER."); SimpleVT vt(3, message.size() + 16, 7, 6); vt.map(); @@ -138,4 +143,10 @@ void halt() { while (1) asm volatile("cli"); } +u32int scall(u8int wat, u32int a, u32int b, u32int c, u32int d) { + if (wat == SYIF_HALT && ISROOT) halt(); + if (wat == SYIF_REBOOT && ISROOT) reboot(); + return (u32int) - 1; +} + } diff --git a/Source/Kernel/Core/Sys.ns.h b/Source/Kernel/Core/Sys.ns.h index 6779585..1ed446c 100644 --- a/Source/Kernel/Core/Sys.ns.h +++ b/Source/Kernel/Core/Sys.ns.h @@ -32,6 +32,7 @@ namespace Sys { void bochs_output_hex(u32int i); void reboot(); void halt(); + u32int scall(u8int, u32int, u32int, u32int, u32int); //System call handler } #endif |