bool CapriceOpenDisk::HandleMessage(CMessage* pMessage) { bool bHandled = false; if (pMessage) { switch(pMessage->MessageType()) { case CMessage::CTRL_SINGLELCLICK: { if (pMessage->Destination() == this) { if (pMessage->Source() == m_pButtonCancel) { CloseFrame(); CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this)); break; } if (pMessage->Source() == m_pButtonOpen) { // Put selected ROM filename on button: (if there is a selection) int selectedDiskIndex = m_pListBoxDisk->getFirstSelectedIndex(); if (selectedDiskIndex >= 0) { DriveFile = (m_pListBoxDisk->GetItem(selectedDiskIndex)).sItemText; if (selDrive) strncpy(CPC.drvB_file, DriveFile.c_str(), sizeof(CPC.drvB_file)); else strncpy(CPC.drvA_file, DriveFile.c_str(), sizeof(CPC.drvA_file)); std::string pchFile = DrivePath+DriveFile; dsk_load(pchFile.c_str(),pDrive,'A'); CloseFrame(); CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this)); } break; } if (pMessage->Source() == m_pButtonClear) { if (selDrive) { strcpy(CPC.drvB_file, ""); } else { strcpy(CPC.drvA_file, ""); } dsk_eject(pDrive); CloseFrame(); bHandled = true; break; } CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this)); } break; } default : bHandled = CFrame::HandleMessage(pMessage); break; } } return bHandled; }
int dsk_load (const std::string &filename, t_drive *drive) { int iRetCode = 0; LOG_DEBUG("Loading disk: " << filename); dsk_eject(drive); if ((pfileObject = fopen(filename.c_str(), "rb")) != nullptr) { iRetCode = dsk_load(pfileObject, drive); fclose(pfileObject); } else { LOG_ERROR("File not found: " << filename); iRetCode = ERR_FILE_NOT_FOUND; } if (iRetCode != 0) { // on error, 'eject' disk from drive dsk_eject(drive); } return iRetCode; }
static void load_options(void) { XFILE *file; Options tmp; int error = 0; long n, opt_n; get_set_video(0); /* DjV 007 030103 get current video mode */ if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { opt_n = sizeof(Options); tmp.version = 0; x_fread(file, &tmp, sizeof(int)); /* HR 240103: load older cfg versions */ if ( tmp.version >= MIN_VERSION && tmp.version < CFG_VERSION ) { memset(&tmp.V2_2, 0, sizeof(tmp.V2_2)); opt_n -= sizeof(tmp.V2_2); } x_fclose(file); } if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { if ((n = x_fread(file, &tmp, opt_n)) == opt_n) { if ( tmp.version >= MIN_VERSION /* DjV 005 120103 (was 0x119) */ && tmp.version <= CFG_VERSION && tmp.magic == MAGIC ) { options = tmp; if (opt_n != sizeof(Options)) /* HR 240103 */ { options.V2_2.fields = WD_SHSIZ | WD_SHDAT | WD_SHTIM | WD_SHATT; /* DjV 010 251202 HR 240103 */ options.attribs = FA_SUBDIR | FA_SYSTEM; /* DjV 004 251202 HR 240103 */ } ins_shorts(); /* DjV 019 080103 put kbd shortcuts into menu texts */ wd_deselect_all(); wd_default(); if (tmp.cprefs & SAVE_COLORS) error = load_colors(file); if (error == 0) if ((error = dsk_load(file)) == 0) if ((error = ft_load(file)) == 0) if ((error = icnt_load(file)) == 0) if ((error = app_load(file)) == 0) if ((error = prg_load(file)) == 0) error = wd_load(file); } else { alert_printf(1, MVALIDCF); x_fclose(file); return; } /* DjV 007 030103 ---vvv--- */ /* If read ok, set video state but do not change resolution */ get_set_video(1); /* DjV 007 030103 ---^^^--- */ } else { error = (n < 0) ? (int) n : EEOF; hndl_error(MLOADCFG, error); x_fclose(file); return; } x_fclose(file); } if (error != 0) { hndl_error(MLOADCFG, error); opt_default(); dsk_default(); ft_default(); icnt_default(); app_default(); prg_default(); wd_default(); } if (options.version < 0x0130) options.dial_mode = (options.cprefs & 0x80) ? XD_BUFFERED : XD_NORMAL; xd_setposmode((options.cprefs & DIALPOS_MODE) ? XD_MOUSE : XD_CENTERED); set_dialmode(); options.version = CFG_VERSION; }
extern byte *pbRAMbuffer; extern FILE *pfileObject; struct file_loader { DRIVE drive; std::string extension; int (*load_from_filename)(const std::string& filename); int (*load_from_file)(FILE *file); }; file_loader files_loader_list[] = { { DSK_A, ".dsk", [](const std::string& filename) -> int { return dsk_load(filename, &driveA); }, [](FILE* file) -> int { return dsk_load(file, &driveA); } }, { DSK_B, ".dsk", [](const std::string& filename) -> int { return dsk_load(filename, &driveB); }, [](FILE* file) -> int { return dsk_load(file, &driveB); } }, #ifdef WITH_IPF { DSK_A, ".ipf", [](const std::string& filename) -> int { return ipf_load(filename, &driveA); }, [](FILE* file) -> int { return ipf_load(file, &driveA); } }, { DSK_B, ".ipf", [](const std::string& filename) -> int { return ipf_load(filename, &driveB); }, [](FILE* file) -> int { return ipf_load(file, &driveB); } }, #endif