--- np2/win9x/dialog/d_config.cpp 2003/10/16 17:58:58 1.1 +++ np2/win9x/dialog/d_config.cpp 2003/10/30 12:45:38 1.4 @@ -4,9 +4,9 @@ #include "np2.h" #include "dosio.h" #include "sysmng.h" -#include "pccore.h" #include "dialog.h" #include "dialogs.h" +#include "pccore.h" static const char str_2halfmhz[] = "2.4576MHz"; @@ -16,40 +16,40 @@ static const UINT32 mulval[10] = {1, 2, static const char str_clockfmt[] = "%2u.%.4u"; -static void SetClock(HWND hWnd) { +static void setclock(HWND hWnd, UINT multiple) { - DWORD dval; + UINT32 clock; char work[32]; - int val; GetDlgItemText(hWnd, IDC_BASECLOCK, work, sizeof(work)); if (work[0] == '1') { - dval = PCBASECLOCK20 / 100; + clock = PCBASECLOCK20 / 100; } else { - dval = PCBASECLOCK25 / 100; + clock = PCBASECLOCK25 / 100; } - GetDlgItemText(hWnd, IDC_MULTIPLE, work, sizeof(work)); - val = milstr_solveINT(work); - if (val < 1) { - val = 1; + if (multiple == 0) { + GetDlgItemText(hWnd, IDC_MULTIPLE, work, sizeof(work)); + multiple = (UINT)milstr_solveINT(work); } - else if (val > 32) { - val = 32; + if (multiple < 1) { + multiple = 1; } - dval *= val; - wsprintf(work, str_clockfmt, dval / 10000, dval % 10000); + else if (multiple > 32) { + multiple = 32; + } + clock *= multiple; + wsprintf(work, str_clockfmt, clock / 10000, clock % 10000); SetDlgItemText(hWnd, IDC_CLOCKMSG, work); } - LRESULT CALLBACK CfgDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { char work[128]; BYTE bval; WORD wval; - DWORD dval; - int val; + UINT32 dval; + UINT val; UINT update; switch (msg) { @@ -79,9 +79,16 @@ LRESULT CALLBACK CfgDialogProc(HWND hWnd wsprintf(work, str_u, np2cfg.delayms); SetDlgItemText(hWnd, IDC_SOUNDBUF, work); + if (mmxflag & MMXFLAG_NOTSUPPORT) { + EnableWindow(GetDlgItem(hWnd, IDC_DISABLEMMX), FALSE); + SetDlgItemCheck(hWnd, IDC_DISABLEMMX, TRUE); + } + else { + SetDlgItemCheck(hWnd, IDC_DISABLEMMX, np2oscfg.disablemmx); + } SetDlgItemCheck(hWnd, IDC_COMFIRM, np2oscfg.comfirm); SetDlgItemCheck(hWnd, IDC_RESUME, np2oscfg.resume); - SetClock(hWnd); + setclock(hWnd, 0); SetFocus(GetDlgItem(hWnd, IDC_BASECLOCK)); return(FALSE); @@ -96,20 +103,20 @@ LRESULT CALLBACK CfgDialogProc(HWND hWnd else { dval = PCBASECLOCK25; } - if (dval != np2cfg.baseclock) { + if (np2cfg.baseclock != dval) { np2cfg.baseclock = dval; update |= SYS_UPDATECFG | SYS_UPDATECLOCK; } GetDlgItemText(hWnd, IDC_MULTIPLE, work, sizeof(work)); - val = milstr_solveINT(work); + val = (UINT)milstr_solveINT(work); if (val < 1) { val = 1; } else if (val > 32) { val = 32; } - if (np2cfg.multiple != (DWORD)val) { + if (np2cfg.multiple != val) { np2cfg.multiple = val; update |= SYS_UPDATECFG | SYS_UPDATECLOCK; } @@ -130,19 +137,29 @@ LRESULT CALLBACK CfgDialogProc(HWND hWnd } GetDlgItemText(hWnd, IDC_SOUNDBUF, work, sizeof(work)); - val = milstr_solveINT(work); + val = (UINT)milstr_solveINT(work); if (val < 100) { val = 100; } else if (val > 1000) { val = 1000; } - if (np2cfg.delayms != (WORD)val) { + if (np2cfg.delayms != (UINT16)val) { soundrenewal = 1; - np2cfg.delayms = (WORD)val; + np2cfg.delayms = (UINT16)val; update |= SYS_UPDATECFG | SYS_UPDATESBUF; } + if (!(mmxflag & MMXFLAG_NOTSUPPORT)) { + bval = GetDlgItemCheck(hWnd, IDC_DISABLEMMX); + if (np2oscfg.disablemmx != bval) { + np2oscfg.disablemmx = bval; + mmxflag &= ~MMXFLAG_DISABLE; + mmxflag |= (bval)?MMXFLAG_DISABLE:0; + update |= SYS_UPDATEOSCFG; + } + } + bval = GetDlgItemCheck(hWnd, IDC_COMFIRM); if (np2oscfg.comfirm != bval) { np2oscfg.comfirm = bval; @@ -163,8 +180,20 @@ LRESULT CALLBACK CfgDialogProc(HWND hWnd break; case IDC_BASECLOCK: + setclock(hWnd, 0); + return(FALSE); + case IDC_MULTIPLE: - SetClock(hWnd); + if (HIWORD(wp) == CBN_SELCHANGE) { + val = (UINT)SendDlgItemMessage(hWnd, IDC_MULTIPLE, + CB_GETCURSEL, 0, 0); + if (val < sizeof(mulval)/sizeof(UINT32)) { + setclock(hWnd, mulval[val]); + } + } + else { + setclock(hWnd, 0); + } return(FALSE); default: