--- np2/win9x/dialog/d_disk.cpp 2003/10/30 12:45:38 1.5 +++ np2/win9x/dialog/d_disk.cpp 2004/01/22 01:10:05 1.6 @@ -25,28 +25,38 @@ static const char fddui_filter[] = "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[] = \ +static const char sasiui_title[] = "Select SASI/IDE HDD image"; +static const char sasiui_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 FILESEL sasiui = {sasiui_title, str_thd, sasiui_filter, 3}; + +static const char scsiui_title[] = "Select SCSI HDD image"; +static const char scsiui_filter[] = \ + "Virtual98 harddisk image files (*.HDD)\0" \ + "*.hdd\0"; +static const FILESEL scsiui = {scsiui_title, str_hdd, scsiui_filter, 1}; static const char newdisk_title[] = "Create disk image"; static const char newdisk_filter[] = \ "D88 image files (*.D88;*.88D)\0" \ - "*.d88;*.88d\0" \ + "*.d88;*.88d\0" \ "T98 harddisk image files (*.THD)\0" \ - "*.thd\0"; + "*.thd\0" \ + "Anex86 harddisk image files (*.HDI)\0" \ + "*.hdi\0" \ + "Virtual98 harddisk image files (*.HDD)\0" \ + "*.hdd\0"; 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; char path[MAX_PATH]; @@ -67,22 +77,36 @@ const char *p; } } -void dialog_changehdd(HWND hWnd, BYTE drv) { +void dialog_changehdd(HWND hWnd, REG8 drv) { -const char *p; - char path[MAX_PATH]; + UINT num; +const char *p; + char path[MAX_PATH]; +const FILESEL *hddui; - if (drv < 2) { - p = np2cfg.hddfile[drv]; - if ((p == NULL) || (p[0] == '\0')) { - p = hddfolder; + num = drv & 0x0f; + if (!(drv & 0x20)) { // SASI/IDE + if (num >= 2) { + return; } - file_cpyname(path, p, sizeof(path)); - if (dlgs_selectfile(hWnd, &hddui, path, sizeof(path), NULL)) { - file_cpyname(hddfolder, path, sizeof(hddfolder)); - sysmng_update(SYS_UPDATEOSCFG); - diskdrv_sethdd(drv, path); + p = np2cfg.sasihdd[num]; + hddui = &sasiui; + } + else { // SCSI + if (num >= 4) { + return; } + p = np2cfg.scsihdd[num]; + hddui = &scsiui; + } + if ((p == NULL) || (p[0] == '\0')) { + p = hddfolder; + } + file_cpyname(path, p, sizeof(path)); + if (dlgs_selectfile(hWnd, hddui, path, sizeof(path), NULL)) { + file_cpyname(hddfolder, path, sizeof(hddfolder)); + sysmng_update(SYS_UPDATEOSCFG); + diskdrv_sethdd(drv, path); } } @@ -92,9 +116,16 @@ const char *p; static const char str_newdisk[] = "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 UINT hddsize; +static UINT hddminsize; +static UINT hddmaxsize; static LRESULT CALLBACK NewHddDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { @@ -105,6 +136,8 @@ static LRESULT CALLBACK NewHddDlgProc(HW switch (msg) { case WM_INITDIALOG: SETLISTUINT32(hWnd, IDC_HDDSIZE, hddsizetbl); + SPRINTF(work, "(%d-%dMB)", hddminsize, hddmaxsize); + SetWindowText(GetDlgItem(hWnd, IDC_HDDLIMIT), work); SetFocus(GetDlgItem(hWnd, IDC_HDDSIZE)); return(FALSE); @@ -114,11 +147,55 @@ static LRESULT CALLBACK NewHddDlgProc(HW GetWindowText(GetDlgItem(hWnd, IDC_HDDSIZE), work, sizeof(work)); val = (UINT)milstr_solveINT(work); - if (val < 0) { - val = 0; + if (val < hddminsize) { + val = hddminsize; } - else if (val > 512) { - val = 512; + 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); @@ -221,9 +298,27 @@ void dialog_newdisk(HWND hWnd) { hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); if (!file_cmpname(file_getext(path), 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(file_getext(path), str_hdi)) { + hddsize = 7; + if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWSASI), + hWnd, (DLGPROC)NewSASIDlgProc) == IDOK) { + newdisk_hdi(path, hddsize); + } + } + else if (!file_cmpname(file_getext(path), str_hdd)) { + hddsize = 0; + hddminsize = 2; + hddmaxsize = 512; if (DialogBox(hinst, MAKEINTRESOURCE(IDD_NEWHDDDISK), hWnd, (DLGPROC)NewHddDlgProc) == IDOK) { - newdisk_hdd(path, hddsize); // (hddsize < 5) || (hddsize > 256) + newdisk_vhd(path, hddsize); } } else {