Started implementing the virtual file system
- The FAT command is no longer available - At Startup the FileSystem initialise funciton is called, it should execute the same code as the FAT command did. - ACPI::initialise is commented out because it causes a Exception
This commit is contained in:
@ -1,29 +1,76 @@
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
#define FS_FILE 0
|
||||
#define FS_DIRECTORY 1
|
||||
#define FS_INVALID 2
|
||||
#define DEVICE_MAX 26
|
||||
|
||||
class VirtualFileSystem{
|
||||
public:
|
||||
void Initialize( FS* root);
|
||||
void Open (const char* path);
|
||||
void Read();
|
||||
void Write();
|
||||
typedef struct _FILE {
|
||||
char name [32];
|
||||
uint32_t flags;
|
||||
uint32_t filelength;
|
||||
uint32_t id;
|
||||
uint32_t eof;
|
||||
uint32_t position;
|
||||
uint32_t currentCluster;
|
||||
uint32_t device;
|
||||
}FILE, *PFILE;
|
||||
|
||||
void Mount(const char* path,FS* FileSystem);
|
||||
void UnMount(FS* FileSystem);
|
||||
typedef struct _FILE_SYSTEM{
|
||||
char name[8];
|
||||
FILE (*Directory) (const char* Directoryname);
|
||||
void (*Mount) ();
|
||||
void (*Read) (PFILE file, unsigned char* buffer, unsigned int length);
|
||||
void (Close) (PFILE);
|
||||
FILE (*Open) (const char* filename);
|
||||
}FILESYSTEM, *PFILESYSTEM;
|
||||
|
||||
private:
|
||||
FS* root;
|
||||
typedef struct _MOUNT_INFO{
|
||||
uint32_t numSectors;
|
||||
uint32_t fatOffset;
|
||||
uint32_t numRootEntries;
|
||||
uint32_t rootOffset;
|
||||
uint32_t rootSize;
|
||||
uint32_t fatSize;
|
||||
uint32_t fatEntrySize;
|
||||
}MOUNT_INFO, *PMOUNT_INFO;
|
||||
|
||||
typedef struct _DIRECTORY{
|
||||
uint8_t Filename[8];
|
||||
uint8_t Ext[3];
|
||||
uint8_t Attrib;
|
||||
uint8_t Reserved;
|
||||
uint8_t TimeCreatedMs;
|
||||
uint16_t TimeCreated;
|
||||
uint16_t DateCreated;
|
||||
uint16_t DateLastAccessed;
|
||||
uint16_t FirstClusterHiBytes;
|
||||
uint16_t LastModTime;
|
||||
uint16_t LastModDate;
|
||||
uint16_t FirstCluster;
|
||||
uint32_t FileSize;
|
||||
}DIRECTORY, *PDIRECTORY;
|
||||
// Date Format
|
||||
// [0..4] Day
|
||||
// [5..8] Month
|
||||
// [9..15] Year
|
||||
|
||||
// Time Format
|
||||
// [0..4] Seconds
|
||||
// [5..10] Minute
|
||||
// [11..15] Hour
|
||||
extern PFILESYSTEM _filesystems[DEVICE_MAX];
|
||||
|
||||
FILE volOpenFile(const char* fname);
|
||||
|
||||
void volCloseFile(PFILE file);
|
||||
void volRegisterFilesystem(PFILESYSTEM, unsigned int deviceID);
|
||||
void volUnregisterFilesystem(PFILESYSTEM);
|
||||
void volUnregisterFileSystemByID(unsigned int deviceID);
|
||||
|
||||
|
||||
};
|
||||
|
||||
struct FS
|
||||
{
|
||||
const char* name ;
|
||||
int DeviceID;
|
||||
int ManufacturerID;
|
||||
FS* next;
|
||||
char**(Read)();
|
||||
void*(Write)();
|
||||
void*(Open)();
|
||||
};
|
||||
class FileSystem{
|
||||
public:
|
||||
static void initialize();
|
||||
|
||||
};
|
Reference in New Issue
Block a user