[GOOD] BUILD 0.1.0.551 DATE 9/03/2011 AT 9:25 AM
==================================================== Mainly changed: HAL.FSs + Updated 'mount' call in floppy driver, now done after controller is initialized + Added 'detect' function for FAT file systems + Implemented 'initdr' driver, however still bugged + Improved logger
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
#include <memory-add.h>
|
||||
#include "../hal/mouse/mouse.h"
|
||||
#include "../drivers/floppy/floppy.h"
|
||||
#include <fileio.h>
|
||||
|
||||
string ConsoleCommands[] =
|
||||
{
|
||||
@ -18,9 +19,11 @@ string ConsoleCommands[] =
|
||||
"read",
|
||||
"reboot",
|
||||
"restart",
|
||||
"dir",
|
||||
"cat"
|
||||
};
|
||||
|
||||
int32 ConsoleCommandsCount = 11;
|
||||
int32 ConsoleCommandsCount = 13;
|
||||
|
||||
/*****************************************
|
||||
* osver - get os info *
|
||||
@ -253,3 +256,67 @@ void CommandRead(string argv[], int32 argc)
|
||||
uint32 sector = ConvertStringToUInt(argv[1]);
|
||||
ConsoleWrite("Returned value: 0x%x\n", FloppyRead(0, sector));
|
||||
}
|
||||
|
||||
|
||||
extern MountPoint* mpArray;
|
||||
extern uint32 mpCount;
|
||||
void CommandDir (string argv[], int32 argc)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
ConsoleWrite ("Content of root: \n\n");
|
||||
uint32 i = 0;
|
||||
|
||||
for (i = 0; i < mpCount; i++)
|
||||
ConsoleWrite ("\t\t[DEV] %s\n", mpArray[i].Name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
DirectoryEntry* temp = VfsTest(argv[1]);
|
||||
|
||||
if (temp == NULL)
|
||||
{
|
||||
ConsoleWrite("%#! Invalid path!\n", ColorLightRed);
|
||||
return;
|
||||
}
|
||||
|
||||
ConsoleWrite ("Content of directory %#%s:\n\n", ColorWhite, argv[1]);
|
||||
|
||||
FILE dir; VfsOpen(&dir, argv[1]);
|
||||
uint32 i;
|
||||
|
||||
temp = VfsReadDirectory(&dir,0);
|
||||
for (i = 1; temp != NULL; i++, temp = VfsReadDirectory(&dir, 0))
|
||||
{
|
||||
ConsoleWrite ("\t\t[%s] ", (temp->Flags & 0x1) ? "FIL" : "DIR" );
|
||||
ConsoleWrite ("%s", temp->Name);
|
||||
Point p = {60, -1}; ConsoleCursorGoto(p);
|
||||
ConsoleWrite ("%u bytes\n", temp->Size);
|
||||
}
|
||||
|
||||
VfsClose(&dir);
|
||||
}
|
||||
|
||||
void CommandCat (string argv[], int32 argc)
|
||||
{
|
||||
if (argc < 2) {
|
||||
ConsoleWrite("%#! Missing parameter - complete file path.\n", ColorLightRed);
|
||||
return;
|
||||
}
|
||||
|
||||
ConsoleWrite("Contents of file %s:\n--------------------------\n");
|
||||
FILE f;
|
||||
VfsOpen(&f, argv[1]);
|
||||
uint8* buffer = kmalloc(0x1000);
|
||||
uint32 sz, i;
|
||||
|
||||
while ((sz = VfsRead(&f, 1, 0x1000, buffer)))
|
||||
{
|
||||
for (i = 0; i < sz; i++) ConsoleWrite("%c", buffer[i]);
|
||||
}
|
||||
|
||||
ConsoleWrite("\n--------------------------\n");
|
||||
kfree(buffer);
|
||||
VfsClose(&f);
|
||||
}
|
||||
|
@ -71,6 +71,8 @@ void _process_command (string params[CONSOLE_MAX_PARAMS], int32 count)
|
||||
case 8: CommandRead(params, count); break;
|
||||
case 9:
|
||||
case 10: SystemReboot(); break;
|
||||
case 11: CommandDir(params, count); break;
|
||||
case 12: CommandCat(params, count); break;
|
||||
|
||||
default: ConsoleWrite ("%#! Command %#%s%# was not implemented (yet)!\n",
|
||||
Color(0,ColorLightRed), Color(0,ColorWhite), params[0], Color(0,ColorLightRed)); break;
|
||||
|
122
Kernel/debug/logger.c
Normal file
122
Kernel/debug/logger.c
Normal file
@ -0,0 +1,122 @@
|
||||
/*
|
||||
* logger.c
|
||||
*
|
||||
* Created on: Sep 2, 2011
|
||||
* Author: Tiberiu
|
||||
*/
|
||||
#include <debugio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
string LogAllowedDevices[] = {
|
||||
"drivers",
|
||||
//"floppy",
|
||||
"hal",
|
||||
"fat",
|
||||
"initrd",
|
||||
"system",
|
||||
"vfs",
|
||||
//"mem",
|
||||
"console",
|
||||
0x0,
|
||||
0x0
|
||||
};
|
||||
|
||||
|
||||
extern uint8 ConsoleDefaultColor;
|
||||
extern void _write_char(char c);
|
||||
extern void _write_string (string s);
|
||||
|
||||
int32 LogWrite (uint8 error, string device, string format, ...)
|
||||
{
|
||||
if (!format || !*format || !device || !*device) return 0;
|
||||
|
||||
// Print logged information
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
uint32 i, len = strlen(format);
|
||||
uint8 temp_color = ConsoleDefaultColor;
|
||||
|
||||
// Check if device is allowed. Errors are allowed
|
||||
uint8 allowed = error;
|
||||
for (i = 0; LogAllowedDevices[i] != 0 && !allowed; i++)
|
||||
if (strcasecmp(device, LogAllowedDevices[i]) == 0) allowed = 1;
|
||||
|
||||
if (allowed)
|
||||
{
|
||||
ConsoleDefaultColor = (error) ? Color(ColorRed, ColorWhite) : (1 + (i % 15)) ;
|
||||
_write_char('[');
|
||||
_write_string(device);
|
||||
_write_char(']');
|
||||
|
||||
ConsoleDefaultColor = temp_color;
|
||||
_write_char(' ');
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (format[i] != '%' && allowed) _write_char(format[i]);
|
||||
else
|
||||
{
|
||||
++i;
|
||||
switch (format[i]) {
|
||||
// Character
|
||||
case 'c': {
|
||||
char c = va_arg (args, char);
|
||||
if (allowed) _write_char(c);
|
||||
break;
|
||||
}
|
||||
|
||||
// String
|
||||
case 's': {
|
||||
int32* c = (int32*) va_arg (args, string);
|
||||
if (allowed) _write_string((string)c);
|
||||
break;
|
||||
}
|
||||
|
||||
// Integers
|
||||
case 'd':
|
||||
case 'i': {
|
||||
int32 c = va_arg(args, int32); char temp[32];
|
||||
if (allowed) {
|
||||
ConvertIntToString(temp, c, 10);
|
||||
_write_string(temp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Integers - hex
|
||||
case 'X':
|
||||
case 'x': {
|
||||
int32 c = va_arg(args, int32); char temp[32];
|
||||
if (allowed) {
|
||||
ConvertUIntToString(temp, c, 16);
|
||||
_write_string(temp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Integers - unsigned
|
||||
case 'u': {
|
||||
int32 c = va_arg(args, uint32); char temp[32];
|
||||
if (allowed) {
|
||||
ConvertUIntToString (temp, c, 10);
|
||||
_write_string(temp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Colors
|
||||
case '#': {
|
||||
uint8 c = va_arg(args, uint8);
|
||||
ConsoleDefaultColor = c;
|
||||
break; }
|
||||
|
||||
default: va_end(args); return 1;
|
||||
};
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
|
||||
ConsoleDefaultColor = 0x7;
|
||||
ConsoleCursorUpdateHardware();
|
||||
return i;
|
||||
}
|
Reference in New Issue
Block a user