Diff for /np2/win9x/dialog/d_mpu98.cpp between versions 1.3 and 1.4

version 1.3, 2003/10/24 14:16:54 version 1.4, 2003/10/31 03:40:10
Line 22  extern COMMNG cm_mpu98; Line 22  extern COMMNG cm_mpu98;
   
 static const char *mpuinterrupt[4] = {str_int0, str_int1, str_int2, str_int5};  static const char *mpuinterrupt[4] = {str_int0, str_int1, str_int2, str_int5};
   
 static  BYTE                    mpu = 0;  static  BYTE    mpu = 0;
 static  SUBCLASSPROC    oldidc_mpujmp = NULL;  
   
   
 static void setmpuiopara(HWND hWnd, WORD res, BYTE value) {  static void setmpuiopara(HWND hWnd, WORD res, BYTE value) {
Line 88  static void setmpuintdip(BYTE *image, in Line 87  static void setmpuintdip(BYTE *image, in
         dlgs_setjumpery(image, px + 3 - (mpu & 3), py, align);          dlgs_setjumpery(image, px + 3 - (mpu & 3), py, align);
 }  }
   
 static LRESULT CALLBACK mpujmp(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {  
   
         PAINTSTRUCT     ps;  // ----
         HDC                     hdc;  
         HBITMAP         hBitmap;  
         HDC                     hMemDC;  
         BYTE            *image;  
         HANDLE          hwork;  
         BITMAPINFO      *work;  
         BYTE            *imgbtm;  
         int                     align;  
   
         switch(msg) {  static void mpucreate(HWND hWnd) {
                 case WM_PAINT:  
                         hdc = BeginPaint(hWnd, &ps);          UINT    i;
                         if ((hwork = GlobalAlloc(GPTR, bit2res_getsize(&mpudip)))          char    buf[8];
                                                                                                                                 == NULL) {          HWND    sub;
                                 break;  
                         }          mpu = np2cfg.mpuopt;
                         if ((work = (BITMAPINFO *)GlobalLock(hwork)) == NULL) {          for (i=0; i<16; i++) {
                                 GlobalFree(hwork);                  wsprintf(buf, str_4X, 0xC0D0 + (i << 10));
                                 break;                  SendDlgItemMessage(hWnd, IDC_MPUIO,
                         }                                                                          CB_INSERTSTRING, (WPARAM)i, (LPARAM)buf);
                         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);          setmpuiopara(hWnd, IDC_MPUIO, mpu);
           SETLISTSTR(hWnd, IDC_MPUINT, mpuinterrupt);
           setmpuintpara(hWnd, IDC_MPUINT, mpu);
   
           dlgs_setlistmidiout(hWnd, IDC_MPU98MMAP, np2oscfg.mpu.mout);
           dlgs_setlistmidiin(hWnd, IDC_MPU98MDIN, np2oscfg.mpu.min);
           SETLISTSTR(hWnd, IDC_MPU98MMDL, cmmidi_mdlname);
           SetDlgItemText(hWnd, IDC_MPU98MMDL, np2oscfg.mpu.mdl);
           SetDlgItemCheck(hWnd, IDC_MPU98DEFE, np2oscfg.mpu.def_en);
           SetDlgItemText(hWnd, IDC_MPU98DEFF, np2oscfg.mpu.def);
   
           // SS_OWNERDRAWにすると IDEで不都合が出るので…
           sub = GetDlgItem(hWnd, IDC_MPUDIP);
           SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +
                                                           (GetWindowLong(sub, GWL_STYLE) & (~SS_TYPEMASK)));
   
           SetFocus(GetDlgItem(hWnd, IDC_MPUIO));
 }  }
   
 static void updatempu(HWND hWnd) {  static void mpuupdate(HWND hWnd) {
   
         union {          union {
                 char    mmap[MAXPNAMELEN];                  char    mmap[MAXPNAMELEN];
Line 182  static void updatempu(HWND hWnd) { Line 167  static void updatempu(HWND hWnd) {
         sysmng_update(update);          sysmng_update(update);
 }  }
   
 LRESULT CALLBACK MidiDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {  static void mpucmddipsw(HWND hWnd) {
   
         BYTE    b, bit;  
         int             i;  
         RECT    rect1;          RECT    rect1;
         RECT    rect2;          RECT    rect2;
         POINT   p;          POINT   p;
           BYTE    bit;
   
         switch(msg) {          GetWindowRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect1);
                 case WM_INITDIALOG:          GetClientRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect2);
                         mpu = np2cfg.mpuopt;          GetCursorPos(&p);
                         for (i=0; i<16; i++) {          p.x += rect2.left - rect1.left;
                                 char buf[8];          p.y += rect2.top - rect1.top;
                                 wsprintf(buf, str_4X, 0xC0D0 + (i << 10));          p.x /= 9;
                                 SendDlgItemMessage(hWnd, IDC_MPUIO,          p.y /= 9;
                                                                         CB_INSERTSTRING, (WPARAM)i, (LPARAM)buf);          if ((p.y < 1) || (p.y >= 3)) {
                         }                  return;
                         setmpuiopara(hWnd, IDC_MPUIO, mpu);          }
                         SETLISTSTR(hWnd, IDC_MPUINT, mpuinterrupt);          if ((p.x >= 2) && (p.x < 6)) {
                   bit = 0x80 >> (p.x - 2);
                   mpu ^= bit;
                   setmpuiopara(hWnd, IDC_MPUIO, mpu);
                   InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE);
           }
           else if ((p.x >= 9) && (p.x < 13)) {
                   bit = (BYTE)(12 - p.x);
                   if ((mpu ^ bit) & 3) {
                           mpu &= ~0x3;
                           mpu |= bit;
                         setmpuintpara(hWnd, IDC_MPUINT, mpu);                          setmpuintpara(hWnd, IDC_MPUINT, mpu);
                           InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE);
                   }
           }
   }
   
   static void mpudrawdipsw(HWND hWnd, HDC hdc) {
   
           BITMAPINFO      *bmi;
           HBITMAP         hbmp;
           BYTE            *image;
           int                     align;
           BYTE            *imgbtm;
           HDC                     hmdc;
   
                         dlgs_setlistmidiout(hWnd, IDC_MPU98MMAP, np2oscfg.mpu.mout);          bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&mpudip), "bitmap");
                         dlgs_setlistmidiin(hWnd, IDC_MPU98MDIN, np2oscfg.mpu.min);          if (bmi == NULL) {
                         SETLISTSTR(hWnd, IDC_MPU98MMDL, cmmidi_mdlname);                  return;
                         SetDlgItemText(hWnd, IDC_MPU98MMDL, np2oscfg.mpu.mdl);          }
                         SetDlgItemCheck(hWnd, IDC_MPU98DEFE, np2oscfg.mpu.def_en);          bit2res_sethead(bmi, &mpudip);
                         SetDlgItemText(hWnd, IDC_MPU98DEFF, np2oscfg.mpu.def);          hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS,
                                                                                                   (void **)&image, NULL, 0);
                         oldidc_mpujmp = (SUBCLASSPROC)GetWindowLong(GetDlgItem(hWnd,          bit2res_setdata(image, &mpudip);
                                                                                                 IDC_MPUDIP), GWL_WNDPROC);          align = ((mpudip.x + 7) / 2) & ~3;
                         SetWindowLong(GetDlgItem(hWnd, IDC_MPUDIP), GWL_WNDPROC,          imgbtm = image + align * (mpudip.y - 1);
                                                                                                         (LONG)mpujmp);          setmpuiodip(imgbtm, 2, 1, align, mpu);
                         SetFocus(GetDlgItem(hWnd, IDC_MPUIO));                                  // ver0.30          setmpuintdip(imgbtm, 9, 1, align, mpu);
           hmdc = CreateCompatibleDC(hdc);
           SelectObject(hmdc, hbmp);
           BitBlt(hdc, 0, 0, mpudip.x, mpudip.y, hmdc, 0, 0, SRCCOPY);
           DeleteDC(hmdc);
           DeleteObject(hbmp);
           _MFREE(bmi);
   }
   
   LRESULT CALLBACK MidiDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
   
           switch(msg) {
                   case WM_INITDIALOG:
                           mpucreate(hWnd);
                         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 244  LRESULT CALLBACK MidiDialogProc(HWND hWn Line 264  LRESULT CALLBACK MidiDialogProc(HWND hWn
                                         return(FALSE);                                          return(FALSE);
   
                                 case IDC_MPUDIP:                                  case IDC_MPUDIP:
                                         GetWindowRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect1);                                          mpucmddipsw(hWnd);
                                         GetClientRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect2);  
                                         GetCursorPos(&p);  
                                         p.x += rect2.left - rect1.left;  
                                         p.y += rect2.top - rect1.top;  
                                         p.x /= 9;  
                                         p.y /= 9;  
                                         if ((p.y < 1) || (p.y >= 3)) {  
                                                 return(FALSE);  
                                         }  
                                         if ((p.x >= 2) && (p.x < 6)) {  
                                                 bit = 0x80 >> (p.x - 2);  
                                                 mpu ^= bit;  
                                                 setmpuiopara(hWnd, IDC_MPUIO, mpu);  
                                                 InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP),  
                                                                                                                         NULL, TRUE);  
                                         }  
                                         else if ((p.x >= 9) && (p.x < 13)) {  
                                                 b = (BYTE)(12 - p.x);  
                                                 if ((mpu ^ b) & 3) {  
                                                         mpu &= ~0x3;  
                                                         mpu |= b;  
                                                         setmpuintpara(hWnd, IDC_MPUINT, mpu);  
                                                         InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP),  
                                                                                                                         NULL, TRUE);  
                                                 }  
                                         }  
                                         return(FALSE);                                          return(FALSE);
   
                                 case IDC_MPU98DEFB:                                  case IDC_MPU98DEFB:
Line 279  LRESULT CALLBACK MidiDialogProc(HWND hWn Line 273  LRESULT CALLBACK MidiDialogProc(HWND hWn
                         }                          }
                         break;                          break;
   
                   case WM_DRAWITEM:
                           if (LOWORD(wp) == IDC_MPUDIP) {
                                   mpudrawdipsw(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC);
                           }
                           return(FALSE);
   
                 case WM_CLOSE:                  case WM_CLOSE:
                         PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0);                          PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0);
                         break;                          break;

Removed from v.1.3  
changed lines
  Added in v.1.4


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