diff options
author | Alexis211 <alexis211@gmail.com> | 2009-09-19 20:37:05 +0200 |
---|---|---|
committer | Alexis211 <alexis211@gmail.com> | 2009-09-19 20:37:05 +0200 |
commit | 0d5f4201217272f93d608be86e644d58f181725a (patch) | |
tree | ac4ac7f6b411cecc024866a26cf7fe158ba75f78 /Source/Kernel/Core | |
parent | 64fc3862f602750733b7dc0447d22ae5d4146821 (diff) | |
download | Melon-0d5f4201217272f93d608be86e644d58f181725a.tar.gz Melon-0d5f4201217272f93d608be86e644d58f181725a.zip |
Lot of changes. Log now go to /System/Logs/*.log
Diffstat (limited to 'Source/Kernel/Core')
-rw-r--r-- | Source/Kernel/Core/Log.ns.cpp | 35 | ||||
-rw-r--r-- | Source/Kernel/Core/Log.ns.h | 20 | ||||
-rw-r--r-- | Source/Kernel/Core/kmain.wtf.cpp | 31 |
3 files changed, 72 insertions, 14 deletions
diff --git a/Source/Kernel/Core/Log.ns.cpp b/Source/Kernel/Core/Log.ns.cpp new file mode 100644 index 0000000..fbdb7f2 --- /dev/null +++ b/Source/Kernel/Core/Log.ns.cpp @@ -0,0 +1,35 @@ +#include "Log.ns.h" +#include <VFS/VFS.ns.h> + +namespace Log { + +TextFile *logs[7] = {0, 0, 0, 0, 0, 0, 0}; + +void init(u8int loglevel) { + //Create directories + if (VFS::find("/System") == 0) VFS::createDirectory("/System"); + if (VFS::find("/System/Logs") == 0) VFS::createDirectory("/System/Logs"); + + if (KL_PANIC <= loglevel) logs[KL_PANIC] = new TextFile("/System/Logs/Panic.log", FM_APPEND); + if (KL_CRITICAL <= loglevel) logs[KL_CRITICAL] = new TextFile("/System/Logs/Critical.log", FM_APPEND); + if (KL_ERROR <= loglevel) logs[KL_ERROR] = new TextFile("/System/Logs/Error.log", FM_APPEND); + if (KL_WARNING <= loglevel) logs[KL_WARNING] = new TextFile("/System/Logs/Warning.log", FM_APPEND); + if (KL_NOTICE <= loglevel) logs[KL_NOTICE] = new TextFile("/System/Logs/Notice.log", FM_APPEND); + if (KL_STATUS <= loglevel) logs[KL_STATUS] = new TextFile("/System/Logs/Status.log", FM_APPEND); + if (KL_DEBUG <= loglevel) logs[KL_DEBUG] = new TextFile("/System/Logs/Debug.log", FM_APPEND); +} + +void close() { + for (u32int i = 0; i < 7; i++) { + if (logs[i] != 0) { + delete logs[i]; + logs[i] = 0; + } + } +} + +void log(u8int level, String event) { + if (logs[level] != 0 and logs[level]->valid()) logs[level]->write(event, true); +} + +} diff --git a/Source/Kernel/Core/Log.ns.h b/Source/Kernel/Core/Log.ns.h new file mode 100644 index 0000000..d825f62 --- /dev/null +++ b/Source/Kernel/Core/Log.ns.h @@ -0,0 +1,20 @@ +#ifndef DEF_LOG_NS_H +#define DEF_LOG_NS_H + +#include <VFS/TextFile.class.h> + +#define KL_PANIC 0 +#define KL_CRITICAL 1 +#define KL_ERROR 2 +#define KL_WARNING 3 +#define KL_NOTICE 4 +#define KL_STATUS 5 +#define KL_DEBUG 6 + +namespace Log { + void init(u8int loglevel); + void close(); + void log(u8int level, String event); +} + +#endif diff --git a/Source/Kernel/Core/kmain.wtf.cpp b/Source/Kernel/Core/kmain.wtf.cpp index 11fbbea..e3ef2fd 100644 --- a/Source/Kernel/Core/kmain.wtf.cpp +++ b/Source/Kernel/Core/kmain.wtf.cpp @@ -24,7 +24,8 @@ #include <VFS/FileNode.class.h> #include <VFS/VFS.ns.h> #include <VFS/DirectoryNode.class.h> -#include <VFS/File.class.h> +#include <VFS/TextFile.class.h> +#include <Core/Log.ns.h> #include <Ressources/logo.cxd> #include <Ressources/keymap-fr.wtf.cxd> @@ -95,30 +96,33 @@ void kmain(multiboot_info_t* mbd, u32int magic) { Mem::createHeap(); OK(kvt); INFO(kvt); *kvt << "Free frames : " << (s32int)PhysMem::free() << "/" << (s32int)PhysMem::total() << "\n"; - PROCESSING(kvt, "Registering textual VGA output..."); - Dev::registerDevice(vgaout); OK(kvt); - PROCESSING(kvt,"Initializing PIT..."); Dev::registerDevice(new Timer()); OK(kvt); PROCESSING(kvt, "Initializing multitasking..."); Task::initialize(String((char*)mbd->cmdline), kvt); OK(kvt); - PROCESSING(kvt, "Setting up keyboard..."); - Dev::registerDevice(new PS2Keyboard()); //Initialize keyboard driver - Kbd::setKeymap(keymapFR_normal, keymapFR_shift, keymapFR_caps, keymapFR_altgr, keymapFR_shiftaltgr); //Load keymap - Kbd::setFocus(kvt); //Set focus to virtual terminal - OK(kvt); - - PROCESSING(kvt, "Detecting floppy drives..."); - FloppyController::detect(); OK(kvt); - PROCESSING(kvt, "Mounting first module as ramfs on root directory..."); FileSystem* fs = new RamFS((u8int*)mods[0].mod_start, 1024 * 1024); DirectoryNode* cwd; cwd = fs->getRootNode(); VFS::setRootNode(cwd); OK(kvt); + PROCESSING(kvt, "Setting up logs..."); + Log::init(KL_STATUS); OK(kvt); + INFO(kvt); *kvt << "Logs are now going to files in /System/Logs/\n"; + + Dev::registerDevice(vgaout); + Log::log(KL_STATUS, "kmain : Registered textual VGA output"); + + Dev::registerDevice(new PS2Keyboard()); //Initialize keyboard driver + Kbd::setKeymap(keymapFR_normal, keymapFR_shift, keymapFR_caps, keymapFR_altgr, keymapFR_shiftaltgr); //Load keymap + Kbd::setFocus(kvt); //Set focus to virtual terminal + Log::log(KL_STATUS, "kmain : Keyboard set up"); + + FloppyController::detect(); + Log::log(KL_STATUS, "kmain : Floppy drives detected"); + asm volatile("sti"); while(1) { @@ -212,7 +216,6 @@ void kmain(multiboot_info_t* mbd, u32int magic) { *kvt << "No argument specified.\n"; } } else if (tokens[0] == "wf") { - //*kvt << "Sorry, this command isn't implemented yet.\n"; if (tokens.size() == 1) { *kvt << "No file to write !\n"; } else { |