// vfs.c // Author: Josh Holtrop // Created: 12/31/03 void vfs_init() { byte ramDiskPresent = *(byte *)0xC0090000; if (ramDiskPresent) { strcpy(rootDirectory, "rd0"); firstDevice = malloc(sizeof(DeviceEntry)); firstDevice->link = 0; firstDevice->diskDevice = malloc(sizeof(DiskDevice)); firstDevice->diskDevice->type = VFS_DISK_RD; firstDevice->diskDevice->fileSystem = VFS_FS_FAT12; strcpy(firstDevice->diskDevice->id, "rd0"); firstDevice->diskDevice->location = 0xC0200000; } else { rootDirectory[0] = 0; } } byte *vfs_readFile(char *fileName) { char *newFileName = fileName; char device[4]; if (fileName[0] == '/') { newFileName = malloc(strlen(fileName)+4); strcpy(newFileName, rootDirectory); strcat(newFileName, fileName); } strcpy(device, newFileName); DiskDevice *dd = vfs_getDiskDeviceByID(device); if (newFileName != fileName) free(newFileName); } byte *vfs_readSector(DiskDevice *dd, dword sector) { switch(dd->type) { case VFS_DISK_RD: return rd_readSector(dd, sector); } return 0; } DiskDevice *vfs_getDiskDeviceByID(char *id) { DeviceEntry *de = firstDevice; for (;;) { if (strcmp(de->diskDevice->id, id)) return de->diskDevice; de = (DeviceEntry *)de->link; if (!de) break; } return 0; }