--- np2/win9xc/dialog/d_disk.cpp 2004/01/22 01:10:05 1.2 +++ np2/win9xc/dialog/d_disk.cpp 2011/02/15 00:51:51 1.7 @@ -1,97 +1,168 @@ #include "compiler.h" #include "strres.h" #include "resource.h" -#include "strres.h" #include "np2.h" #include "dosio.h" +#include "sysmng.h" #include "dialog.h" #include "dialogs.h" -#include "ini.h" #include "pccore.h" -#include "fddfile.h" #include "diskdrv.h" +#include "fddfile.h" #include "newdisk.h" -static const char fddui_title[] = "Select floppy image"; -static const char fddui_filter[] = \ - "D88 image files (*.D88;*.D98)\0" \ - "*.d88;*.88d;*.d98;*.98d\0" \ - "Floppy disk images (*.XDF;*.HDM;*.DUP;*.2HD)\0" \ - "*.xdf;*.hdm;*.dup;*.2hd;*.tfd\0" \ - "All supported Files\0" \ - "*.d88;*.88d;*.d98;*.98d;" \ - "*.xdf;*.hdm;*.dup;*.2hd;*.tfd\0" \ - "All files (*.*)\0*.*\0"; +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, str_d88, fddui_filter, 3}; -static const char hddui_title[] = "Select HDD image"; -static const char hddui_filter[] = \ - "T98 harddisk image files (*.THD)\0" \ - "*.thd\0" \ - "Anex86 harddisk image files (*.HDI)\0" \ - "*.hdi\0" \ - "All supported Files\0" \ - "*.thd;*.hdi\0"; -static const FILESEL hddui = {hddui_title, str_thd, hddui_filter, 3}; - -static const char newdisk_title[] = "Create disk image"; -static const char newdisk_filter[] = \ - "D88 image files (*.D88;*.88D)\0" \ - "*.d88;*.88d\0" \ - "T98 harddisk image files (*.THD)\0" \ - "*.thd\0"; +#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, str_thd, sasiui_filter, 4}; + +#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, str_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, str_d88, newdisk_filter, 1}; // ---- -void dialog_changefdd(HWND hWnd, BYTE drv) { +void dialog_changefdd(HWND hWnd, REG8 drv) { -const char *p; +const TCHAR *p; + TCHAR path[MAX_PATH]; int readonly; if (drv < 4) { - p = dlgs_selectfile(hWnd, &fddui, fdd_diskname(drv), - fddfolder, sizeof(fddfolder), &readonly); - if (p != NULL) { - diskdrv_setfdd(drv, p, readonly); + 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); } } } -void dialog_changehdd(HWND hWnd, BYTE drv) { +void dialog_changehdd(HWND hWnd, REG8 drv) { -const char *p; - - if (drv < 2) { - p = dlgs_selectfile(hWnd, &hddui, np2cfg.sasihdd[drv], - hddfolder, sizeof(hddfolder), NULL); - if (p != NULL) { - diskdrv_sethdd(drv, p); + UINT num; +const TCHAR *p; +const FILESEL *hddui; + TCHAR path[MAX_PATH]; + + num = drv & 0x0f; + p = NULL; + hddui = NULL; + if (!(drv & 0x20)) { // SASI/IDE + if (num < 2) { + p = np2cfg.sasihdd[num]; + hddui = &sasiui; + } + } +#if defined(SUPPORT_SCSI) + else { // SCSI + if (num < 4) { + p = np2cfg.scsihdd[num]; + hddui = &scsiui; } } +#endif + if (hddui == NULL) { + return; + } + if (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 char str_newdisk[] = "newdisk"; +static const TCHAR str_newdisk[] = _T("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 BYTE makefdtype = DISKTYPE_2HD << 4; -static char disklabel[16+1]; +static TCHAR 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; - char work[32]; + 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); @@ -99,13 +170,57 @@ static LRESULT CALLBACK NewHddDlgProc(HW switch (LOWORD(wp)) { case IDOK: GetWindowText(GetDlgItem(hWnd, IDC_HDDSIZE), - work, sizeof(work)); + work, NELEMENTS(work)); val = (UINT)milstr_solveINT(work); - if (val < 0) { - val = 0; + 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; + } } - else if (val > 512) { - val = 512; + if (val > 3) { + val++; } hddsize = val; EndDialog(hWnd, IDOK); @@ -133,7 +248,7 @@ static LRESULT CALLBACK NewHddDlgProc(HW static LRESULT CALLBACK NewdiskDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { - WORD res; + UINT16 res; switch (msg) { case WM_INITDIALOG: @@ -158,9 +273,9 @@ static LRESULT CALLBACK NewdiskDlgProc(H switch (LOWORD(wp)) { case IDOK: GetWindowText(GetDlgItem(hWnd, IDC_DISKLABEL), - disklabel, sizeof(disklabel)); - if (milstr_kanji1st(disklabel, sizeof(disklabel) - 1)) { - disklabel[sizeof(disklabel) - 1] = '\0'; + disklabel, NELEMENTS(disklabel)); + if (milstr_kanji1st(disklabel, NELEMENTS(disklabel) - 1)) { + disklabel[NELEMENTS(disklabel) - 1] = '\0'; } if (GetDlgItemCheck(hWnd, IDC_MAKE2DD)) { makefdtype = (DISKTYPE_2DD << 4); @@ -195,31 +310,69 @@ static LRESULT CALLBACK NewdiskDlgProc(H void dialog_newdisk(HWND hWnd) { - char path[MAX_PATH]; -const char *p; + TCHAR path[MAX_PATH]; HINSTANCE hinst; +const TCHAR *ext; - file_cpyname(path, fddfolder, sizeof(path)); + file_cpyname(path, fddfolder, NELEMENTS(path)); file_cutname(path); - file_catname(path, str_newdisk, sizeof(path)); + file_catname(path, str_newdisk, NELEMENTS(path)); - p = dlgs_selectwritefile(hWnd, &newdiskui, path, NULL, 0); - if (p == NULL) { + if (!dlgs_selectwritefile(hWnd, &newdiskui, path, NELEMENTS(path))) { return; } - hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); - if (!file_cmpname(file_getext((char *)p), str_thd)) { + +#if defined(_WIN64) + hinst = reinterpret_cast(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); +#else + hinst = reinterpret_cast(::GetWindowLong(hWnd, GWL_HINSTANCE)); +#endif + + 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_thd(p, hddsize); // (hddsize < 5) || (hddsize > 256) + newdisk_vhd(path, hddsize); } } - else { +#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), + MAKEINTRESOURCE((np2cfg.usefd144)?IDD_NEWDISK2:IDD_NEWDISK), hWnd, (DLGPROC)NewdiskDlgProc) == IDOK) { - newdisk_fdd(p, makefdtype, disklabel); + newdisk_fdd(path, makefdtype, disklabel); } } }