void processRAMDiskCommand(char ** argPtr, const char * cmd) { char * ptr = *argPtr; char param[1024]; getNextArg(&ptr, param); if (strcmp(cmd, "m") == 0) { mountRAMDisk(param); sleep(2); } else if (strcmp(cmd, "u") == 0) { umountRAMDisk(); sleep(2); } else if (strcmp(cmd, "e") == 0) { setRAMDiskBTHook(true); sleep(2); } else if (strcmp(cmd, "d") == 0) { setRAMDiskBTHook(false); sleep(2); } else if (strcmp(cmd, "i") == 0) { setActiveDisplayPage(1); clearScreenRows(0, 24); setCursorPosition(0, 0, 1); showInfoRAMDisk(); //Azi: check Chazi on these line breaks here*** printf("\n\nPress any key to continue.\n"); getchar(); setActiveDisplayPage(0); } else { setActiveDisplayPage(1); clearScreenRows(0, 24); setCursorPosition(0, 0, 1); printf("\nusage:\n"); printf("\n?rd i - display ramdisk information"); printf("\n?rd m <filename> - mount ramdisk image\n?rd u - unmount ramdisk image"); printf("\n?rd e - enable bt(0,0) alias\n?rd d - disable bt(0,0) alias"); printf("\n\nPress any key to continue.\n"); getchar(); setActiveDisplayPage(0); } }
int mountRAMDisk(const char * param) { int fh = 0, ramDiskSize; int error = 0; // Get file handle for ramdisk file. fh = open(param, 0); if (fh != -1) { printf("\nreading ramdisk image: %s", param); ramDiskSize = file_size(fh); if (ramDiskSize > 0) { // Unmount previously mounted image if exists. umountRAMDisk(); // Read new ramdisk image contents into PREBOOT_DATA area. if (read(fh, (char *)PREBOOT_DATA, ramDiskSize) != ramDiskSize) error = -1; } else error = -1; close(fh); } else error = -1; if (error == 0) { // Save filename in gRAMDiskFile to display information. strcpy(gRAMDiskFile, param); // Set gMI as well for the multiboot ramdisk driver hook. gMI = gRAMDiskMI = malloc(sizeof(multiboot_info)); struct multiboot_module * ramdisk_module = malloc(sizeof(multiboot_module)); // Fill in multiboot info and module structures. if (gRAMDiskMI != NULL && ramdisk_module != NULL) { gRAMDiskMI->mi_mods_count = 1; gRAMDiskMI->mi_mods_addr = (uint32_t)ramdisk_module; ramdisk_module->mm_mod_start = PREBOOT_DATA; ramdisk_module->mm_mod_end = PREBOOT_DATA + ramDiskSize; // Set ramdisk driver hooks. p_get_ramdisk_info = &multiboot_get_ramdisk_info; p_ramdiskReadBytes = &multibootRamdiskReadBytes; int partCount; // unused // Save bvr of the mounted image. gRAMDiskVolume = diskScanBootVolumes(0x100, &partCount); if(gRAMDiskVolume == NULL) { umountRAMDisk(); printf("\nRamdisk contains no partitions."); } else { char dirSpec[128]; // Reading ramdisk configuration. strcpy(dirSpec, RAMDISKCONFIG_FILENAME); if (loadConfigFile(dirSpec, &bootInfo->ramdiskConfig) == 0) { getBoolForKey("BTAlias", &gRAMDiskBTAliased, &bootInfo->ramdiskConfig); } else { printf("\nno ramdisk config...\n"); } printf("\nmounting: done"); } } } return error; }