--- np2/fdd/fddfile.c 2004/01/27 07:51:49 1.3 +++ np2/fdd/fddfile.c 2005/03/22 04:03:15 1.11 @@ -10,16 +10,12 @@ _FDDFILE fddfile[MAX_FDDFILE]; - BYTE fddlasterror; - - -static const char str_88d[] = "88d"; -static const char str_98d[] = "98d"; + UINT8 fddlasterror; // ---- -void fddfile_init(void) { +void fddfile_initialize(void) { ZeroMemory(fddfile, sizeof(fddfile)); } @@ -34,14 +30,31 @@ void fddfile_reset2dmode(void) { // v #endif } -const char *fdd_diskname(REG8 drv) { +OEMCHAR *fdd_diskname(REG8 drv) { if (drv >= MAX_FDDFILE) { - return(str_null); + return((OEMCHAR *)str_null); } return(fddfile[drv].fname); } +OEMCHAR *fdd_getfileex(REG8 drv, UINT *ftype, int *ro) { + + FDDFILE fdd; + + if (drv >= MAX_FDDFILE) { + return((OEMCHAR *)str_null); + } + fdd = fddfile + drv; + if (ftype) { + *ftype = fdd->ftype; + } + if (ro) { + *ro = fdd->ro; + } + return(fdd->fname); +} + BOOL fdd_diskready(REG8 drv) { if ((drv >= MAX_FDDFILE) || (!fddfile[drv].fname[0])) { @@ -61,36 +74,59 @@ BOOL fdd_diskprotect(REG8 drv) { // -------------------------------------------------------------------------- -BOOL fdd_set(REG8 drv, const char *fname, UINT ftype, int ro) { +BRESULT fdd_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro) { FDDFILE fdd; -const char *p; + UINT fddtype; +const OEMCHAR *p; + BRESULT r; if (drv >= MAX_FDDFILE) { return(FAILURE); } - if (ftype == FTYPE_NONE) { - p = file_getext((char *)fname); + fddtype = ftype; + if (fddtype == FTYPE_NONE) { + p = file_getext(fname); if ((!milstr_cmp(p, str_d88)) || (!milstr_cmp(p, str_88d)) || (!milstr_cmp(p, str_d98)) || (!milstr_cmp(p, str_98d))) { - ftype = FTYPE_D88; + fddtype = FTYPE_D88; + } + else if (!milstr_cmp(p, str_fdi)) { + fddtype = FTYPE_FDI; } else { - ftype = FTYPE_BETA; + fddtype = FTYPE_BETA; } } fdd = fddfile + drv; - switch(ftype) { + switch(fddtype) { + case FTYPE_FDI: + r = fddxdf_setfdi(fdd, fname, ro); + if (r == SUCCESS) { + break; + } + /* FALLTHROUGH */ + case FTYPE_BETA: - return(fddxdf_set(fdd, fname, ro)); + r = fddxdf_set(fdd, fname, ro); + break; case FTYPE_D88: - return(fddd88_set(fdd, fname, ro)); + r = fddd88_set(fdd, fname, ro); + break; + + default: + r = FAILURE; + } + if (r == SUCCESS) { + file_cpyname(fdd->fname, fname, NELEMENTS(fdd->fname)); + fdd->ftype = ftype; + fdd->ro = ro; } return(FAILURE); } -BOOL fdd_eject(REG8 drv) { +BRESULT fdd_eject(REG8 drv) { FDDFILE fdd; @@ -111,7 +147,7 @@ BOOL fdd_eject(REG8 drv) { // ---- -BOOL fdd_diskaccess(void) { +BRESULT fdd_diskaccess(void) { FDDFILE fdd; @@ -126,11 +162,12 @@ BOOL fdd_diskaccess(void) { return(FAILURE); } -BOOL fdd_seek(void) { +BRESULT fdd_seek(void) { + BRESULT ret; FDDFILE fdd; - BOOL ret = FAILURE; + ret = FAILURE; fdd = fddfile + fdc.us; switch(fdd->type) { case DISKTYPE_BETA: @@ -145,7 +182,7 @@ BOOL fdd_seek(void) { return(ret); } -BOOL fdd_seeksector(void) { +BRESULT fdd_seeksector(void) { FDDFILE fdd; @@ -161,7 +198,7 @@ BOOL fdd_seeksector(void) { } -BOOL fdd_read(void) { +BRESULT fdd_read(void) { FDDFILE fdd; @@ -177,7 +214,7 @@ BOOL fdd_read(void) { return(FAILURE); } -BOOL fdd_write(void) { +BRESULT fdd_write(void) { FDDFILE fdd; @@ -193,7 +230,7 @@ BOOL fdd_write(void) { return(FAILURE); } -BOOL fdd_readid(void) { +BRESULT fdd_readid(void) { FDDFILE fdd; @@ -209,7 +246,7 @@ BOOL fdd_readid(void) { return(FAILURE); } -BOOL fdd_formatinit(void) { +BRESULT fdd_formatinit(void) { if (fddfile[fdc.us].type == DISKTYPE_D88) { return(fdd_formatinit_d88()); @@ -217,7 +254,7 @@ BOOL fdd_formatinit(void) { return(FAILURE); } -BOOL fdd_formating(const BYTE *ID) { +BRESULT fdd_formating(const UINT8 *ID) { sysmng_fddaccess(fdc.us); if (fddfile[fdc.us].type == DISKTYPE_D88) {