File:  [RetroPC.NET] / np2 / win9x / dialog / d_disk.cpp
Revision 1.14: download - view: text, annotated - select for diffs
Thu Mar 24 10:42:47 2005 JST (20 years, 7 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix windows resource (T.Yui)

#include	"compiler.h"
#include	"strres.h"
#include	"resource.h"
#include	"np2.h"
#include	"oemtext.h"
#include	"dosio.h"
#include	"sysmng.h"
#include	"toolwin.h"
#include	"dialog.h"
#include	"dialogs.h"
#include	"pccore.h"
#include	"diskdrv.h"
#include	"fddfile.h"
#include	"newdisk.h"


static const TCHAR fddui_title[] = _T("Select floppy image");
static const TCHAR fddui_filter[] =										\
				_T("D88 image files (*.D88;*.D98)\0")					\
								_T("*.d88;*.88d;*.d98;*.98d\0")			\
				_T("Floppy disk images (*.XDF;*.HDM;*.DUP;*.2HD)\0")	\
								_T("*.xdf;*.hdm;*.dup;*.2hd;*.tfd\0")	\
				_T("All supported Files\0")								\
								_T("*.d88;*.88d;*.d98;*.98d;*.fdi;")	\
								_T("*.xdf;*.hdm;*.dup;*.2hd;*.tfd\0")	\
				_T("All files (*.*)\0*.*\0");
static const FILESEL fddui = {fddui_title, tchar_d88, fddui_filter, 3};

#if defined(SUPPORT_SASI)
static const TCHAR sasiui_title[] = _T("Select SASI/IDE HDD image");
#else
static const TCHAR sasiui_title[] = _T("Select HDD image");
#endif
static const TCHAR sasiui_filter[] =									\
				_T("Anex86 harddisk image files (*.HDI)\0")				\
								_T("*.hdi\0")							\
				_T("T98 harddisk image files (*.THD)\0")				\
								_T("*.thd\0")							\
				_T("T98-Next harddisk image files (*.NHD)\0")			\
								_T("*.nhd\0")							\
				_T("All supported Files\0")								\
								_T("*.thd;*.nhd;*.hdi\0");
static const FILESEL sasiui = {sasiui_title, tchar_thd, sasiui_filter, 4};

#if defined(SUPPORT_IDEIO)
static const TCHAR isoui_title[] = _T("Select ISO-9660 image");
static const TCHAR tchar_iso[] = _T("iso");
static const TCHAR isoui_filter[] =										\
				_T("ISO-9660 image files\0")							\
								_T("*.iso;*.img\0")						\
				_T("All Files\0")										\
								_T("*.*\0");
static const FILESEL isoui = {isoui_title, tchar_iso, isoui_filter, 1};
#endif

#if defined(SUPPORT_SCSI)
static const TCHAR scsiui_title[] = _T("Select SCSI HDD image");
static const TCHAR scsiui_filter[] =									\
				_T("Virtual98 harddisk image files (*.HDD)\0")			\
								_T("*.hdd\0");
static const FILESEL scsiui = {scsiui_title, tchar_hdd, scsiui_filter, 1};
#endif

static const TCHAR newdisk_title[] = _T("Create disk image");
#if defined(SUPPORT_SCSI)
static const TCHAR newdisk_filter[] =									\
				_T("D88 image files (*.D88;*.88D)\0")					\
								_T("*.d88;*.88d;*.d98;*.98d\0")			\
				_T("Anex86 harddisk image files (*.HDI)\0")				\
								_T("*.hdi\0")							\
				_T("T98 harddisk image files (*.THD)\0")				\
								_T("*.thd\0")							\
				_T("T98-Next harddisk image files (*.NHD)\0")			\
								_T("*.nhd\0")							\
				_T("Virtual98 harddisk image files (*.HDD)\0")			\
								_T("*.hdd\0");
#else
static const TCHAR newdisk_filter[] =									\
				_T("D88 image files (*.D88;*.88D)\0")					\
								_T("*.d88;*.88d;*.d98;*.98d\0")			\
				_T("Anex86 harddisk image files (*.HDI)\0")				\
								_T("*.hdi\0")							\
				_T("T98 harddisk image files (*.THD)\0")				\
								_T("*.thd\0")							\
				_T("T98-Next harddisk image files (*.NHD)\0")			\
								_T("*.nhd\0");
#endif
static const FILESEL newdiskui = {newdisk_title, tchar_d88, newdisk_filter, 1};


// ----

void dialog_changefdd(HWND hWnd, REG8 drv) {

const OEMCHAR	*p;
	OEMCHAR		path[MAX_PATH];
	int			readonly;

	if (drv < 4) {
		p = fdd_diskname(drv);
		if ((p == NULL) || (p[0] == '\0')) {
			p = fddfolder;
		}
		file_cpyname(path, p, NELEMENTS(path));
		if (dlgs_selectfile(hWnd, &fddui, path, NELEMENTS(path), &readonly)) {
			file_cpyname(fddfolder, path, NELEMENTS(fddfolder));
			sysmng_update(SYS_UPDATEOSCFG);
			diskdrv_setfdd(drv, path, readonly);
			toolwin_setfdd(drv, path);
		}
	}
}

void dialog_changehdd(HWND hWnd, REG8 drv) {

	UINT		num;
const OEMCHAR	*p;
const FILESEL	*hddui;
	OEMCHAR		path[MAX_PATH];

	p = diskdrv_getsxsi(drv);
	num = drv & 0x0f;
	hddui = NULL;
	if (!(drv & 0x20)) {		// SASI/IDE
		if (num < 2) {
			hddui = &sasiui;
		}
#if defined(SUPPORT_IDEIO)
		else if (num == 2) {
			hddui = &isoui;
		}
#endif
	}
#if defined(SUPPORT_SCSI)
	else {						// SCSI
		if (num < 4) {
			hddui = &scsiui;
		}
	}
#endif
	if (hddui == NULL) {
		return;
	}
	if ((p == NULL) || (p[0] == '\0')) {
		p = hddfolder;
	}
	file_cpyname(path, p, NELEMENTS(path));
	if (dlgs_selectfile(hWnd, hddui, path, NELEMENTS(path), NULL)) {
		file_cpyname(hddfolder, path, NELEMENTS(hddfolder));
		sysmng_update(SYS_UPDATEOSCFG);
		diskdrv_sethdd(drv, path);
	}
}


// ---- newdisk

static const OEMCHAR str_newdisk[] = OEMTEXT("newdisk");
static const UINT32 hddsizetbl[5] = {20, 41, 65, 80, 128};

static const UINT16 sasires[6] = {
				IDC_NEWSASI5MB, IDC_NEWSASI10MB,
				IDC_NEWSASI15MB, IDC_NEWSASI20MB,
				IDC_NEWSASI30MB, IDC_NEWSASI40MB};

static	UINT8	makefdtype = DISKTYPE_2HD << 4;
static	OEMCHAR	disklabel[16+1];
static	UINT	hddsize;
static	UINT	hddminsize;
static	UINT	hddmaxsize;

static LRESULT CALLBACK NewHddDlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {

	UINT	val;
	TCHAR	work[32];

	switch (msg) {
		case WM_INITDIALOG:
			SETLISTUINT32(hWnd, IDC_HDDSIZE, hddsizetbl);
			wsprintf(work, _T("(%d-%dMB)"), hddminsize, hddmaxsize);
			SetWindowText(GetDlgItem(hWnd, IDC_HDDLIMIT), work);
			SetFocus(GetDlgItem(hWnd, IDC_HDDSIZE));
			return(FALSE);

		case WM_COMMAND:
			switch(LOWORD(wp)) {
				case IDOK:
					GetWindowText(GetDlgItem(hWnd, IDC_HDDSIZE),
													work, NELEMENTS(work));
					val = (UINT)miltchar_solveINT(work);
					if (val < hddminsize) {
						val = hddminsize;
					}
					else if (val > hddmaxsize) {
						val = hddmaxsize;
					}
					hddsize = val;
					EndDialog(hWnd, IDOK);
					break;

				case IDCANCEL:
					EndDialog(hWnd, IDCANCEL);
					break;

				default:
					return(FALSE);
			}
			break;

		case WM_CLOSE:
			PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0);
			break;

		default:
			return(FALSE);
	}
	return(TRUE);
}

static LRESULT CALLBACK NewSASIDlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {

	UINT	val;

	switch (msg) {
		case WM_INITDIALOG:
			SetFocus(GetDlgItem(hWnd, IDC_NEWSASI5MB));
			return(FALSE);

		case WM_COMMAND:
			switch(LOWORD(wp)) {
				case IDOK:
					for (val=0; val<6; val++) {
						if (GetDlgItemCheck(hWnd, sasires[val])) {
							break;
						}
					}
					if (val > 3) {
						val++;
					}
					hddsize = val;
					EndDialog(hWnd, IDOK);
					break;

				case IDCANCEL:
					EndDialog(hWnd, IDCANCEL);
					break;

				default:
					return(FALSE);
			}
			break;

		case WM_CLOSE:
			PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0);
			break;

		default:
			return(FALSE);
	}
	return(TRUE);
}

static LRESULT CALLBACK NewdiskDlgProc(HWND hWnd, UINT msg,
													WPARAM wp, LPARAM lp) {

	UINT16	res;
#if defined(OSLANG_UTF8)
	TCHAR	buf[17];
#endif

	switch (msg) {
		case WM_INITDIALOG:
			switch(makefdtype) {
				case (DISKTYPE_2DD << 4):
					res = IDC_MAKE2DD;
					break;

				case (DISKTYPE_2HD << 4):
					res = IDC_MAKE2HD;
					break;

				default:
					res = IDC_MAKE144;
					break;
			}
			SetDlgItemCheck(hWnd, res, 1);
			SetFocus(GetDlgItem(hWnd, IDC_DISKLABEL));
			return(FALSE);

		case WM_COMMAND:
			switch(LOWORD(wp)) {
				case IDOK:
#if defined(OSLANG_UTF8)
					GetWindowText(GetDlgItem(hWnd, IDC_DISKLABEL),
														buf, NELEMENTS(buf));
					tchartooem(disklabel, NELEMENTS(disklabel), buf, -1);
#else
					GetWindowText(GetDlgItem(hWnd, IDC_DISKLABEL),
											disklabel, NELEMENTS(disklabel));
					if (milstr_kanji1st(disklabel, NELEMENTS(disklabel) - 1)) {
						disklabel[NELEMENTS(disklabel) - 1] = '\0';
					}
#endif
					if (GetDlgItemCheck(hWnd, IDC_MAKE2DD)) {
						makefdtype = (DISKTYPE_2DD << 4);
					}
					else if (GetDlgItemCheck(hWnd, IDC_MAKE2HD)) {
						makefdtype = (DISKTYPE_2HD << 4);
					}
					else {
						makefdtype = (DISKTYPE_2HD << 4) + 1;
					}
					EndDialog(hWnd, IDOK);
					break;

				case IDCANCEL:
					EndDialog(hWnd, IDCANCEL);
					break;

				default:
					return(FALSE);
			}
			break;

		case WM_CLOSE:
			PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0);
			break;

		default:
			return(FALSE);
	}
	return(TRUE);
}

void dialog_newdisk(HWND hWnd) {

	OEMCHAR		path[MAX_PATH];
	HINSTANCE	hinst;
const OEMCHAR	*ext;

	file_cpyname(path, fddfolder, NELEMENTS(path));
	file_cutname(path);
	file_catname(path, str_newdisk, NELEMENTS(path));

	if (!dlgs_selectwritefile(hWnd, &newdiskui, path, NELEMENTS(path))) {
		return;
	}
	hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
	ext = file_getext(path);
	if (!file_cmpname(ext, str_thd)) {
		hddsize = 0;
		hddminsize = 5;
		hddmaxsize = 256;
		if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWHDDDISK),
									hWnd, (DLGPROC)NewHddDlgProc) == IDOK) {
			newdisk_thd(path, hddsize);
		}
	}
	else if (!file_cmpname(ext, str_nhd)) {
		hddsize = 0;
		hddminsize = 5;
		hddmaxsize = 512;
		if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWHDDDISK),
									hWnd, (DLGPROC)NewHddDlgProc) == IDOK) {
			newdisk_nhd(path, hddsize);
		}
	}
	else if (!file_cmpname(ext, str_hdi)) {
		hddsize = 7;
		if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWSASI),
									hWnd, (DLGPROC)NewSASIDlgProc) == IDOK) {
			newdisk_hdi(path, hddsize);
		}
	}
#if defined(SUPPORT_SCSI)
	else if (!file_cmpname(ext, str_hdd)) {
		hddsize = 0;
		hddminsize = 2;
		hddmaxsize = 512;
		if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWHDDDISK),
									hWnd, (DLGPROC)NewHddDlgProc) == IDOK) {
			newdisk_vhd(path, hddsize);
		}
	}
#endif
	else if ((!file_cmpname(ext, str_d88)) ||
			(!file_cmpname(ext, str_d98)) ||
			(!file_cmpname(ext, str_88d)) ||
			(!file_cmpname(ext, str_98d))) {
		if (DialogBox(hinst,
				MAKEINTRESOURCE((np2cfg.usefd144)?IDD_NEWDISK2:IDD_NEWDISK),
									hWnd, (DLGPROC)NewdiskDlgProc) == IDOK) {
			newdisk_fdd(path, makefdtype, disklabel);
		}
	}
}


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