File:  [RetroPC.NET] / xmil / fdd / fddfile.c
Revision 1.2: download - view: text, annotated - select for diffs
Mon Aug 2 20:48:13 2004 JST (21 years, 3 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix...

#include	"compiler.h"
#include	"strres.h"
#include	"dosio.h"
#include	"sysmng.h"
#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) {
}

const OEMCHAR *fdd_diskname(REG8 drv) {

	if (drv >= MAX_FDDFILE) {
		return(str_null);
	}
	return(fddfile[drv].fname);
}

BRESULT fdd_diskready(REG8 drv) {

	if ((drv >= MAX_FDDFILE) || (fddfile[drv].fname[0] == '\0')) {
		return(FALSE);
	}
	return(TRUE);
}


// ----

static REG8 getfdtype(const OEMCHAR *fname) {

const OEMCHAR	*ext;

	ext = file_getext(fname);
	if (!milstr_cmp(ext, str_e2d)) {
		return(DRV_FMT2D);
	}
	if ((!milstr_cmp(ext, str_d88)) || (!milstr_cmp(ext, str_88d))) {
		return(DRV_FMT88);
	}
	return(DRV_EMPTY);
}

BRESULT fdd_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro) {

	fdd_eject(drv);
	if (drv >= MAX_FDDFILE) {
		return(FAILURE);
	}
	switch(getfdtype(fname)) {
		case DRV_EMPTY:
			return(FAILURE);

		case DRV_FMT2D:
			return(fdd2d_set(drv, fname));

		default:
			return(fddd88_set(drv, fname));
	}
	return(FAILURE);
}

BRESULT fdd_eject(REG8 drv) {

	FDDFILE		fdd;

	if (drv >= MAX_FDDFILE) {
		return(FAILURE);
	}
	fdd = fddfile + drv;
	switch(DISKNUM[drv]) {
		case DRV_EMPTY:
			return(FAILURE);

		case DRV_FMT2D:
			return(fdd2d_eject(drv));

		default:
			return(fddd88_eject(drv));
	}
	return(FAILURE);
}


RetroPC.NET-CVS <cvs@retropc.net>