--- xmil/fdd/fddfile.c 2004/08/02 11:48:13 1.2 +++ xmil/fdd/fddfile.c 2004/08/09 04:47:53 1.4 @@ -5,17 +5,12 @@ #include "pccore.h" #include "iocore.h" #include "fddfile.h" -#include "x1_io.h" -#include "x1_fdc.h" #include "fdd_2d.h" #include "fdd_d88.h" _FDDFILE fddfile[MAX_FDDFILE]; -extern BYTE WRITEPT[]; -extern BYTE DISKNUM[]; - void fddfile_initialize(void) { } @@ -45,50 +40,63 @@ const OEMCHAR *ext; ext = file_getext(fname); if (!milstr_cmp(ext, str_e2d)) { - return(DRV_FMT2D); + return(FTYPE_BETA); } if ((!milstr_cmp(ext, str_d88)) || (!milstr_cmp(ext, str_88d))) { - return(DRV_FMT88); + return(FTYPE_D88); } - return(DRV_EMPTY); + return(FTYPE_NONE); } BRESULT fdd_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro) { - fdd_eject(drv); + FDDFILE fdd; + BRESULT r; + if (drv >= MAX_FDDFILE) { return(FAILURE); } - switch(getfdtype(fname)) { - case DRV_EMPTY: - return(FAILURE); - - case DRV_FMT2D: - return(fdd2d_set(drv, fname)); + fdd_eject(drv); + fdd = fddfile + drv; + if (ftype == FTYPE_NONE) { + ftype = getfdtype(fname); + } + switch(ftype) { + case FTYPE_BETA: + r = fdd2d_set(fdd, drv, fname); + break; + + case FTYPE_D88: + r = fddd88_set(fdd, drv, fname); + break; default: - return(fddd88_set(drv, fname)); + r = FAILURE; + break; } - return(FAILURE); + if (r == SUCCESS) { + milstr_ncpy(fdd->fname, fname, NELEMENTS(fdd->fname)); + if (ro) { + fdd->protect = TRUE; + } + } + return(r); } BRESULT fdd_eject(REG8 drv) { - FDDFILE fdd; + FDDFILE fdd; if (drv >= MAX_FDDFILE) { return(FAILURE); } fdd = fddfile + drv; - switch(DISKNUM[drv]) { - case DRV_EMPTY: - return(FAILURE); + switch(fdd->type) { + case DISKTYPE_BETA: + return(fdd2d_eject(fdd, drv)); - case DRV_FMT2D: - return(fdd2d_eject(drv)); - - default: - return(fddd88_eject(drv)); + case DISKTYPE_D88: + return(fddd88_eject(fdd, drv)); } return(FAILURE); }