summaryrefslogtreecommitdiff
path: root/Source/Kernel/Core
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-09-19 20:37:05 +0200
committerAlexis211 <alexis211@gmail.com>2009-09-19 20:37:05 +0200
commit0d5f4201217272f93d608be86e644d58f181725a (patch)
treeac4ac7f6b411cecc024866a26cf7fe158ba75f78 /Source/Kernel/Core
parent64fc3862f602750733b7dc0447d22ae5d4146821 (diff)
downloadMelon-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.cpp35
-rw-r--r--Source/Kernel/Core/Log.ns.h20
-rw-r--r--Source/Kernel/Core/kmain.wtf.cpp31
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 {