int autostart_prg_with_virtual_fs(const char *file_name, fileio_info_t *fh) { char *directory; char *file; /* Extract the directory path to allow FS-based drive emulation to work. */ util_fname_split(file_name, &directory, &file); if (archdep_path_is_relative(directory)) { char *tmp; archdep_expand_path(&tmp, directory); lib_free(directory); directory = tmp; /* FIXME: We should actually eat `.'s and `..'s from `directory' instead. */ } /* Setup FS-based drive emulation. */ fsdevice_set_directory(directory ? directory : ".", 8); resources_set_int("DriveTrueEmulation", 0); resources_set_int("VirtualDevices", 1); resources_set_int("FSDevice8ConvertP00", 1); file_system_detach_disk(8); resources_set_int("FileSystemDevice8", ATTACH_DEVICE_FS); lib_free(directory); lib_free(file); return 0; }
static int set_attach_device_readonly(int value, void *param) { unsigned int unit = vice_ptr_to_uint(param); const char *old_filename; char *new_filename; int rc; int val = value ? 1 : 0; /* Do nothing if resource is unchanged. */ if (attach_device_readonly_enabled[unit - 8] == val) { return 0; } old_filename = file_system_get_disk_name(unit); /* If no disk is attached, just changed the resource. */ if (old_filename == NULL) { attach_device_readonly_enabled[unit - 8] = val; return 0; } /* Old filename will go away after the image is detached. */ new_filename = lib_stralloc(old_filename); file_system_detach_disk(unit); attach_device_readonly_enabled[unit - 8] = val; rc = file_system_attach_disk(unit, new_filename); lib_free(new_filename); return rc; }
/* Autostart PRG file `file_name'. The PRG file can either be a raw CBM file or a P00 file, and the FS-based drive emulation is set up so that its directory becomes the current one on unit #8. */ int autostart_prg(const char *file_name, unsigned int runmode) { char *directory; char *file; fileio_info_t *finfo; if (network_connected()) return -1; finfo = fileio_open(file_name, NULL, FILEIO_FORMAT_RAW | FILEIO_FORMAT_P00, FILEIO_COMMAND_READ | FILEIO_COMMAND_FSNAME, FILEIO_TYPE_PRG); if (finfo == NULL) { log_error(autostart_log, "Cannot open `%s'.", file_name); return -1; } /* Extract the directory path to allow FS-based drive emulation to work. */ util_fname_split(file_name, &directory, &file); if (archdep_path_is_relative(directory)) { char *tmp; archdep_expand_path(&tmp, directory); lib_free(directory); directory = tmp; /* FIXME: We should actually eat `.'s and `..'s from `directory' instead. */ } /* Setup FS-based drive emulation. */ fsdevice_set_directory(directory ? directory : ".", 8); set_true_drive_emulation_mode(0); orig_drive_true_emulation_state =0; resources_set_int("VirtualDevices", 1); resources_set_int("FSDevice8ConvertP00", 1); file_system_detach_disk(8); ui_update_menus(); /* Now it's the same as autostarting a disk image. */ reboot_for_autostart((char *)(finfo->name), AUTOSTART_HASDISK, runmode); lib_free(directory); lib_free(file); fileio_close(finfo); log_message(autostart_log, "Preparing to load PRG file `%s'.", file_name); return 0; }
static TUI_MENU_CALLBACK(quit_callback) { if (been_activated) { _setcursortype(_NORMALCURSOR); normvideo(); clrscr(); file_system_detach_disk(-1); exit(0); } return NULL; }
static TUI_MENU_CALLBACK(detach_disk_callback) { const char *s; if (been_activated) { file_system_detach_disk((int)param); ui_update_menus(); } s = file_system_get_disk_name((unsigned int)param); if (s == NULL || *s == '\0') { return "(none)"; } else { return s; } }
static BOOL store_dialog_results(HWND hwnd, unsigned int num) { char s[MAX_PATH]; TCHAR st[MAX_PATH]; int devtype = ATTACH_DEVICE_NONE; if (iec_available_busses() & IEC_BUS_IEC) { resources_set_int_sprintf("IECDevice%d", (IsDlgButtonChecked(hwnd, IDC_TOGGLE_USEIECDEVICE) == BST_CHECKED), num); } if (IsDlgButtonChecked(hwnd, IDC_SELECTDISK) == BST_CHECKED || IsDlgButtonChecked(hwnd, IDC_SELECTDIR) == BST_CHECKED) { devtype = ATTACH_DEVICE_FS; } #ifdef HAVE_OPENCBM if (opencbmlib_is_available()) { if (IsDlgButtonChecked(hwnd, IDC_SELECTREAL) == BST_CHECKED) { devtype = ATTACH_DEVICE_REAL; } } #endif resources_set_int_sprintf("FileSystemDevice%d", devtype, num); resources_set_int_sprintf("FSDevice%dConvertP00", (IsDlgButtonChecked(hwnd, IDC_TOGGLE_READP00) == BST_CHECKED), num); resources_set_int_sprintf("FSDevice%dSaveP00", (IsDlgButtonChecked(hwnd, IDC_TOGGLE_WRITEP00) == BST_CHECKED), num); resources_set_int_sprintf("FSDevice%dHideCBMFiles", (IsDlgButtonChecked(hwnd, IDC_TOGGLE_HIDENONP00) == BST_CHECKED), num); resources_set_int_sprintf("AttachDevice%dReadonly", (IsDlgButtonChecked(hwnd, IDC_TOGGLE_ATTACH_READONLY) == BST_CHECKED), num); GetDlgItemText(hwnd, IDC_DIR, st, MAX_PATH); system_wcstombs(s, st, MAX_PATH); resources_set_string_sprintf("FSDevice%dDir", s, num); if (IsDlgButtonChecked(hwnd, IDC_SELECTDISK) == BST_CHECKED) { GetDlgItemText(hwnd, IDC_DISKIMAGE, st, MAX_PATH); system_wcstombs(s, st, MAX_PATH); if (file_system_attach_disk(num, s) < 0 ) { ui_error(translate_text(IDS_CANNOT_ATTACH_FILE)); return 0; } } else { if ((IsDlgButtonChecked(hwnd, IDC_SELECTDIR) == BST_CHECKED) && file_system_get_disk_name(num)) { file_system_detach_disk(num); } } return 1; }
void uiattach_command(HWND hwnd, WPARAM wparam) { switch (wparam & 0xffff) { case IDM_ATTACH_8: case IDM_ATTACH_9: case IDM_ATTACH_10: case IDM_ATTACH_11: uiattach_disk_dialog(hwnd, wparam); break; case IDM_DETACH_8: file_system_detach_disk(8); break; case IDM_DETACH_9: file_system_detach_disk(9); break; case IDM_DETACH_10: file_system_detach_disk(10); break; case IDM_DETACH_11: file_system_detach_disk(11); break; case IDM_DETACH_ALL: file_system_detach_disk(8); file_system_detach_disk(9); file_system_detach_disk(10); file_system_detach_disk(11); break; case IDM_ATTACH_TAPE: uiattach_tape_dialog(hwnd); break; case IDM_DETACH_TAPE: tape_image_detach(1); break; case IDM_AUTOSTART: uiattach_autostart_dialog(hwnd); break; } }
void uiattach_command(video_canvas_t *canvas, int idm) { switch (idm) { case IDM_ATTACH_8: case IDM_ATTACH_9: case IDM_ATTACH_10: case IDM_ATTACH_11: uiattach_disk_dialog(canvas, idm); break; case IDM_DETACH_8: file_system_detach_disk(8); break; case IDM_DETACH_9: file_system_detach_disk(9); break; case IDM_DETACH_10: file_system_detach_disk(10); break; case IDM_DETACH_11: file_system_detach_disk(11); break; case IDM_DETACH_ALL: file_system_detach_disk(8); file_system_detach_disk(9); file_system_detach_disk(10); file_system_detach_disk(11); break; case IDM_ATTACH_TAPE: uiattach_tape_dialog(canvas); break; case IDM_DETACH_TAPE: tape_image_detach(1); break; case IDM_AUTOSTART: uiattach_autostart_dialog(canvas); break; } }
static int drive_snapshot_read_image_module(snapshot_t *s, unsigned int dnr) { BYTE major_version, minor_version; snapshot_module_t *m; char snap_module_name[10]; WORD word; char *filename = NULL; char *request_str; int len = 0; FILE *fp; BYTE sector_data[0x100]; disk_addr_t dadr; int rc; drive_t *drive; drive = drive_context[dnr]->drive; sprintf(snap_module_name, "NOIMAGE%i", dnr); m = snapshot_module_open(s, snap_module_name, &major_version, &minor_version); if (m != NULL) { file_system_detach_disk(dnr + 8); snapshot_module_close(m); return 0; } sprintf(snap_module_name, "IMAGE%i", dnr); m = snapshot_module_open(s, snap_module_name, &major_version, &minor_version); if (m == NULL) { return 0; } if (major_version > IMAGE_SNAP_MAJOR || minor_version > IMAGE_SNAP_MINOR) { log_error(drive_snapshot_log, "Snapshot module version (%d.%d) newer than %d.%d.", major_version, minor_version, IMAGE_SNAP_MAJOR, IMAGE_SNAP_MINOR); } if (SMR_W(m, &word) < 0) { snapshot_module_close(m); return -1; } switch (word) { case 1581: len = D81_FILE_SIZE; break; case 8050: len = D80_FILE_SIZE; break; case 8250: len = D82_FILE_SIZE; break; default: log_error(drive_snapshot_log, "Snapshot of disk image unknown (type %d)", (int)word); snapshot_module_close(m); return -1; } /* create temporary file of the right size */ fp = archdep_mkstemp_fd(&filename, MODE_WRITE); if (fp == NULL) { log_error(drive_snapshot_log, "Could not create temporary file!"); snapshot_module_close(m); return -1; } /* blow up the file to needed size */ if (fseek(fp, len - 1, SEEK_SET) < 0 || (fputc(0, fp) == EOF)) { log_error(drive_snapshot_log, "Could not create large temporary file"); fclose(fp); lib_free(filename); snapshot_module_close(m); return -1; } fclose(fp); lib_free(filename); if (file_system_attach_disk(dnr + 8, filename) < 0) { log_error(drive_snapshot_log, "Invalid Disk Image"); lib_free(filename); snapshot_module_close(m); return -1; } request_str = lib_msprintf("Disk image unit #%d imported from snapshot", dnr + 8); zfile_close_action(filename, ZFILE_REQUEST, request_str); lib_free(request_str); /* we use the return code to step through the tracks. So we do not need any geometry info. */ SMR_BA(m, sector_data, 0x100); for (dadr.track = 1;; dadr.track++) { rc = 0; for (dadr.sector = 0;; dadr.sector++) { rc = disk_image_write_sector(drive->image, sector_data, &dadr); if (rc == 0) { SMR_BA(m, sector_data, 0x100); } else { break; } } if (dadr.sector == 0) { break; } } vdrive_bam_reread_bam(dnr + 8); snapshot_module_close(m); m = NULL; return 0; }
static MRESULT EXPENTRY pm_drive(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { static int drive = 0; switch (msg) { case WM_INITDLG: { int val, i = 0; HWND ihwnd = WinWindowFromID(hwnd, CBS_IMAGE); while (i < 10 && ui_status.imageHist[i][0]) { WinLboxInsertItem(ihwnd, ui_status.imageHist[i++]); } WinLboxInsertItem(ihwnd, ""); resources_get_int("DriveTrueEmulation", &val); WinCheckButton(hwnd, CB_TRUEDRIVE, val); WinCheckButton(hwnd, RB_DRIVE8|drive, 1); WinSendMsg(hwnd, WM_SWITCH, (void*)drive, 0); WinSendMsg(hwnd, WM_DRIVESTATE, (void*)ui_status.lastDriveState, NULL); for (i = 0; i < 3; i++) { WinSendMsg(hwnd, WM_TRACK, (void*)i, (void*)(int)(ui_status.lastTrack[i] * 2)); } } break; case WM_COMMAND: switch (LONGFROMMP(mp1)) { case PB_CREATE: create_dialog(hwnd); return FALSE; case PB_ATTACH: ViceFileDialog(hwnd, 0x0100 | (drive + 1), FDS_OPEN_DIALOG); return FALSE; case PB_DETACH: file_system_detach_disk(drive + 8); return FALSE; case PB_FLIPADD: fliplist_add_image(drive + 8); return FALSE; case PB_FLIPREMOVE: fliplist_remove(drive + 8, NULL); return FALSE; case PB_FLIP: fliplist_attach_head(drive + 8, FLIP_NEXT); return FALSE; } break; case WM_CONTROL: { switch (SHORT1FROMMP(mp1)) { case RB_DRIVE8: case RB_DRIVE9: case RB_DRIVE10: case RB_DRIVE11: WinSendMsg(hwnd, WM_SWITCH, (void*)(SHORT1FROMMP(mp1) & 0x3), 0); break; case CB_TRUEDRIVE: toggle("DriveTrueEmulation"); WinSendMsg(hwnd, WM_SWITCH, (void*)drive, 0); break; case CB_CONVERTP00: toggle_drive_res("FSDevice%dConvertP00", drive);//); WinSendMsg(hwnd, WM_SWITCH, (void*)drive, 0); break; case CB_SAVEP00: toggle_drive_res("FileDevice%dSaveP00", drive); break; case CB_ALLOWACCESS: toggle_drive_res("FileSystemDevice%d", drive); WinSendMsg(hwnd, WM_SWITCH, (void*)drive, 0); break; case CB_HIDENONP00: toggle_drive_res("FSDevice%dHideCBMFiles", drive); break; case CB_MEM2000: toggle_drive_res("Drive%dRAM2000", drive); break; case CB_MEM4000: toggle_drive_res("Drive%dRAM4000", drive); break; case CB_MEM6000: toggle_drive_res("Drive%dRAM6000", drive); break; case CB_MEM8000: toggle_drive_res("Drive%dRAM8000", drive); break; case CB_MEMA000: toggle_drive_res("Drive%dRAMA000", drive); break; case CB_READONLY: toggle_drive_res("AttachDevice%dReadonly", drive); break; case CB_PARALLEL: if (drive == 0 || drive == 1) { toggle_drive_res("Drive%dParallelCable", drive); } break; case RB_NEVER: case RB_ASK: case RB_ALWAYS: if (drive == 0 || drive == 1) { resources_set_int_sprintf("Drive%dExtendImagePolicy", (SHORT1FROMMP(mp1) & 0x3), drive + 8); } break; case RB_NONE: case RB_TRAP: case RB_SKIP: if (drive == 0 || drive == 1) { resources_set_int_sprintf("Drive%dIdleMethod", (SHORT1FROMMP(mp1) & 0x3), drive + 8); } break; case CBS_IMAGE: if (SHORT2FROMMP(mp1) == CBN_ENTER) { char psz[CCHMAXPATH]; WinLboxQuerySelectedItemText(hwnd, CBS_IMAGE, psz, CCHMAXPATH); if (!strlen(psz)) { file_system_detach_disk(drive + 8); return FALSE; } if (file_system_attach_disk(drive + 8, psz)) { WinMessageBox(HWND_DESKTOP, hwnd, "Cannot attach specified file.", "VICE/2 Error", 0, MB_OK); } } return FALSE; case CBS_PATH: switch (SHORT2FROMMP(mp1)) { case SPBN_CHANGE: { char path[255]; WinSendDlgMsg(hwnd, CBS_PATH, SPBM_QUERYVALUE, &path, 255); if (!chdir(path)) { resources_set_string_sprintf("FSDevice%dDir", path, drive + 8); } } break; case SPBN_KILLFOCUS: { const char *path; resources_get_string_sprintf("FSDevice%dDir", &path, drive + 8); WinSendDlgMsg(hwnd, CBS_PATH, SPBM_SETARRAY, &path, 1); WinSetDlgSpinVal(hwnd, CBS_PATH, 0); } break; } return FALSE; case CBS_TYPE: if (SHORT2FROMMP(mp1) == CBN_ENTER && (drive == 0 || drive == 1)) { const int nr = WinQueryLboxSelectedItem((HWND)mp2); const int val = WinLboxItemHandle((HWND)mp2, nr); resources_set_int_sprintf("Drive%dType", val, drive + 8); } return FALSE; } } break; case WM_DRIVEIMAGE: { HWND ihwnd = WinWindowFromID(hwnd, CBS_IMAGE); const char *name = (char *)mp1; int pos; for (pos = 0; pos < 9; pos++) { WinDeleteLboxItem(ihwnd, 0); } pos = 0; while (pos < 10 && ui_status.imageHist[pos][0]) { WinLboxInsertItem(ihwnd, ui_status.imageHist[pos++]); } WinLboxInsertItem(ihwnd, ""); if (drive == (int)mp2) { WinLboxSelectItem(ihwnd, name[0] ? 0 : pos); } } return FALSE; case WM_TRACK: if (!(ui_status.lastDriveState & (1 << (int)mp1))) { break; } WinSetDlgSpinVal(hwnd, SPB_TRACK8+(int)mp1, (int)((int)mp2 / 2)); WinShowDlg(hwnd, SS_HALFTRACK8 + (int)mp1, ((int)mp2 % 2)); break; case WM_DRIVELEDS: WinShowDlg(hwnd, SS_LED8+(int)mp1, (int)mp2); break; case WM_DRIVESTATE: WinShowDlg(hwnd, SPB_TRACK8, (int)mp1 & 1 == 1); WinShowDlg(hwnd, SS_HALFTRACK8, (int)mp1 & 1 == 1); WinShowDlg(hwnd, SPB_TRACK9, (int)mp1 & 2 == 1); WinShowDlg(hwnd, SS_HALFTRACK9, (int)mp1 & 2 == 1); WinShowDlg(hwnd, SS_LED8, 0); WinShowDlg(hwnd, SS_LED9, 0); break; case WM_SWITCH: drive = (int)mp1; { const HWND lbox = WinWindowFromID(hwnd, CBS_TYPE); int type = 0; int val; int res; int drive89 = (drive == 0 || drive == 1); resources_get_int("DriveTrueEmulation", &val); WinLboxEmpty(lbox); if (drive89) { int i, nr; WinCheckButton(hwnd, RB_NEVER | get_drive_res("Drive%dExtendImagePolicy", drive), 1); WinCheckButton(hwnd, RB_NONE | get_drive_res("Drive%dIdleMethod", drive), 1); nr = 0; res = get_drive_res("Drive%dType", drive); for (i = 0; i < nDRIVES; i++) { if (!drive_check_type(driveRes[i], drive)) { continue; } WinLboxInsertItem(lbox, driveName[i]); WinLboxSetItemHandle(lbox, nr, driveRes[i]); if (res == driveRes[i]) { type = nr; } nr++; } } else { WinCheckButton(hwnd, RB_NEVER, 0); WinCheckButton(hwnd, RB_ASK, 0); WinCheckButton(hwnd, RB_ALWAYS, 0); WinCheckButton(hwnd, RB_NONE, 0); WinCheckButton(hwnd, RB_SKIP, 0); WinCheckButton(hwnd, RB_TRAP, 0); } WinLboxSelectItem(lbox, type); WinCheckButton(hwnd, CB_PARALLEL, drive89 && get_drive_res("Drive%dParallelCable", drive) != 0); WinCheckButton(hwnd, CB_MEM2000, drive89 && get_drive_res("Drive%dRAM2000", drive) != 0); WinCheckButton(hwnd, CB_MEM4000, drive89 && get_drive_res("Drive%dRAM4000", drive) != 0); WinCheckButton(hwnd, CB_MEM6000, drive89 && get_drive_res("Drive%dRAM6000", drive) != 0); WinCheckButton(hwnd, CB_MEM8000, drive89 && get_drive_res("Drive%dRAM8000", drive) != 0); WinCheckButton(hwnd, CB_MEMA000, drive89 && get_drive_res("Drive%dRAMA000", drive) != 0); WinEnableControl(hwnd, CB_PARALLEL, drive89 && val); WinEnableControl(hwnd, RB_NEVER, drive89 && val); WinEnableControl(hwnd, RB_ASK, drive89 && val); WinEnableControl(hwnd, RB_ALWAYS, drive89 && val); WinEnableControl(hwnd, RB_NONE, drive89 && val); WinEnableControl(hwnd, RB_SKIP, drive89 && val); WinEnableControl(hwnd, RB_TRAP, drive89 && val); WinEnableControl(hwnd, CBS_TYPE, drive89 && val); WinEnableControl(hwnd, CB_MEM2000, drive89 && val); WinEnableControl(hwnd, CB_MEM4000, drive89 && val); WinEnableControl(hwnd, CB_MEM6000, drive89 && val); WinEnableControl(hwnd, CB_MEM8000, drive89 && val); WinEnableControl(hwnd, CB_MEMA000, drive89 && val); { int acc = get_drive_res("FileSystemDevice%d", drive) != 0; int conv = get_drive_res("FSDevice%dConvertP00", drive) != 0; if (!conv) { resources_set_int_sprintf("FSDevice%dHideCBMFiles", 0, drive + 8); } WinCheckButton(hwnd, CB_ALLOWACCESS, acc); WinCheckButton(hwnd, CB_CONVERTP00, conv); WinCheckButton(hwnd, CB_SAVEP00, get_drive_res("FSDevice%dSaveP00", drive) != 0); WinCheckButton(hwnd, CB_HIDENONP00, get_drive_res("FSDevice%dHideCBMFiles", drive) != 0); WinEnableControl(hwnd, CB_ALLOWACCESS, !(drive89 && val)); WinEnableControl(hwnd, CB_SAVEP00, !(drive89 && val) && acc); WinEnableControl(hwnd, CB_CONVERTP00, !(drive89 && val) && acc); WinEnableControl(hwnd, CBS_PATH, !(drive89 && val) && acc); WinEnableControl(hwnd, CB_HIDENONP00, !(drive89 && val) && acc && conv); WinCheckButton(hwnd, CB_READONLY, get_drive_res("AttachDevice%dReadonly", drive) != 0); } { char tmp[CCHMAXPATH]; int max = WinDlgLboxQueryCount(hwnd, CBS_IMAGE); int pos = -1; do { WinLboxQueryItem(hwnd, CBS_IMAGE, ++pos, tmp, CCHMAXPATH); } while (pos < max && strcmp(ui_status.lastImage[drive], tmp)); WinDlgLboxSelectItem(hwnd, CBS_IMAGE, pos); } { const char *path; resources_get_string_sprintf("FSDevice%dDir", &path, drive + 8); WinSendDlgMsg(hwnd, CBS_PATH, SPBM_SETARRAY, &path, 1); WinSetDlgSpinVal(hwnd, CBS_PATH, 0); } } return FALSE; } return WinDefDlgProc (hwnd, msg, mp1, mp2); }
/** * Show and process the floppy disk image dialog. */ void DlgFloppy_Main(void) { int but, i; char *newdisk; char dlgname[MAX_FLOPPYDRIVES][64], dlgdiskdir[64]; SDLGui_CenterDlg(floppydlg); /* Set up dialog to actual values: */ const char *name; floppydlg[FLOPPYDLG_ATTACH2FLIPLIST].state &= ~SG_SELECTED; name = file_system_get_disk_name(8); /* Filename */ if (!name)dlgname[0][0] = '\0'; else File_ShrinkName(dlgname[0], name,floppydlg[FLOPPYDLG_DISKA].w); floppydlg[FLOPPYDLG_DISKA].txt = dlgname[0]; name = file_system_get_disk_name(9); /* Filename */ if (!name)dlgname[1][0] = '\0'; else File_ShrinkName(dlgname[1], name,floppydlg[FLOPPYDLG_DISKB].w); floppydlg[FLOPPYDLG_DISKB].txt = dlgname[1]; name = file_system_get_disk_name(10); /* Filename */ if (!name)dlgname[2][0] = '\0'; else File_ShrinkName(dlgname[2], name,floppydlg[FLOPPYDLG_DISK2].w); floppydlg[FLOPPYDLG_DISK2].txt = dlgname[2]; name = file_system_get_disk_name(11); /* Filename */ if (!name)dlgname[3][0] = '\0'; else File_ShrinkName(dlgname[3], name,floppydlg[FLOPPYDLG_DISK3].w); floppydlg[FLOPPYDLG_DISK3].txt = dlgname[3]; /* Default image directory: */ File_ShrinkName(dlgdiskdir,szDiskImageDirectory, floppydlg[FLOPPYDLG_IMGDIR].w); floppydlg[FLOPPYDLG_IMGDIR].txt = dlgdiskdir; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(floppydlg, NULL); switch (but) { case FLOPPYDLG_EJECTA: /* Eject disk in drive A: */ Floppy_SetDiskFileNameNone(0); dlgname[0][0] = '\0'; file_system_detach_disk(GET_DRIVE(8)); break; case FLOPPYDLG_BROWSEA: /* Choose a new disk A: */ DlgDisk_BrowseDisk(dlgname[0], 0, FLOPPYDLG_DISKA); if (strlen(szDiskFileName[0]) > 0){ int drivetype; printf("load (%s)-",szDiskFileName[0]); resources_get_int_sprintf("Drive%iType", &drivetype, GET_DRIVE(8)); printf("(Drive%iType)\n",drivetype); cartridge_detach_image(-1); tape_image_detach(1); // file_system_detach_disk(GET_DRIVE(8)); if(File_DoesFileExtensionMatch(szDiskFileName[0],"CRT")) cartridge_attach_image(CARTRIDGE_CRT, szDiskFileName[0]); else { //FIXME /* if(File_DoesFileExtensionMatch(szDiskFileName[0],"D81") && drivetype!=1581) resources_set_int_sprintf("Drive%iType", 1581, GET_DRIVE(8)); else if (drivetype!=1542 && !File_DoesFileExtensionMatch(szDiskFileName[0],"D81")) resources_set_int_sprintf("Drive%iType", 1542, GET_DRIVE(8)); */ if (floppydlg[FLOPPYDLG_ATTACH2FLIPLIST].state & SG_SELECTED){ file_system_detach_disk(GET_DRIVE(8)); printf("Attach to flip list\n"); file_system_attach_disk(8, szDiskFileName[0]); fliplist_add_image(8) ; } else { printf("autostart\n"); autostart_autodetect(szDiskFileName[0], NULL, 0, AUTOSTART_MODE_RUN); } } } break; case FLOPPYDLG_EJECTB: /* Eject disk in drive B: */ Floppy_SetDiskFileNameNone(1); dlgname[1][0] = '\0'; file_system_detach_disk(GET_DRIVE(9)); break; case FLOPPYDLG_BROWSEB: /* Choose a new disk B: */ DlgDisk_BrowseDisk(dlgname[1], 1, FLOPPYDLG_DISKB); if (strlen(szDiskFileName[1]) > 0){ file_system_detach_disk(GET_DRIVE(9)); file_system_attach_disk(9, szDiskFileName[1]); } case FLOPPYDLG_EJECT2: /* Eject disk in drive A: */ Floppy_SetDiskFileNameNone(2); dlgname[2][0] = '\0'; file_system_detach_disk(GET_DRIVE(10)); break; case FLOPPYDLG_BROWSE2: /* Choose a new disk A: */ DlgDisk_BrowseDisk(dlgname[2], 0, FLOPPYDLG_DISK2); if (strlen(szDiskFileName[2]) > 0){ //strcpy(prefs->DrivePath[2], szDiskFileName[2]); } break; case FLOPPYDLG_EJECT3: /* Eject disk in drive B: */ Floppy_SetDiskFileNameNone(3); dlgname[3][0] = '\0'; file_system_detach_disk(GET_DRIVE(11)); break; case FLOPPYDLG_BROWSE3: /* Choose a new disk B: */ DlgDisk_BrowseDisk(dlgname[3], 1, FLOPPYDLG_DISKB); if (strlen(szDiskFileName[3]) > 0){ // strcpy(prefs->DrivePath[3], szDiskFileName[3]); } break; case FLOPPYDLG_BROWSEIMG: DlgDisk_BrowseDir(dlgdiskdir,szDiskImageDirectory,floppydlg[FLOPPYDLG_IMGDIR].w); break; /* case FLOPPYDLG_CREATEIMG: newdisk = DlgNewDisk_Main(); if (newdisk) { DlgFloppy_QueryInsert(dlgname[0], FLOPPYDLG_DISKA, dlgname[1], FLOPPYDLG_DISKB, newdisk); free(newdisk); } break; */ } gui_poll_events(); } while (but != FLOPPYDLG_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* if (floppydlg[FLOPPYDLG_AUTOSTART].state & SG_SELECTED){ if(!ThePrefs.Emul1541Proc){ prefs->Emul1541Proc = !prefs->Emul1541Proc; } } else { if(ThePrefs.Emul1541Proc){ prefs->Emul1541Proc = !prefs->Emul1541Proc; } } */ }