|
|
| version 1.1, 2003/10/16 17:59:24 | version 1.3, 2005/03/20 08:58:20 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "resource.h" | |
| #include "strres.h" | #include "strres.h" |
| #include "resource.h" | |
| #include "np2.h" | #include "np2.h" |
| #include "commng.h" | #include "commng.h" |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "pccore.h" | |
| #include "bit2res.h" | |
| #include "dialog.h" | #include "dialog.h" |
| #include "dialogs.h" | #include "dialogs.h" |
| #include "pccore.h" | |
| #include "dipswbmp.h" | |
| #ifdef __cplusplus | #ifdef __cplusplus |
| Line 20 extern COMMNG cm_mpu98; | Line 20 extern COMMNG cm_mpu98; |
| } | } |
| #endif | #endif |
| static const char *mpuinterrupt[4] = {str_int0, str_int1, str_int2, str_int5}; | static const TCHAR *mpuinterrupt[4] = |
| {str_int0, str_int1, str_int2, str_int5}; | |
| static BYTE mpu = 0; | static UINT8 mpu = 0; |
| static SUBCLASSPROC oldidc_mpujmp = NULL; | |
| static void setmpuiopara(HWND hWnd, WORD res, BYTE value) { | static void setmpuiopara(HWND hWnd, UINT16 res, UINT8 value) { |
| SendDlgItemMessage(hWnd, res, CB_SETCURSEL, | SendDlgItemMessage(hWnd, res, CB_SETCURSEL, |
| (WPARAM)((value >> 4) & 15), (LPARAM)0); | (WPARAM)((value >> 4) & 15), (LPARAM)0); |
| } | } |
| static BYTE getmpuio(HWND hWnd, WORD res) { | static UINT8 getmpuio(HWND hWnd, UINT16 res) { |
| char work[8]; | TCHAR work[8]; |
| GetDlgItemText(hWnd, res, work, sizeof(work)); | GetDlgItemText(hWnd, res, work, NELEMENTS(work)); |
| return((milstr_solveHEX(work) >> 6) & 0xf0); | return((milstr_solveHEX(work) >> 6) & 0xf0); |
| } | } |
| static void setmpuintpara(HWND hWnd, WORD res, BYTE value) { | static void setmpuintpara(HWND hWnd, UINT16 res, UINT8 value) { |
| SendDlgItemMessage(hWnd, res, CB_SETCURSEL, | SendDlgItemMessage(hWnd, res, CB_SETCURSEL, |
| (WPARAM)(value & 3), (LPARAM)0); | (WPARAM)(value & 3), (LPARAM)0); |
| } | } |
| static BYTE getmpuint(HWND hWnd, WORD res) { | static UINT8 getmpuint(HWND hWnd, UINT16 res) { |
| char work[8]; | TCHAR work[8]; |
| BYTE ret; | UINT8 ret; |
| GetDlgItemText(hWnd, res, work, sizeof(work)); | GetDlgItemText(hWnd, res, work, NELEMENTS(work)); |
| ret = work[3] - '0'; | ret = work[3] - '0'; |
| if (ret >= 3) { | if (ret >= 3) { |
| ret = 3; | ret = 3; |
| Line 59 static BYTE getmpuint(HWND hWnd, WORD re | Line 59 static BYTE getmpuint(HWND hWnd, WORD re |
| return(ret); | return(ret); |
| } | } |
| static void setmpujmp(HWND hWnd, BYTE value, BYTE bit) { | static void setmpujmp(HWND hWnd, UINT8 value, UINT8 bit) { |
| if ((mpu ^ value) & bit) { | if ((mpu ^ value) & bit) { |
| mpu &= ~bit; | mpu &= ~bit; |
| Line 68 static void setmpujmp(HWND hWnd, BYTE va | Line 68 static void setmpujmp(HWND hWnd, BYTE va |
| } | } |
| } | } |
| static void setmpuiodip(BYTE *image, int px, int py, int align, BYTE v) { | |
| int i, j, y; | // ---- |
| static void mpucreate(HWND hWnd) { | |
| px *= 9; | UINT i; |
| px++; | TCHAR buf[8]; |
| py *= 9; | HWND sub; |
| for (i=0; i<4; i++, px+=9, v<<=1) { | |
| y = py + ((v&0x80)?5:9); | mpu = np2cfg.mpuopt; |
| for (j=0; j<3; j++) { | for (i=0; i<16; i++) { |
| dlgs_linex(image, px, y+j, 7, align, 2); | wsprintf(buf, str_4X, 0xC0D0 + (i << 10)); |
| } | SendDlgItemMessage(hWnd, IDC_MPUIO, |
| CB_INSERTSTRING, (WPARAM)i, (LPARAM)buf); | |
| } | } |
| } | setmpuiopara(hWnd, IDC_MPUIO, mpu); |
| SETLISTSTR(hWnd, IDC_MPUINT, mpuinterrupt); | |
| setmpuintpara(hWnd, IDC_MPUINT, mpu); | |
| static void setmpuintdip(BYTE *image, int px, int py, int align, BYTE v) { | // SS_OWNERDRAWにすると IDEで不都合が出るので… |
| sub = GetDlgItem(hWnd, IDC_MPUDIP); | |
| SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW + | |
| (GetWindowLong(sub, GWL_STYLE) & (~SS_TYPEMASK))); | |
| dlgs_setjumpery(image, px + 3 - (mpu & 3), py, align); | SetFocus(GetDlgItem(hWnd, IDC_MPUIO)); |
| } | } |
| static LRESULT CALLBACK mpujmp(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { | static void mpuupdate(HWND hWnd) { |
| PAINTSTRUCT ps; | |
| HDC hdc; | |
| HBITMAP hBitmap; | |
| HDC hMemDC; | |
| BYTE *image; | |
| HANDLE hwork; | |
| BITMAPINFO *work; | |
| BYTE *imgbtm; | |
| int align; | |
| switch(msg) { | |
| case WM_PAINT: | |
| hdc = BeginPaint(hWnd, &ps); | |
| if ((hwork = GlobalAlloc(GPTR, bit2res_getsize(&mpudip))) | |
| == NULL) { | |
| break; | |
| } | |
| if ((work = (BITMAPINFO *)GlobalLock(hwork)) == NULL) { | |
| GlobalFree(hwork); | |
| break; | |
| } | |
| bit2res_sethead(work, &mpudip); | |
| hBitmap = CreateDIBSection(hdc, work, DIB_RGB_COLORS, | |
| (void **)&image, NULL, 0); | |
| bit2res_setdata(image, &mpudip); | |
| align = ((mpudip.x + 7) / 2) & ~3; | |
| imgbtm = image + align * (mpudip.y - 1); | |
| setmpuiodip(imgbtm, 2, 1, align, mpu); | |
| setmpuintdip(imgbtm, 9, 1, align, mpu); | |
| if ((hMemDC = CreateCompatibleDC(hdc)) != NULL) { | |
| SelectObject(hMemDC, hBitmap); | |
| StretchBlt(hdc, 0, 0, mpudip.x, mpudip.y, hMemDC, | |
| 0, 0, mpudip.x, mpudip.y, SRCCOPY); | |
| DeleteDC(hMemDC); | |
| } | |
| DeleteObject(hBitmap); | |
| EndPaint(hWnd, &ps); | |
| GlobalUnlock(hwork); | |
| GlobalFree(hwork); | |
| break; | |
| default: | |
| return(CallWindowProc(oldidc_mpujmp, hWnd, msg, wp, lp)); | |
| } | |
| return(FALSE); | |
| } | |
| static void updatempu(HWND hWnd) { | |
| UINT update; | UINT update; |
| Line 150 static void updatempu(HWND hWnd) { | Line 109 static void updatempu(HWND hWnd) { |
| LRESULT CALLBACK MidiDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { | LRESULT CALLBACK MidiDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { |
| BYTE b, bit; | UINT8 b, bit; |
| int i; | |
| RECT rect1; | RECT rect1; |
| RECT rect2; | RECT rect2; |
| POINT p; | POINT p; |
| switch(msg) { | switch(msg) { |
| case WM_INITDIALOG: | case WM_INITDIALOG: |
| mpu = np2cfg.mpuopt; | mpucreate(hWnd); |
| for (i=0; i<16; i++) { | |
| char buf[8]; | |
| wsprintf(buf, str_4X, 0xC0D0 + (i << 10)); | |
| SendDlgItemMessage(hWnd, IDC_MPUIO, | |
| CB_INSERTSTRING, (WPARAM)i, (LPARAM)buf); | |
| } | |
| setmpuiopara(hWnd, IDC_MPUIO, mpu); | |
| SETLISTSTR(hWnd, IDC_MPUINT, mpuinterrupt); | |
| setmpuintpara(hWnd, IDC_MPUINT, mpu); | |
| oldidc_mpujmp = (SUBCLASSPROC)GetWindowLong(GetDlgItem(hWnd, | |
| IDC_MPUDIP), GWL_WNDPROC); | |
| SetWindowLong(GetDlgItem(hWnd, IDC_MPUDIP), GWL_WNDPROC, | |
| (LONG)mpujmp); | |
| SetFocus(GetDlgItem(hWnd, IDC_MPUIO)); // ver0.30 | |
| return(FALSE); | return(FALSE); |
| case WM_COMMAND: | case WM_COMMAND: |
| switch(LOWORD(wp)) { | switch(LOWORD(wp)) { |
| case IDOK: | case IDOK: |
| updatempu(hWnd); | mpuupdate(hWnd); |
| EndDialog(hWnd, IDOK); | EndDialog(hWnd, IDOK); |
| break; | break; |
| Line 221 LRESULT CALLBACK MidiDialogProc(HWND hWn | Line 164 LRESULT CALLBACK MidiDialogProc(HWND hWn |
| NULL, TRUE); | NULL, TRUE); |
| } | } |
| else if ((p.x >= 9) && (p.x < 13)) { | else if ((p.x >= 9) && (p.x < 13)) { |
| b = (BYTE)(12 - p.x); | b = (UINT8)(12 - p.x); |
| if ((mpu ^ b) & 3) { | if ((mpu ^ b) & 3) { |
| mpu &= ~0x3; | mpu &= ~0x3; |
| mpu |= b; | mpu |= b; |
| Line 234 LRESULT CALLBACK MidiDialogProc(HWND hWn | Line 177 LRESULT CALLBACK MidiDialogProc(HWND hWn |
| } | } |
| break; | break; |
| case WM_DRAWITEM: | |
| if (LOWORD(wp) == IDC_MPUDIP) { | |
| dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC, | |
| dipswbmp_getmpu(mpu)); | |
| } | |
| return(FALSE); | |
| case WM_CLOSE: | case WM_CLOSE: |
| PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0); | PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0); |
| break; | break; |