summaryrefslogtreecommitdiff
path: root/Source/Kernel/Core/kmain.wtf.cpp
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-12-21 00:11:00 +0100
committerAlexis211 <alexis211@gmail.com>2009-12-21 00:11:00 +0100
commita975053605a0f041fd2003792d81c80391527e71 (patch)
tree6c0c0fac346d111449411a3222911c1a363cbefc /Source/Kernel/Core/kmain.wtf.cpp
parent2a9defea402eec36e075e9e835b804dcc6926748 (diff)
downloadMelon-a975053605a0f041fd2003792d81c80391527e71.tar.gz
Melon-a975053605a0f041fd2003792d81c80391527e71.zip
Made status bar into a namespace, and added functionnalities
Diffstat (limited to 'Source/Kernel/Core/kmain.wtf.cpp')
-rw-r--r--Source/Kernel/Core/kmain.wtf.cpp72
1 files changed, 31 insertions, 41 deletions
diff --git a/Source/Kernel/Core/kmain.wtf.cpp b/Source/Kernel/Core/kmain.wtf.cpp
index 2dc0377..83fca7b 100644
--- a/Source/Kernel/Core/kmain.wtf.cpp
+++ b/Source/Kernel/Core/kmain.wtf.cpp
@@ -31,6 +31,7 @@
#include <VFS/VFS.ns.h>
#include <VFS/DirectoryNode.class.h>
#include <Core/Log.ns.h>
+#include <Core/SB.ns.h>
#include <Shell/KernelShell.class.h>
#include <Ressources/Graphics/logo.text.cxd>
@@ -107,6 +108,7 @@ void selectVideoMode(SimpleVT& v) {
u32int n = answer.toInt();
v.unmap();
if (n >= 0 and n < Disp::modes.size() and Disp::setMode(Disp::modes[n])) {
+ SB::reinit();
return;
} else {
Disp::setMode(Disp::modes[1]);
@@ -116,29 +118,9 @@ void selectVideoMode(SimpleVT& v) {
}
}
-#define STATUS(stat) { \
- progress++; \
- kvt->setColor(STATUSBAR_FGCOLOR, STATUSBAR_BGCOLOR); \
- line = kvt->csrlin(); \
- kvt->moveCursor(0, 0); \
- *kvt << "Melon is loading : {"; \
- for (u32int i = 0; i < progress; i++) *kvt << ":"; \
- *kvt << ". "; \
- kvt->moveCursor(0, 42); \
- *kvt << "} "; \
- kvt->moveCursor(0, 51); \
- *kvt << "[" << stat; \
- kvt->moveCursor(0, 78); \
- *kvt << "] "; \
- kvt->setColor(KVT_FGCOLOR, KVT_BGCOLOR); \
- kvt->moveCursor(line, 0); \
-}
-
void kmain(multiboot_info_t* mbd, u32int magic) {
DEBUG("Entering kmain.");
- u16int progress = 0, line; //For logger
-
if (magic != MULTIBOOT_BOOTLOADER_MAGIC) {
Mem::placementAddress = (u32int)&end; //Setup basic stuff so that PANIC will work
VGATextOutput *vgaout = new VGATextOutput();
@@ -163,37 +145,41 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
VGATextOutput *vgaout = new VGATextOutput();
Disp::setText(vgaout);
+ SB::init();
+
//Create a VT for logging what kernel does
- kvt = new ScrollableVT(25, 80, 20, KVT_FGCOLOR, KVT_BGCOLOR);
- kvt->map(0, 0);
- *kvt << "Melon is loading :\n";
+ SB::progress("Create kernel VT");
+ kvt = new ScrollableVT(24, 80, 20, KVT_FGCOLOR, KVT_BGCOLOR);
+ kvt->map(1, 0);
+ kvt->moveCursor(0, 0);
- STATUS("IDT");
+ SB::progress("IDT");
IDT::init(); //Setup interrupts
- STATUS("Paging");
+ SB::progress("Paging");
u32int totalRam = ((mbd->mem_upper + mbd->mem_lower) * 1024);
PhysMem::initPaging(totalRam); //Setup paging
- STATUS("GDT");
+ SB::progress("GDT");
GDT::init(); //Initialize real GDT, not fake one from loader.wtf.asm
PhysMem::removeTemporaryPages(); //Remove useless page mapping
- STATUS("Heap");
+ SB::progress("Heap");
Mem::createHeap(); //Create kernel heap
Dev::registerDevice(vgaout);
- STATUS("Timer");
+ SB::progress("Timer");
Dev::registerDevice(new Timer()); //Initialize timer
String kcmdline((char*)mbd->cmdline);
- STATUS("Multitasking");
+ SB::progress("Multitasking");
Task::initialize(kcmdline, kvt); //Initialize multitasking
+ SB::gomulti();
asm volatile("sti");
//*************************************** PARSE COMMAND LINE
- STATUS("Parse command line");
+ SB::progress("Parse command line");
Vector<String> opts = kcmdline.split(" ");
String keymap = "builtin", init = "/System/Applications/PaperWork.app";
String root = "ramfs:0";
@@ -210,15 +196,15 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
//*************************************** DEVICE SETUP
- STATUS("Keyboard"); Dev::registerDevice(new PS2Keyboard()); //Initialize keyboard driver
+ SB::progress("Keyboard"); Dev::registerDevice(new PS2Keyboard()); //Initialize keyboard driver
Kbd::setFocus(kvt); //Set focus to virtual terminal
- STATUS("VESA"); if (enableVESA) Dev::registerDevice(new VESADisplay());
- STATUS("Floppy"); FloppyController::detect();
- STATUS("Hard disk drives"); ATAController::detect();
+ SB::progress("VESA"); if (enableVESA) Dev::registerDevice(new VESADisplay());
+ SB::progress("Floppy"); FloppyController::detect();
+ SB::progress("Hard disk drives"); ATAController::detect();
//*************************************** MOUNT FILESYSTEMS
- STATUS("Root filesystem");
+ SB::progress("Root filesystem");
{ // mount root filesystem
if (!VFS::mount(String("/:") += root, kvt, mbd)) PANIC("Cannot mount root filesystem.");
}
@@ -226,7 +212,7 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
cwd = VFS::getRootNode();
Task::currProcess()->setCwd(cwd);
- STATUS("File systems");
+ SB::progress("File systems");
// mount other filesystems
for (u32int i = 0; i < mount.size(); i++) {
VFS::mount(mount[i], kvt, mbd);
@@ -243,35 +229,38 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
//*************************************** LOAD SYSTEM STUFF
- STATUS("Logging");
+ SB::progress("Logging");
Log::init(KL_STATUS); //Setup logging
Log::log(KL_STATUS, "kmain : Melon booting.");
if (keymap != "builtin") {
- STATUS("Keymap");
+ SB::progress("Keymap");
if (!Kbd::loadKeymap(keymap)) Log::log(KL_WARNING, String("WARNING : Could not load keymap ") += keymap += ", using built-in keymap instead.");
}
- STATUS("Users");
+ SB::progress("Users");
Usr::load(); //Setup user managment
Log::log(KL_STATUS, "kmain : User list loaded");
if (init.empty()) {
- STATUS("= LAUNCHING KERNEL SHELL =");
+ SB::progress("Start kernel shell");
*kvt << "\n";
new KernelShell(cwd, kvt);
+ SB::message("Melon is running \\o/");
while (KernelShell::getInstances() > 0) {
Task::currThread()->sleep(100);
}
Sys::halt();
} else {
- STATUS("= VIDEO MODE DETECTION =");
+ SB::progress("Video mode selection");
selectVideoMode(*kvt);
+ SB::progress("Logo setup");
//Create a VT for handling the Melon bootup logo
SimpleVT *melonLogoVT = new SimpleVT(melonLogoLines, melonLogoCols, TXTLOGO_FGCOLOR, TXTLOGO_BGCOLOR);
melonLogoVT->map(1);
new Thread(logoAnimation, (void*)melonLogoVT, true);
+ SB::progress("Launch INIT");
Process* p = Process::run(init, 0);
if (p == 0) {
PANIC((char*)(u8int*)ByteArray(String("Could not launch init : ") += init));
@@ -284,6 +273,7 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
p->setInVT(vt);
p->setOutVT(vt);
p->start();
+ SB::message("Init started");
while (p->getState() != P_FINISHED) Task::currThread()->sleep(100);
PANIC("Init has terminated");
}