[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:
2021-09-14 18:51:43 +03:00
parent 0372dcee81
commit caa7718af9
59 changed files with 991 additions and 112 deletions

View File

@ -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);
}

View File

@ -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
View 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;
}