[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