* Architecture Independent System Init
* system.c
*/
-#define DEBUG 1
-#include <common.h>
+#define DEBUG 0
+#include <acess.h>
// === TYPES ===
typedef struct
// === IMPORTS ===
extern int Modules_LoadBuiltins();
-extern int PCI_Install();
+//extern int PCI_Install();
extern void DMA_Install();
extern void Debug_SetKTerminal(char *File);
extern void StartupPrint(char *Str);
// === CODE ===
void System_Init(char *ArgString)
-{
- // - Start Builtin Drivers & Filesystems
- StartupPrint("Scanning PCI Bus...");
- PCI_Install();
- StartupPrint("Loading DMA...");
- DMA_Install();
- StartupPrint("Loading staticly compiled modules...");
- Modules_LoadBuiltins();
-
+{
// Set the debug to be echoed to the terminal
- StartupPrint("Kernel now echoes to VT6 (Ctrl-Alt-F7)");
- Debug_SetKTerminal("/Devices/VTerm/6");
+ StartupPrint("Kernel now echoes to VT7 (Ctrl-Alt-F8)");
+ Debug_SetKTerminal("/Devices/VTerm/7");
// - Parse Kernel's Command Line
System_ParseCommandLine(ArgString);
// - Execute the Config Script
- Log("Executing config script...");
+ Log_Log("CFG", "Executing config script...");
System_ExecuteScript();
}
int i;
char *str;
- Log("Kernel Command Line: \"%s\"", ArgString);
+ Log_Log("CFG", "Kernel Invocation \"%s\"", ArgString);
// --- Get Arguments ---
str = ArgString;
for( argc = 0; argc < 32; argc++ )
{
- while(*str == ' ') str++; // Eat Whitespace
- if(*str == '\0') { argc--; break;} // End of string
+ // Eat Whitespace
+ while(*str == ' ') str++;
+ // Check for the end of the string
+ if(*str == '\0') { argc--; break;}
argv[argc] = str;
while(*str && *str != ' ')
{
}*/
str++;
}
- if(*str == '\0') break; // End of string
+ if(*str == '\0') break; // Check for EOS
*str = '\0'; // Cap off argument string
str ++; // and increment the string pointer
}
// Check if the equals was found
if( *value == '\0' ) {
- Warning("Expected '=' in the string '%s'", Arg);
+ Log_Warning("CFG", "Expected '=' in the string '%s'", Arg);
return ;
}
// - Symbolic Link <link>=<destination>
if(value[0] == '/')
{
- Log("Symbolic link '%s' pointing to '%s'", Arg, value);
+ Log_Log("CFG", "Symbolic link '%s' pointing to '%s'", Arg, value);
VFS_Symlink(Arg, value);
}
// - Mount <mountpoint>=<fs>:<device>
}
// Create Mountpoint
if( (fd = VFS_Open(Arg, 0)) == -1 ) {
- Log("Creating directory '%s'", Arg, value);
+ Log_Log("CFG", "Creating directory '%s'", Arg, value);
VFS_MkDir( Arg );
} else {
VFS_Close(fd);
}
// Mount
- Log("Mounting '%s' to '%s' ('%s')", dev, Arg, value);
+ Log_Log("CFG", "Mounting '%s' to '%s' ('%s')", dev, Arg, value);
VFS_Mount(dev, Arg, value, "");
}
}
// Check for boolean/flag (no '=')
if(*value == '\0')
{
- if(strcmp(Arg, "") == 0) {
- } else {
- Warning("Kernel flag '%s' is not recognised", Arg);
- }
+ //if(strcmp(Arg, "") == 0) {
+ //} else {
+ Log_Warning("CFG", "Kernel flag '%s' is not recognised", Arg);
+ //}
}
else
{
value ++; // and eat it's position
if(strcmp(Arg, "SCRIPT") == 0) {
- Log("Config Script: '%s'", value);
+ Log_Log("CFG", "Config Script: '%s'", value);
gsConfigScript = value;
} else {
- Warning("Kernel config setting '%s' is not recognised", Arg);
+ Log_Warning("CFG", "Kernel config setting '%s' is not recognised", Arg);
}
}
// Open Script
fp = VFS_Open(gsConfigScript, VFS_OPENFLAG_READ);
if(fp == -1) {
- Warning("[CFG] Passed script '%s' does not exist", gsConfigScript);
+ Log_Warning("CFG", "Passed script '%s' does not exist", gsConfigScript);
return;
}
// Parse File
file = System_Int_ParseFile(fData);
- // Loop lines
+ // Parse each line
for( i = 0; i < file->nLines; i++ )
{
line = &file->Lines[i];
if( line->nParts == 0 ) continue; // Skip blank
- // Mount
- if( strcmp(line->Parts[0], "mount") == 0 ) {
+ // Mount Device
+ if( strcmp(line->Parts[0], "mount") == 0 )
+ {
if( line->nParts != 4 ) {
- Warning("Configuration command 'mount' requires 3 arguments, %i given",
+ Log_Warning("CFG", "Configuration command 'mount' requires 3 arguments, %i given",
line->nParts-1);
continue;
}
- //Log("[CFG ] Mount '%s' to '%s' (%s)",
+ //Log_Log("CFG", "Mount '%s' to '%s' (%s)",
// line->Parts[1], line->Parts[2], line->Parts[3]);
//! \todo Use an optional 4th argument for the options string
VFS_Mount(line->Parts[1], line->Parts[2], line->Parts[3], "");
}
- // Module
- else if(strcmp(line->Parts[0], "module") == 0) {
+ // Load a Module
+ else if(strcmp(line->Parts[0], "module") == 0)
+ {
if( line->nParts < 2 || line->nParts > 3 ) {
- Warning("Configuration command 'module' requires 1 or 2 arguments, %i given",
+ Log_Warning("CFG",
+ "Configuration command 'module' requires 1 or 2 arguments, %i given",
line->nParts-1);
continue;
}
else
Module_LoadFile(line->Parts[1], "");
}
- // UDI Module
- else if(strcmp(line->Parts[0], "udimod") == 0) {
+ // Load a UDI Module
+ else if(strcmp(line->Parts[0], "udimod") == 0)
+ {
if( line->nParts != 2 ) {
- Warning("Configuration command 'udimod' requires 1 argument, %i given",
+ Log_Warning("CFG", "Configuration command 'udimod' requires 1 argument, %i given",
line->nParts-1);
continue;
}
- Log("[CFG ] Load UDI Module '%s'", line->Parts[1]);
+ Log_Log("CFG", "Load UDI Module '%s'", line->Parts[1]);
Module_LoadFile(line->Parts[1], "");
}
- // EDI Module
- else if(strcmp(line->Parts[0], "edimod") == 0) {
+ // Load a EDI Module
+ else if(strcmp(line->Parts[0], "edimod") == 0)
+ {
if( line->nParts != 2 ) {
- Warning("Configuration command 'edimod' requires 1 argument, %i given",
+ Log_Warning("CFG", "Configuration command 'edimod' requires 1 argument, %i given",
line->nParts-1);
continue;
}
- Log("[CFG ] Load EDI Module '%s'", line->Parts[1]);
+ Log_Log("CFG", "Load EDI Module '%s'", line->Parts[1]);
Module_LoadFile(line->Parts[1], "");
}
- // Symbolic Link
- else if(strcmp(line->Parts[0], "symlink") == 0) {
+ // Create a Symbolic Link
+ else if(strcmp(line->Parts[0], "symlink") == 0)
+ {
if( line->nParts != 3 ) {
- Warning("Configuration command 'symlink' requires 2 arguments, %i given",
+ Log_Warning("CFG", "Configuration command 'symlink' requires 2 arguments, %i given",
line->nParts-1);
continue;
}
- Log("[CFG ] Symlink '%s' pointing to '%s'",
+ Log_Log("CFG", "Symlink '%s' pointing to '%s'",
line->Parts[1], line->Parts[2]);
VFS_Symlink(line->Parts[1], line->Parts[2]);
}
- // Create Directory
- else if(strcmp(line->Parts[0], "mkdir") == 0) {
+ // Create a Directory
+ else if(strcmp(line->Parts[0], "mkdir") == 0)
+ {
if( line->nParts != 2 ) {
- Warning("Configuration command 'mkdir' requires 1 argument, %i given",
+ Log_Warning("CFG", "Configuration command 'mkdir' requires 1 argument, %i given",
line->nParts-1);
continue;
}
- Log("[CFG ] New Directory '%s'", line->Parts[1]);
+ Log_Log("CFG", "New Directory '%s'", line->Parts[1]);
VFS_MkDir(line->Parts[1]);
}
// Spawn a process
- else if(strcmp(line->Parts[0], "spawn") == 0) {
+ else if(strcmp(line->Parts[0], "spawn") == 0)
+ {
if( line->nParts != 2 ) {
- Warning("Configuration command 'spawn' requires 1 argument, %i given",
+ Log_Warning("CFG", "Configuration command 'spawn' requires 1 argument, %i given",
line->nParts-1);
continue;
}
- Log("[CFG ] Starting '%s' as a new task", line->Parts[1]);
+ Log_Log("CFG", "Starting '%s' as a new task", line->Parts[1]);
Proc_Spawn(line->Parts[1]);
}
else {
- Warning("Unknown configuration command '%s' on line %i",
+ Log_Warning("CFG", "Unknown configuration command '%s' on line %i",
line->Parts[0],
line->TrueLine
);