Diff for /np2/win9x/dialog/d_sound.cpp between versions 1.9 and 1.25

version 1.9, 2003/11/04 19:23:03 version 1.25, 2011/03/07 09:54:11
Line 1 Line 1
 #include        "compiler.h"  /**
 #include        <windowsx.h>   * @file        d_sound.cpp
 #include        <commctrl.h>   * @brief       Sound configure dialog procedure
 #include        <prsht.h>   *
 #include        "strres.h"   * @author      $Author$
 #include        "resource.h"   * @date        $Date$
 #include        "np2.h"   */
 #include        "dosio.h"  
 #include        "joymng.h"  #include "compiler.h"
 #include        "sysmng.h"  #include <commctrl.h>
 #include        "menu.h"  #include <prsht.h>
 #include        "np2class.h"  #include "strres.h"
 #include        "dialog.h"  #include "resource.h"
 #include        "dialogs.h"  #include "np2.h"
 #include        "bit2res.h"  #include "oemtext.h"
 #include        "pccore.h"  #include "dosio.h"
 #include        "iocore.h"  #include "joymng.h"
 #include        "sound.h"  #include "sysmng.h"
 #include        "fmboard.h"  #include "menu.h"
 #include        "s98.h"  #include "np2class.h"
   #include "dialog.h"
   #include "dialogs.h"
 static const char *sndioport[4] = {"0088", "0188", "0288", "0388"};  #include "pccore.h"
 static const char *sndinterrupt[4] = {str_int0, str_int4, str_int5, str_int6};  #include "iocore.h"
 static const char *sndromaddr[5] = {"C8000", "CC000", "D0000", "D4000", "N/C"};  #include "sound.h"
 static const char *sndid[8] = {"0x", "1x", "2x", "3x", "4x", "5x", "6x", "7x"};  #include "fmboard.h"
   #include "s98.h"
 static const char str_sndopt[] = "Sound board option";  #include "dipswbmp.h"
   
   #if !defined(__GNUC__)
   #pragma comment(lib, "comctl32.lib")
   #endif  // !defined(__GNUC__)
   
   static const CBPARAM cpIO26[] =
   {
           {MAKEINTRESOURCE(IDS_0088),             0x00},
           {MAKEINTRESOURCE(IDS_0188),             0x10},
   };
   
   static const CBPARAM cpIO86[] =
   {
           {MAKEINTRESOURCE(IDS_0188),             0x01},
           {MAKEINTRESOURCE(IDS_0288),             0x00},
   };
   
   static const CBPARAM cpInt26[] =
   {
           {MAKEINTRESOURCE(IDS_INT0),             0x00},
           {MAKEINTRESOURCE(IDS_INT41),    0x80},
           {MAKEINTRESOURCE(IDS_INT5),             0xc0},
           {MAKEINTRESOURCE(IDS_INT6),             0x40},
   };
   
   static const CBPARAM cpInt86[] =
   {
           {MAKEINTRESOURCE(IDS_INT0),             0x00},
           {MAKEINTRESOURCE(IDS_INT41),    0x08},
           {MAKEINTRESOURCE(IDS_INT5),             0x0c},
           {MAKEINTRESOURCE(IDS_INT6),             0x04},
   };
   
   static const CBPARAM cpAddr[] =
   {
           {MAKEINTRESOURCE(IDS_C8000),            0x00},
           {MAKEINTRESOURCE(IDS_CC000),            0x01},
           {MAKEINTRESOURCE(IDS_D0000),            0x02},
           {MAKEINTRESOURCE(IDS_D4000),            0x03},
           {MAKEINTRESOURCE(IDS_NONCONNECT),       0x04},
   };
   
   static const CBPARAM cpID[] =
   {
           {MAKEINTRESOURCE(IDS_0X),       0xe0},
           {MAKEINTRESOURCE(IDS_1X),       0xc0},
           {MAKEINTRESOURCE(IDS_2X),       0xa0},
           {MAKEINTRESOURCE(IDS_3X),       0x80},
           {MAKEINTRESOURCE(IDS_4X),       0x60},
           {MAKEINTRESOURCE(IDS_5X),       0x40},
           {MAKEINTRESOURCE(IDS_6X),       0x20},
           {MAKEINTRESOURCE(IDS_7X),       0x00},
   };
   
   
 typedef struct {  typedef struct {
         UINT16  res;          UINT16  res;
         UINT16  resstr;          UINT16  resstr;
         BYTE    *value;          UINT8   *value;
         UINT16  min;          UINT16  min;
         UINT16  max;          UINT16  max;
 } SLIDERTBL;  } SLIDERTBL;
   
 static void slidersetvaluestr(HWND hWnd, const SLIDERTBL *item, BYTE value) {  static void slidersetvaluestr(HWND hWnd, const SLIDERTBL *item, UINT8 value) {
   
         char    work[32];          TCHAR   work[32];
   
         wsprintf(work, str_d, value);          wsprintf(work, tchar_d, value);
         SetDlgItemText(hWnd, item->resstr, work);          SetDlgItemText(hWnd, item->resstr, work);
 }  }
   
 static void slidersetvalue(HWND hWnd, const SLIDERTBL *item, BYTE value) {  static void slidersetvalue(HWND hWnd, const SLIDERTBL *item, UINT8 value) {
   
         if (value > (BYTE)(item->max)) {          if (value > (UINT8)item->max) {
                 value = (BYTE)(item->max);                  value = (UINT8)item->max;
         }          }
         else if (value < (BYTE)(item->min)) {          else if (value < (UINT8)item->min) {
                 value = (BYTE)(item->min);                  value = (UINT8)item->min;
         }          }
         SendDlgItemMessage(hWnd, item->res, TBM_SETPOS, TRUE, value);          SendDlgItemMessage(hWnd, item->res, TBM_SETPOS, TRUE, value);
         slidersetvaluestr(hWnd, item, value);          slidersetvaluestr(hWnd, item, value);
Line 65  static void sliderinit(HWND hWnd, const  Line 118  static void sliderinit(HWND hWnd, const 
   
 static void sliderresetpos(HWND hWnd, const SLIDERTBL *item) {  static void sliderresetpos(HWND hWnd, const SLIDERTBL *item) {
   
         BYTE    value;          UINT8   value;
   
         value = (BYTE)SendDlgItemMessage(hWnd, item->res, TBM_GETPOS, 0, 0);          value = (UINT8)SendDlgItemMessage(hWnd, item->res, TBM_GETPOS, 0, 0);
         if (value > (BYTE)(item->max)) {          if (value > (UINT8)item->max) {
                 value = (BYTE)(item->max);                  value = (UINT8)item->max;
         }          }
         else if (value < (BYTE)(item->min)) {          else if (value < (UINT8)item->min) {
                 value = (BYTE)(item->min);                  value = (UINT8)item->min;
         }          }
         slidersetvaluestr(hWnd, item, value);          slidersetvaluestr(hWnd, item, value);
 }  }
   
 static BYTE sliderrestore(HWND hWnd, const SLIDERTBL *item) {  static UINT8 sliderrestore(HWND hWnd, const SLIDERTBL *item) {
   
         BYTE    value;          UINT8   value;
         BYTE    ret;          UINT8   ret;
   
         value = (BYTE)SendDlgItemMessage(hWnd, item->res, TBM_GETPOS, 0, 0);          value = (UINT8)SendDlgItemMessage(hWnd, item->res, TBM_GETPOS, 0, 0);
         if (value > (BYTE)(item->max)) {          if (value > (UINT8)item->max) {
                 value = (BYTE)(item->max);                  value = (UINT8)item->max;
         }          }
         else if (value < (BYTE)(item->min)) {          else if (value < (UINT8)item->min) {
                 value = (BYTE)(item->min);                  value = (UINT8)item->min;
         }          }
         ret = (*(item->value)) - value;          ret = (*(item->value)) - value;
         if (ret) {          if (ret) {
Line 119  static LRESULT CALLBACK SndmixDlgProc(HW Line 172  static LRESULT CALLBACK SndmixDlgProc(HW
                         return(TRUE);                          return(TRUE);
   
                 case WM_COMMAND:                  case WM_COMMAND:
                         switch (LOWORD(wp)) {                          switch(LOWORD(wp)) {
                                 case IDC_SNDMIXDEF:                                  case IDC_SNDMIXDEF:
                                         for (i=0; i<5; i++) {                                          for (i=0; i<5; i++) {
                                                 slidersetvalue(hWnd, &sndmixitem[i], 64);                                                  slidersetvalue(hWnd, &sndmixitem[i], 64);
Line 212  static LRESULT CALLBACK Snd14optDlgProc( Line 265  static LRESULT CALLBACK Snd14optDlgProc(
   
 // ---- 26K, SPB jumper  // ---- 26K, SPB jumper
   
 static const UINT snd26paranum[4] = {0, 3, 1, 2};  static void setsnd26io(HWND hWnd, UINT uID, UINT8 cValue)
   {
 static void setsnd26iopara(HWND hWnd, BYTE value) {          dlgs_setcbcur(hWnd, uID, cValue & 0x10);
   
         SendMessage(hWnd, CB_SETCURSEL, (WPARAM)((value >> 4) & 1), (LPARAM)0);  
 }  }
   
 static BYTE getsnd26io(HWND hWnd, WORD res) {  static UINT8 getsnd26io(HWND hWnd, UINT uID)
   {
         char    work[8];          return dlgs_getcbcur(hWnd, uID, 0x10);
   
         GetDlgItemText(hWnd, res, work, sizeof(work));  
         return((BYTE)((work[1] == '1')?0x10:0x00));  
 }  }
   
 static void setsnd26intpara(HWND hWnd, BYTE value) {  static void setsnd26int(HWND hWnd, UINT uID, UINT8 cValue)
   {
         SendMessage(hWnd, CB_SETCURSEL,          dlgs_setcbcur(hWnd, uID, cValue & 0xc0);
                                                 (WPARAM)snd26paranum[(value >> 6) & 3], (LPARAM)0);  
 }  
   
 static BYTE getsnd26int(HWND hWnd, WORD res) {  
   
         char    work[8];  
   
         GetDlgItemText(hWnd, res, work, sizeof(work));  
         switch(work[3]) {  
                 case '0':  
                         return(0x00);  
   
                 case '4':  
                         return(0x80);  
   
                 case '6':  
                         return(0x40);  
         }  
         return(0xc0);  
 }  }
   
 static void setsnd26rompara(HWND hWnd, BYTE value) {  static UINT8 getsnd26int(HWND hWnd, UINT uID)
   {
         int             para;          return dlgs_getcbcur(hWnd, uID, 0xc0);
   
         para = value & 7;  
         if (para > 4) {  
                 para = 4;  
         }  
         SendMessage(hWnd, CB_SETCURSEL, (WPARAM)para, (LPARAM)0);  
 }  }
   
 static BYTE getsnd26rom(HWND hWnd, WORD res) {  static void setsnd26rom(HWND hWnd, UINT uID, UINT8 cValue)
   {
         char    work[8];          UINT    uParam;
         DWORD   adrs;  
   
         GetDlgItemText(hWnd, res, work, sizeof(work));          uParam = cValue & 0x07;
         adrs = ((DWORD)milstr_solveHEX(work) - 0xc8000) >> 14;          uParam = min(uParam, 0x04);
         if (adrs < 4) {          dlgs_setcbcur(hWnd, uID, uParam);
                 return((BYTE)adrs);  
         }  
         return(4);  
 }  }
   
 void setsnd26iodip(BYTE *image, int px, int py, int align, BYTE v) {  static UINT8 getsnd26rom(HWND hWnd, UINT uID)
   {
         if (v & 0x10) {          return dlgs_getcbcur(hWnd, uID, 0x04);
                 px++;  
         }  
         dlgs_setjumpery(image, px, py, align);  
 }  
   
 void setsnd26intdip(BYTE *image, int px, int py, int align, BYTE v) {  
   
         dlgs_setjumperx(image, px + ((v & 0x80)?0:1), py, align);  
         dlgs_setjumperx(image, px + ((v & 0x40)?0:1), py + 1, align);  
 }  
   
 void setsnd26romdip(BYTE *image, int px, int py, int align, BYTE v) {  
   
         v &= 7;  
         if (v >= 4) {  
                 v = 4;  
         }  
         dlgs_setjumpery(image, px + v, py, align);  
 }  }
   
   
 // ---- PC-9801-26  // ---- PC-9801-26
   
 static  BYTE    snd26 = 0;  static  UINT8   snd26 = 0;
   
   static void snd26set(HWND hWnd, UINT8 cValue)
   {
           setsnd26io(hWnd, IDC_SND26IO, cValue);
           setsnd26int(hWnd, IDC_SND26INT, cValue);
           setsnd26rom(hWnd, IDC_SND26ROM, cValue);
   }
   
 static void set26jmp(HWND hWnd, BYTE value, BYTE bit) {  static void set26jmp(HWND hWnd, UINT8 value, UINT8 bit) {
   
         if ((snd26 ^ value) & bit) {          if ((snd26 ^ value) & bit) {
                 snd26 &= ~bit;                  snd26 &= ~bit;
Line 319  static void snd26cmdjmp(HWND hWnd) { Line 326  static void snd26cmdjmp(HWND hWnd) {
         RECT    rect2;          RECT    rect2;
         POINT   p;          POINT   p;
         BOOL    redraw;          BOOL    redraw;
         BYTE    b;          UINT8   b;
         BYTE    bit;          UINT8   bit;
   
         GetWindowRect(GetDlgItem(hWnd, IDC_SND26JMP), &rect1);          GetWindowRect(GetDlgItem(hWnd, IDC_SND26JMP), &rect1);
         GetClientRect(GetDlgItem(hWnd, IDC_SND26JMP), &rect2);          GetClientRect(GetDlgItem(hWnd, IDC_SND26JMP), &rect2);
Line 334  static void snd26cmdjmp(HWND hWnd) { Line 341  static void snd26cmdjmp(HWND hWnd) {
                 return;                  return;
         }          }
         if ((p.x >= 2) && (p.x < 7)) {          if ((p.x >= 2) && (p.x < 7)) {
                 b = (BYTE)(p.x - 2);                  b = (UINT8)(p.x - 2);
                 if ((snd26 ^ b) & 7) {                  if ((snd26 ^ b) & 7) {
                         snd26 &= ~0x07;                          snd26 &= ~0x07;
                         snd26 |= b;                          snd26 |= b;
                         setsnd26rompara(GetDlgItem(hWnd, IDC_SND26ROM), b);                          setsnd26rom(hWnd, IDC_SND26ROM, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
Line 360  static void snd26cmdjmp(HWND hWnd) { Line 367  static void snd26cmdjmp(HWND hWnd) {
                 }                  }
                 if (snd26 != b) {                  if (snd26 != b) {
                         snd26 = b;                          snd26 = b;
                         setsnd26intpara(GetDlgItem(hWnd, IDC_SND26INT), b);                          setsnd26int(hWnd, IDC_SND26INT, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
         else if ((p.x >= 15) && (p.x < 17)) {          else if ((p.x >= 15) && (p.x < 17)) {
                 b = (BYTE)((p.x - 15) << 4);                  b = (UINT8)((p.x - 15) << 4);
                 if ((snd26 ^ b) & 0x10) {                  if ((snd26 ^ b) & 0x10) {
                         snd26 &= ~0x10;                          snd26 &= ~0x10;
                         snd26 |= b;                          snd26 |= b;
                         setsnd26iopara(GetDlgItem(hWnd, IDC_SND26IO), b);                          setsnd26io(hWnd, IDC_SND26IO, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
Line 378  static void snd26cmdjmp(HWND hWnd) { Line 385  static void snd26cmdjmp(HWND hWnd) {
         }          }
 }  }
   
 static void snd26drawjmp(HWND hWnd, HDC hdc) {  
   
         BITMAPINFO      *bmi;  
         HBITMAP         hbmp;  
         BYTE            *image;  
         int                     align;  
         BYTE            *imgbtm;  
         HDC                     hmdc;  
   
         bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&snd26dip), "bitmap");  
         if (bmi == NULL) {  
                 return;  
         }  
         bit2res_sethead(bmi, &snd26dip);  
         hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS,  
                                                                                                 (void **)&image, NULL, 0);  
         bit2res_setdata(image, &snd26dip);  
         align = ((snd26dip.x + 7) / 2) & ~3;  
         imgbtm = image + align * (snd26dip.y - 1);  
         setsnd26iodip(imgbtm, 15, 1, align, snd26);  
         setsnd26intdip(imgbtm, 9, 1, align, snd26);  
         setsnd26romdip(imgbtm, 2, 1, align, snd26);  
         hmdc = CreateCompatibleDC(hdc);  
         SelectObject(hmdc, hbmp);  
         BitBlt(hdc, 0, 0, snd26dip.x, snd26dip.y, hmdc, 0, 0, SRCCOPY);  
         DeleteDC(hmdc);  
         DeleteObject(hbmp);  
         _MFREE(bmi);  
 }  
   
 static LRESULT CALLBACK Snd26optDlgProc(HWND hWnd, UINT msg,  static LRESULT CALLBACK Snd26optDlgProc(HWND hWnd, UINT msg,
                                                                                                         WPARAM wp, LPARAM lp) {                                                                                                          WPARAM wp, LPARAM lp) {
   
Line 416  static LRESULT CALLBACK Snd26optDlgProc( Line 393  static LRESULT CALLBACK Snd26optDlgProc(
         switch(msg) {          switch(msg) {
                 case WM_INITDIALOG:                  case WM_INITDIALOG:
                         snd26 = np2cfg.snd26opt;                          snd26 = np2cfg.snd26opt;
                         SETnLISTSTR(hWnd, IDC_SND26IO, sndioport, 2);                          dlgs_setcbitem(hWnd, IDC_SND26IO, cpIO26, NELEMENTS(cpIO26));
                         setsnd26iopara(GetDlgItem(hWnd, IDC_SND26IO), snd26);                          dlgs_setcbitem(hWnd, IDC_SND26INT, cpInt26, NELEMENTS(cpInt26));
                         SETLISTSTR(hWnd, IDC_SND26INT, sndinterrupt);                          dlgs_setcbitem(hWnd, IDC_SND26ROM, cpAddr, NELEMENTS(cpAddr));
                         setsnd26intpara(GetDlgItem(hWnd, IDC_SND26INT), snd26);                          snd26set(hWnd, snd26);
                         SETLISTSTR(hWnd, IDC_SND26ROM, sndromaddr);  
                         setsnd26rompara(GetDlgItem(hWnd, IDC_SND26ROM), snd26);  
                         sub = GetDlgItem(hWnd, IDC_SND26JMP);                          sub = GetDlgItem(hWnd, IDC_SND26JMP);
                         SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +                          SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +
                                                         (GetWindowLong(sub, GWL_STYLE) & (~SS_TYPEMASK)));                                                          (GetWindowLong(sub, GWL_STYLE) & (~SS_TYPEMASK)));
                         return(TRUE);                          return(TRUE);
   
                 case WM_COMMAND:                  case WM_COMMAND:
                         switch (LOWORD(wp)) {                          switch(LOWORD(wp)) {
                                 case IDC_SND26IO:                                  case IDC_SND26IO:
                                         set26jmp(hWnd, getsnd26io(hWnd, IDC_SND26IO), 0x10);                                          set26jmp(hWnd, getsnd26io(hWnd, IDC_SND26IO), 0x10);
                                         break;                                          break;
Line 443  static LRESULT CALLBACK Snd26optDlgProc( Line 418  static LRESULT CALLBACK Snd26optDlgProc(
   
                                 case IDC_SND26DEF:                                  case IDC_SND26DEF:
                                         snd26 = 0xd1;                                          snd26 = 0xd1;
                                         setsnd26iopara(GetDlgItem(hWnd, IDC_SND26IO), snd26);                                          snd26set(hWnd, snd26);
                                         setsnd26intpara(GetDlgItem(hWnd, IDC_SND26INT), snd26);  
                                         setsnd26rompara(GetDlgItem(hWnd, IDC_SND26ROM), snd26);  
                                         InvalidateRect(GetDlgItem(hWnd, IDC_SND26JMP), NULL, TRUE);                                          InvalidateRect(GetDlgItem(hWnd, IDC_SND26JMP), NULL, TRUE);
                                         break;                                          break;
   
Line 467  static LRESULT CALLBACK Snd26optDlgProc( Line 440  static LRESULT CALLBACK Snd26optDlgProc(
   
                 case WM_DRAWITEM:                  case WM_DRAWITEM:
                         if (LOWORD(wp) == IDC_SND26JMP) {                          if (LOWORD(wp) == IDC_SND26JMP) {
                                 snd26drawjmp(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC);                                  dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC,
                                                                                                   dipswbmp_getsnd26(snd26));
                         }                          }
                         return(FALSE);                          break;
         }          }
         return(FALSE);          return(FALSE);
 }  }
Line 477  static LRESULT CALLBACK Snd26optDlgProc( Line 451  static LRESULT CALLBACK Snd26optDlgProc(
   
 // ---- PC-9801-86  // ---- PC-9801-86
   
 static  BYTE    snd86 = 0;  static  UINT8   snd86 = 0;
   
 static const UINT snd86paranum[4] = {0, 1, 3, 2};  
   
   
   static void setsnd86io(HWND hWnd, UINT uID, UINT8 cValue)
 static void setsnd86iopara(HWND hWnd, BYTE value) {  {
           dlgs_setcbcur(hWnd, uID, cValue & 0x01);
         SendMessage(hWnd, CB_SETCURSEL, (WPARAM)((~value) & 1), (LPARAM)0);  
 }  }
   
 static BYTE getsnd86io(HWND hWnd, WORD res) {  static UINT8 getsnd86io(HWND hWnd, UINT uID)
   {
         char    work[8];          return dlgs_getcbcur(hWnd, uID, 0x01);
   
         GetDlgItemText(hWnd, res, work, sizeof(work));  
         return((BYTE)((work[1] == '1')?0x01:0x00));  
 }  }
   
 static void setsnd86intpara(HWND hWnd, BYTE value) {  static void setsnd86int(HWND hWnd, UINT uID, UINT8 cValue)
   {
         SendMessage(hWnd, CB_SETCURSEL,          dlgs_setcbcur(hWnd, uID, cValue & 0x0c);
                                                 (WPARAM)snd86paranum[(value >> 2) & 3], (LPARAM)0);  
 }  }
   
 static BYTE getsnd86int(HWND hWnd) {  static UINT8 getsnd86int(HWND hWnd, INT uID)
   {
         char    work[8];          return dlgs_getcbcur(hWnd, uID, 0x0c);
   
         Edit_GetText(hWnd, work, sizeof(work));  
         switch(work[3]) {  
                 case '0':  
                         return(0x00);  
   
                 case '4':  
                         return(0x04);  
   
                 case '6':  
                         return(0x08);  
         }  
         return(0x0c);  
 }  }
   
 static void setsnd86idpara(HWND hWnd, BYTE value) {  static void setsnd86id(HWND hWnd, UINT uID, UINT8 cValue)
   {
         SendMessage(hWnd, CB_SETCURSEL, (WPARAM)(((~value) >> 5) & 7), (LPARAM)0);          dlgs_setcbcur(hWnd, uID, cValue & 0xe0);
 }  }
   
 static BYTE getsnd86id(HWND hWnd) {  static UINT8 getsnd86id(HWND hWnd, UINT uID)
   {
         char    work[8];          return dlgs_getcbcur(hWnd, uID, 0x00);
   
         Edit_GetText(hWnd, work, sizeof(work));  
         return((~work[0] & 7) << 5);  
 }  }
   
 static void set86jmp(HWND hWnd, BYTE value, BYTE bit) {  static void set86jmp(HWND hWnd, UINT8 value, UINT8 bit) {
   
         if ((snd86 ^ value) & bit) {          if ((snd86 ^ value) & bit) {
                 snd86 &= ~bit;                  snd86 &= ~bit;
Line 563  static void snd86cmddipsw(HWND hWnd) { Line 513  static void snd86cmddipsw(HWND hWnd) {
         snd86 ^= (1 << p.x);          snd86 ^= (1 << p.x);
         switch(p.x) {          switch(p.x) {
                 case 0:                  case 0:
                         setsnd86iopara(GetDlgItem(hWnd, IDC_SND86IO), snd86);                          setsnd86io(hWnd, IDC_SND86IO, snd86);
                         break;                          break;
   
                 case 1:                  case 1:
                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86ROM), snd86 & 2);                          SetDlgItemCheck(hWnd, IDC_SND86ROM, snd86 & 2);
                         break;                          break;
   
                 case 2:                  case 2:
                 case 3:                  case 3:
                         setsnd86intpara(GetDlgItem(hWnd, IDC_SND86INTA), snd86);                          setsnd86int(hWnd, IDC_SND86INTA, snd86);
                         break;                          break;
   
                 case 4:                  case 4:
                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86INT), snd86 & 0x10);                          SetDlgItemCheck(hWnd, IDC_SND86INT, snd86 & 0x10);
                         break;                          break;
   
                 case 5:                  case 5:
                 case 6:                  case 6:
                 case 7:                  case 7:
                         setsnd86idpara(GetDlgItem(hWnd, IDC_SND86ID), snd86);                          setsnd86id(hWnd, IDC_SND86ID, snd86);
                         break;                          break;
         }          }
         InvalidateRect(GetDlgItem(hWnd, IDC_SND86DIP), NULL, TRUE);          InvalidateRect(GetDlgItem(hWnd, IDC_SND86DIP), NULL, TRUE);
 }  }
   
 static void snd86drawdipsw(HWND hWnd, HDC hdc) {  
   
         BITMAPINFO      *bmi;  
         HBITMAP         hbmp;  
         BYTE            *image;  
         int                     align;  
         BYTE            *imgbtm;  
         HDC                     hmdc;  
         int                     i;  
         int                     x, y, yl;  
   
         bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&snd86dip), "bitmap");  
         if (bmi == NULL) {  
                 return;  
         }  
         bit2res_sethead(bmi, &snd86dip);  
         hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS,  
                                                                                                 (void **)&image, NULL, 0);  
         bit2res_setdata(image, &snd86dip);  
         align = ((snd86dip.x + 7) / 2) & ~3;  
         imgbtm = image + align * (snd86dip.y - 1);  
         for (i=0; i<8; i++) {  
                 x = i * 8 + 17;  
                 y = (snd86 & (1 << i))?16:9;  
                 for (yl=0; yl<7; yl++) {  
                         dlgs_linex(imgbtm, x, y++, 6, align, 3);  
                 }  
         }  
         hmdc = CreateCompatibleDC(hdc);  
         SelectObject(hmdc, hbmp);  
         BitBlt(hdc, 0, 0, snd86dip.x, snd86dip.y, hmdc, 0, 0, SRCCOPY);  
         DeleteDC(hmdc);  
         DeleteObject(hbmp);  
         _MFREE(bmi);  
 }  
   
 static LRESULT CALLBACK Snd86optDlgProc(HWND hWnd, UINT msg,  static LRESULT CALLBACK Snd86optDlgProc(HWND hWnd, UINT msg,
                                                                                                         WPARAM wp, LPARAM lp) {                                                                                                          WPARAM wp, LPARAM lp) {
   
Line 632  static LRESULT CALLBACK Snd86optDlgProc( Line 546  static LRESULT CALLBACK Snd86optDlgProc(
         switch(msg) {          switch(msg) {
                 case WM_INITDIALOG:                  case WM_INITDIALOG:
                         snd86 = np2cfg.snd86opt;                          snd86 = np2cfg.snd86opt;
                         SETnLISTSTR(hWnd, IDC_SND86IO, sndioport+1, 2);                          dlgs_setcbitem(hWnd, IDC_SND86IO, cpIO86, NELEMENTS(cpIO86));
                         setsnd86iopara(GetDlgItem(hWnd, IDC_SND86IO), snd86);                          setsnd86io(hWnd, IDC_SND86IO, snd86);
                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86INT), snd86 & 0x10);                          SetDlgItemCheck(hWnd, IDC_SND86INT, snd86 & 0x10);
                         SETLISTSTR(hWnd, IDC_SND86INTA, sndinterrupt);                          dlgs_setcbitem(hWnd, IDC_SND86INTA, cpInt86, NELEMENTS(cpInt86));
                         setsnd86intpara(GetDlgItem(hWnd, IDC_SND86INTA), snd86);                          setsnd86int(hWnd, IDC_SND86INTA, snd86);
                         SETLISTSTR(hWnd, IDC_SND86ID, sndid);                          dlgs_setcbitem(hWnd, IDC_SND86ID, cpID, NELEMENTS(cpID));
                         setsnd86idpara(GetDlgItem(hWnd, IDC_SND86ID), snd86);                          setsnd86id(hWnd, IDC_SND86ID, snd86);
                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86ROM), snd86 & 2);                          SetDlgItemCheck(hWnd, IDC_SND86ROM, snd86 & 2);
   
                         sub = GetDlgItem(hWnd, IDC_SND86DIP);                          sub = GetDlgItem(hWnd, IDC_SND86DIP);
                         SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +                          SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +
Line 647  static LRESULT CALLBACK Snd86optDlgProc( Line 561  static LRESULT CALLBACK Snd86optDlgProc(
                         return(TRUE);                          return(TRUE);
   
                 case WM_COMMAND:                  case WM_COMMAND:
                         switch (LOWORD(wp)) {                          switch(LOWORD(wp)) {
                                 case IDC_SND86IO:                                  case IDC_SND86IO:
                                         set86jmp(hWnd, getsnd86io(hWnd, IDC_SND86IO), 0x01);                                          set86jmp(hWnd, getsnd86io(hWnd, IDC_SND86IO), 0x01);
                                         break;                                          break;
   
                                 case IDC_SND86INT:                                  case IDC_SND86INT:
                                         set86jmp(hWnd,                                          set86jmp(hWnd,
                                                 ((Button_GetCheck(GetDlgItem(hWnd, IDC_SND86INT)))                                                          (GetDlgItemCheck(hWnd, IDC_SND86INT))?0x10:0x00,
                                                                                                                 ?0x10:0x00), 0x10);                                                                                                                                                  0x10);
                                         break;                                          break;
   
                                 case IDC_SND86INTA:                                  case IDC_SND86INTA:
                                         set86jmp(hWnd,                                          set86jmp(hWnd, getsnd86int(hWnd, IDC_SND86INTA), 0x0c);
                                                 getsnd86int(GetDlgItem(hWnd, IDC_SND86INTA)), 0x0c);  
                                         break;                                          break;
   
                                 case IDC_SND86ROM:                                  case IDC_SND86ROM:
                                         set86jmp(hWnd,                                          set86jmp(hWnd,
                                                 ((Button_GetCheck(GetDlgItem(hWnd, IDC_SND86ROM)))                                                          (GetDlgItemCheck(hWnd, IDC_SND86ROM))?0x02:0x00,
                                                                                                                 ?0x02:0x00), 0x02);                                                                                                                                                  0x02);
                                         break;                                          break;
   
                                 case IDC_SND86ID:                                  case IDC_SND86ID:
                                         set86jmp(hWnd,                                          set86jmp(hWnd, getsnd86id(hWnd, IDC_SND86ID), 0xe0);
                                                 getsnd86id(GetDlgItem(hWnd, IDC_SND86ID)), 0xe0);  
                                         break;                                          break;
   
                                 case IDC_SND86DEF:                                  case IDC_SND86DEF:
                                         snd86 = 0x7f;                                          snd86 = 0x7f;
                                         setsnd86iopara(GetDlgItem(hWnd, IDC_SND86IO), snd86);                                          setsnd86io(hWnd, IDC_SND86IO, snd86);
                                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86INT), TRUE);                                          SetDlgItemCheck(hWnd, IDC_SND86INT, TRUE);
                                         setsnd86intpara(GetDlgItem(hWnd, IDC_SND86INTA), snd86);                                          setsnd86int(hWnd, IDC_SND86INTA, snd86);
                                         setsnd86idpara(GetDlgItem(hWnd, IDC_SND86ID), snd86);                                          setsnd86id(hWnd, IDC_SND86ID, snd86);
                                         Button_SetCheck(GetDlgItem(hWnd, IDC_SND86ROM), TRUE);                                          SetDlgItemCheck(hWnd, IDC_SND86ROM, TRUE);
                                         InvalidateRect(GetDlgItem(hWnd, IDC_SND86DIP), NULL, TRUE);                                          InvalidateRect(GetDlgItem(hWnd, IDC_SND86DIP), NULL, TRUE);
                                         break;                                          break;
   
Line 698  static LRESULT CALLBACK Snd86optDlgProc( Line 614  static LRESULT CALLBACK Snd86optDlgProc(
   
                 case WM_DRAWITEM:                  case WM_DRAWITEM:
                         if (LOWORD(wp) == IDC_SND86DIP) {                          if (LOWORD(wp) == IDC_SND86DIP) {
                                 snd86drawdipsw(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC);                                  dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC,
                                                                                                   dipswbmp_getsnd86(snd86));
                         }                          }
                         return(FALSE);                          return(FALSE);
         }          }
Line 708  static LRESULT CALLBACK Snd86optDlgProc( Line 625  static LRESULT CALLBACK Snd86optDlgProc(
   
 // ---- Speak board  // ---- Speak board
   
 static  BYTE    spb = 0;  static  UINT8   spb = 0;
 static  BYTE    spbvrc = 0;  static  UINT8   spbvrc = 0;
   
   
 static void setspbVRch(HWND hWnd) {  static void setspbVRch(HWND hWnd) {
   
         Button_SetCheck(GetDlgItem(hWnd, IDC_SPBVRL), spbvrc & 1);          SetDlgItemCheck(hWnd, IDC_SPBVRL, spbvrc & 1);
         Button_SetCheck(GetDlgItem(hWnd, IDC_SPBVRR), spbvrc & 2);          SetDlgItemCheck(hWnd, IDC_SPBVRR, spbvrc & 2);
 }  }
   
 static void spbcreate(HWND hWnd) {  static void spbcreate(HWND hWnd)
   {
         HWND    sub;          HWND    sub;
   
         spb = np2cfg.spbopt;          spb = np2cfg.spbopt;
         SETnLISTSTR(hWnd, IDC_SPBIO, sndioport, 2);  
         setsnd26iopara(GetDlgItem(hWnd, IDC_SPBIO), spb);          dlgs_setcbitem(hWnd, IDC_SPBIO, cpIO26, NELEMENTS(cpIO26));
         SETLISTSTR(hWnd, IDC_SPBINT, sndinterrupt);          setsnd26io(hWnd, IDC_SPBIO, spb);
         setsnd26intpara(GetDlgItem(hWnd, IDC_SPBINT), spb);          dlgs_setcbitem(hWnd, IDC_SPBINT, cpInt26, NELEMENTS(cpInt26));
         SETLISTSTR(hWnd, IDC_SPBROM, sndromaddr);          setsnd26int(hWnd, IDC_SPBINT, spb);
         setsnd26rompara(GetDlgItem(hWnd, IDC_SPBROM), spb);          dlgs_setcbitem(hWnd, IDC_SPBROM, cpAddr, NELEMENTS(cpAddr));
           setsnd26rom(hWnd, IDC_SPBROM, spb);
         spbvrc = np2cfg.spb_vrc;                                                                // ver0.30          spbvrc = np2cfg.spb_vrc;                                                                // ver0.30
         setspbVRch(hWnd);          setspbVRch(hWnd);
         SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL, TBM_SETRANGE, TRUE,          SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL, TBM_SETRANGE, TRUE,
                                                                                                                         MAKELONG(0, 24));                                                                                                                          MAKELONG(0, 24));
         SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL, TBM_SETPOS, TRUE,          SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL, TBM_SETPOS, TRUE,
                                                                                                                         np2cfg.spb_vrl);                                                                                                                          np2cfg.spb_vrl);
         Button_SetCheck(GetDlgItem(hWnd, IDC_SPBREVERSE), np2cfg.spb_x);          SetDlgItemCheck(hWnd, IDC_SPBREVERSE, np2cfg.spb_x);
   
         sub = GetDlgItem(hWnd, IDC_SPBJMP);          sub = GetDlgItem(hWnd, IDC_SPBJMP);
         SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +          SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW +
Line 748  static void spbcmdjmp(HWND hWnd) { Line 665  static void spbcmdjmp(HWND hWnd) {
         RECT    rect2;          RECT    rect2;
         POINT   p;          POINT   p;
         BOOL    redraw;          BOOL    redraw;
         BYTE    b;          UINT8   b;
         BYTE    bit;          UINT8   bit;
   
         GetWindowRect(GetDlgItem(hWnd, IDC_SPBJMP), &rect1);          GetWindowRect(GetDlgItem(hWnd, IDC_SPBJMP), &rect1);
         GetClientRect(GetDlgItem(hWnd, IDC_SPBJMP), &rect2);          GetClientRect(GetDlgItem(hWnd, IDC_SPBJMP), &rect2);
Line 780  static void spbcmdjmp(HWND hWnd) { Line 697  static void spbcmdjmp(HWND hWnd) {
                 }                  }
                 if (spb != b) {                  if (spb != b) {
                         spb = b;                          spb = b;
                         setsnd26intpara(GetDlgItem(hWnd, IDC_SPBINT), b);                          setsnd26int(hWnd, IDC_SPBINT, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
Line 789  static void spbcmdjmp(HWND hWnd) { Line 706  static void spbcmdjmp(HWND hWnd) {
                 redraw = TRUE;                  redraw = TRUE;
         }          }
         else if ((p.x >= 10) && (p.x < 12)) {          else if ((p.x >= 10) && (p.x < 12)) {
                 b = (BYTE)((p.x - 10) << 4);                  b = (UINT8)((p.x - 10) << 4);
                 if ((spb ^ b) & 0x10) {                  if ((spb ^ b) & 0x10) {
                         spb &= ~0x10;                          spb &= ~0x10;
                         spb |= b;                          spb |= b;
                         setsnd26iopara(GetDlgItem(hWnd, IDC_SPBIO), b);                          setsnd26io(hWnd, IDC_SPBIO, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
         else if ((p.x >= 14) && (p.x < 19)) {          else if ((p.x >= 14) && (p.x < 19)) {
                 b = (BYTE)(p.x - 14);                  b = (UINT8)(p.x - 14);
                 if ((spb ^ b) & 7) {                  if ((spb ^ b) & 7) {
                         spb &= ~0x07;                          spb &= ~0x07;
                         spb |= b;                          spb |= b;
                         setsnd26rompara(GetDlgItem(hWnd, IDC_SPBROM), b);                          setsnd26rom(hWnd, IDC_SPBROM, b);
                         redraw = TRUE;                          redraw = TRUE;
                 }                  }
         }          }
         else if ((p.x >= 21) && (p.x < 24)) {          else if ((p.x >= 21) && (p.x < 24)) {
                 spbvrc ^= (BYTE)(3 - p.y);                  spbvrc ^= (UINT8)(3 - p.y);
                 setspbVRch(hWnd);                  setspbVRch(hWnd);
                 redraw = TRUE;                  redraw = TRUE;
         }          }
Line 816  static void spbcmdjmp(HWND hWnd) { Line 733  static void spbcmdjmp(HWND hWnd) {
         }          }
 }  }
   
 static void spbdrawjumper(HWND hWnd, HDC hdc) {  static void setspbjmp(HWND hWnd, UINT8 value, UINT8 bit) {
   
         BITMAPINFO      *bmi;  
         HBITMAP         hbmp;  
         BYTE            *image;  
         int                     align;  
         BYTE            *imgbtm;  
         HDC                     hmdc;  
   
         bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&spbdip), "bitmap");  
         if (bmi == NULL) {  
                 return;  
         }  
         bit2res_sethead(bmi, &spbdip);  
         hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS,  
                                                                                                 (void **)&image, NULL, 0);  
         bit2res_setdata(image, &spbdip);  
         align = ((spbdip.x + 7) / 2) & ~3;  
         imgbtm = image + align * (spbdip.y - 1);  
         setsnd26intdip(imgbtm, 2, 1, align, spb);  
         setsnd26iodip(imgbtm, 10, 1, align, spb);  
         setsnd26romdip(imgbtm, 14, 1, align, spb);  
         if (spb & 0x20) {  
                 dlgs_setjumpery(imgbtm, 7, 1, align);  
         }  
         dlgs_setjumperx(imgbtm, ((spbvrc&2)?21:22), 1, align);  
         dlgs_setjumperx(imgbtm, ((spbvrc&1)?21:22), 2, align);  
         hmdc = CreateCompatibleDC(hdc);  
         SelectObject(hmdc, hbmp);  
         BitBlt(hdc, 0, 0, spbdip.x, spbdip.y, hmdc, 0, 0, SRCCOPY);  
         DeleteDC(hmdc);  
         DeleteObject(hbmp);  
         _MFREE(bmi);  
 }  
   
 static void setspbjmp(HWND hWnd, BYTE value, BYTE bit) {  
   
         if ((spb ^ value) & bit) {          if ((spb ^ value) & bit) {
                 spb &= ~bit;                  spb &= ~bit;
Line 860  static void setspbjmp(HWND hWnd, BYTE va Line 742  static void setspbjmp(HWND hWnd, BYTE va
         }          }
 }  }
   
 static BYTE getspbVRch(HWND hWnd) {  static UINT8 getspbVRch(HWND hWnd) {
   
         BYTE    ret;          UINT8   ret;
   
         ret = 0;          ret = 0;
         if (Button_GetCheck(GetDlgItem(hWnd, IDC_SPBVRL))) {          if (GetDlgItemCheck(hWnd, IDC_SPBVRL)) {
                 ret++;                  ret += 1;
         }          }
         if (Button_GetCheck(GetDlgItem(hWnd, IDC_SPBVRR))) {          if (GetDlgItemCheck(hWnd, IDC_SPBVRR)) {
                 ret += 2;                  ret += 2;
         }          }
         return(ret);          return(ret);
Line 876  static BYTE getspbVRch(HWND hWnd) { Line 758  static BYTE getspbVRch(HWND hWnd) {
   
 static LRESULT CALLBACK SPBoptDlgProc(HWND hWnd, UINT msg,  static LRESULT CALLBACK SPBoptDlgProc(HWND hWnd, UINT msg,
                                                                                                         WPARAM wp, LPARAM lp) {                                                                                                          WPARAM wp, LPARAM lp) {
         BYTE    b;          UINT8   b;
         UINT    update;          UINT    update;
   
         switch(msg) {          switch(msg) {
Line 885  static LRESULT CALLBACK SPBoptDlgProc(HW Line 767  static LRESULT CALLBACK SPBoptDlgProc(HW
                         return(TRUE);                          return(TRUE);
   
                 case WM_COMMAND:                  case WM_COMMAND:
                         switch (LOWORD(wp)) {                          switch(LOWORD(wp)) {
                                 case IDC_SPBIO:                                  case IDC_SPBIO:
                                         setspbjmp(hWnd, getsnd26io(hWnd, IDC_SPBIO), 0x10);                                          setspbjmp(hWnd, getsnd26io(hWnd, IDC_SPBIO), 0x10);
                                         break;                                          break;
Line 900  static LRESULT CALLBACK SPBoptDlgProc(HW Line 782  static LRESULT CALLBACK SPBoptDlgProc(HW
   
                                 case IDC_SPBDEF:                                  case IDC_SPBDEF:
                                         spb = 0xd1;                                          spb = 0xd1;
                                         setsnd26iopara(GetDlgItem(hWnd, IDC_SPBIO), spb);                                          setsnd26io(hWnd, IDC_SPBIO, spb);
                                         setsnd26intpara(GetDlgItem(hWnd, IDC_SPBINT), spb);                                          setsnd26int(hWnd, IDC_SPBINT, spb);
                                         setsnd26rompara(GetDlgItem(hWnd, IDC_SPBROM), spb);                                          setsnd26rom(hWnd, IDC_SPBROM, spb);
                                         spbvrc = 0;                                          spbvrc = 0;
                                         setspbVRch(hWnd);                                          setspbVRch(hWnd);
                                         InvalidateRect(GetDlgItem(hWnd, IDC_SPBJMP), NULL, TRUE);                                          InvalidateRect(GetDlgItem(hWnd, IDC_SPBJMP), NULL, TRUE);
Line 935  static LRESULT CALLBACK SPBoptDlgProc(HW Line 817  static LRESULT CALLBACK SPBoptDlgProc(HW
                                         np2cfg.spb_vrc = spbvrc;                                          np2cfg.spb_vrc = spbvrc;
                                         update |= SYS_UPDATECFG;                                          update |= SYS_UPDATECFG;
                                 }                                  }
                                 b = (BYTE)SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL,                                  b = (UINT8)SendDlgItemMessage(hWnd, IDC_SPBVRLEVEL,
                                                                                                                         TBM_GETPOS, 0, 0);                                                                                                                          TBM_GETPOS, 0, 0);
                                 if (np2cfg.spb_vrl != b) {                                  if (np2cfg.spb_vrl != b) {
                                         np2cfg.spb_vrl = b;                                          np2cfg.spb_vrl = b;
                                         update |= SYS_UPDATECFG;                                          update |= SYS_UPDATECFG;
                                 }                                  }
                                 opngen_setVR(np2cfg.spb_vrc, np2cfg.spb_vrl);                                  opngen_setVR(np2cfg.spb_vrc, np2cfg.spb_vrl);
                                 b = (BYTE)(Button_GetCheck(GetDlgItem(hWnd, IDC_SPBREVERSE))?                                                                                                                                                   1:0);                                  b = (UINT8)GetDlgItemCheck(hWnd, IDC_SPBREVERSE);
                                 if (np2cfg.spb_x != b) {                                  if (np2cfg.spb_x != b) {
                                         np2cfg.spb_x = b;                                          np2cfg.spb_x = b;
                                         update |= SYS_UPDATECFG;                                          update |= SYS_UPDATECFG;
Line 954  static LRESULT CALLBACK SPBoptDlgProc(HW Line 836  static LRESULT CALLBACK SPBoptDlgProc(HW
   
                 case WM_DRAWITEM:                  case WM_DRAWITEM:
                         if (LOWORD(wp) == IDC_SPBJMP) {                          if (LOWORD(wp) == IDC_SPBJMP) {
                                 spbdrawjumper(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC);                                  dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC,
                                                                                           dipswbmp_getsndspb(spb, spbvrc));
                         }                          }
                         return(FALSE);                          return(FALSE);
         }          }
Line 967  static LRESULT CALLBACK SPBoptDlgProc(HW Line 850  static LRESULT CALLBACK SPBoptDlgProc(HW
 typedef struct {  typedef struct {
         UINT16  res;          UINT16  res;
         UINT16  bit;          UINT16  bit;
         BYTE    *ptr;          UINT8   *ptr;
 } CHECKTBL;  } CHECKTBL;
   
 static const CHECKTBL pad1opt[13] = {  static const CHECKTBL pad1opt[13] = {
Line 988  static const CHECKTBL pad1opt[13] = { Line 871  static const CHECKTBL pad1opt[13] = {
   
 static void checkbtnres_load(HWND hWnd, const CHECKTBL *item) {  static void checkbtnres_load(HWND hWnd, const CHECKTBL *item) {
   
         Button_SetCheck(GetDlgItem(hWnd, item->res),          SetDlgItemCheck(hWnd, item->res, (*(item->ptr)) & (1 << (item->bit)));
                                                                 (*(item->ptr)) & (1 << (item->bit)));  
 }  }
   
 static BYTE checkbtnres_store(HWND hWnd, const CHECKTBL *item) {  static UINT8 checkbtnres_store(HWND hWnd, const CHECKTBL *item) {
   
         BYTE    value;          UINT8   value;
         BYTE    bit;          UINT8   bit;
         BYTE    ret;          UINT8   ret;
   
         bit = 1 << (item->bit);          bit = 1 << (item->bit);
         value = ((Button_GetCheck(GetDlgItem(hWnd, item->res)))?0xff:0) & bit;          value = GetDlgItemCheck(hWnd, item->res)?bit:0;
         ret = ((*(item->ptr)) ^ value) & bit;          ret = ((*(item->ptr)) ^ value) & bit;
         if (ret) {          if (ret) {
                 (*(item->ptr)) ^= bit;                  (*(item->ptr)) ^= bit;
Line 1011  static LRESULT CALLBACK PAD1optDlgProc(H Line 893  static LRESULT CALLBACK PAD1optDlgProc(H
                                                                                                         WPARAM wp, LPARAM lp) {                                                                                                          WPARAM wp, LPARAM lp) {
   
         int             i;          int             i;
         BYTE    renewal;          UINT8   renewal;
   
         switch(msg) {          switch(msg) {
                 case WM_INITDIALOG:                  case WM_INITDIALOG:
Line 1019  static LRESULT CALLBACK PAD1optDlgProc(H Line 901  static LRESULT CALLBACK PAD1optDlgProc(H
                                 checkbtnres_load(hWnd, pad1opt + i);                                  checkbtnres_load(hWnd, pad1opt + i);
                         }                          }
                         if (np2oscfg.JOYPAD1 & 2) {                          if (np2oscfg.JOYPAD1 & 2) {
                                 Button_Enable(GetDlgItem(hWnd, IDC_JOYPAD1), FALSE);                                  EnableWindow(GetDlgItem(hWnd, IDC_JOYPAD1), FALSE);
                         }                          }
                         return(TRUE);                          return(TRUE);
   
Line 1030  static LRESULT CALLBACK PAD1optDlgProc(H Line 912  static LRESULT CALLBACK PAD1optDlgProc(H
                                         renewal |= checkbtnres_store(hWnd, pad1opt + i);                                          renewal |= checkbtnres_store(hWnd, pad1opt + i);
                                 }                                  }
                                 if (renewal) {                                  if (renewal) {
                                         joy_init();                                          joymng_initialize();
                                         sysmng_update(SYS_UPDATECFG);                                          sysmng_update(SYS_UPDATECFG);
                                 }                                  }
                                 return(TRUE);                                  return(TRUE);
Line 1043  static LRESULT CALLBACK PAD1optDlgProc(H Line 925  static LRESULT CALLBACK PAD1optDlgProc(H
   
 // ----  // ----
   
 void dialog_sndopt(HWND hWnd) {  void dialog_sndopt(HWND hWnd)
   {
         HINSTANCE               hinst;          HINSTANCE               hInstance;
         PROPSHEETPAGE   psp;          PROPSHEETPAGE   psp;
         PROPSHEETHEADER psh;          PROPSHEETHEADER psh;
         HPROPSHEETPAGE  hpsp[6];                                                                                // ver0.29          HPROPSHEETPAGE  hpsp[6];
           TCHAR                   szTitle[128];
   
         hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);          hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
   
         ZeroMemory(&psp, sizeof(psp));          ZeroMemory(&psp, sizeof(psp));
         psp.dwSize = sizeof(PROPSHEETPAGE);          psp.dwSize = sizeof(PROPSHEETPAGE);
         psp.dwFlags = PSP_DEFAULT;          psp.dwFlags = PSP_DEFAULT;
         psp.hInstance = hinst;          psp.hInstance = hInstance;
   
         psp.pszTemplate = MAKEINTRESOURCE(IDD_SNDMIX);          psp.pszTemplate = MAKEINTRESOURCE(IDD_SNDMIX);
         psp.pfnDlgProc = (DLGPROC)SndmixDlgProc;          psp.pfnDlgProc = (DLGPROC)SndmixDlgProc;
Line 1081  void dialog_sndopt(HWND hWnd) { Line 964  void dialog_sndopt(HWND hWnd) {
         psp.pfnDlgProc = (DLGPROC)PAD1optDlgProc;          psp.pfnDlgProc = (DLGPROC)PAD1optDlgProc;
         hpsp[5] = CreatePropertySheetPage(&psp);          hpsp[5] = CreatePropertySheetPage(&psp);
   
           loadstringresource(IDS_SOUNDOPTION, szTitle, NELEMENTS(szTitle));
   
         ZeroMemory(&psh, sizeof(psh));          ZeroMemory(&psh, sizeof(psh));
         psh.dwSize = sizeof(PROPSHEETHEADER);          psh.dwSize = sizeof(PROPSHEETHEADER);
         psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEHICON | PSH_USECALLBACK;          psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEHICON | PSH_USECALLBACK;
         psh.hwndParent = hWnd;          psh.hwndParent = hWnd;
         psh.hInstance = hinst;          psh.hInstance = hInstance;
         psh.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON2));          psh.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2));
         psh.nPages = 6;          psh.nPages = 6;
         psh.phpage = hpsp;          psh.phpage = hpsp;
         psh.pszCaption = str_sndopt;          psh.pszCaption = szTitle;
         psh.pfnCallback = np2class_propetysheet;          psh.pfnCallback = np2class_propetysheet;
         PropertySheet(&psh);          PropertySheet(&psh);
         InvalidateRect(hWnd, NULL, TRUE);          InvalidateRect(hWnd, NULL, TRUE);
Line 1098  void dialog_sndopt(HWND hWnd) { Line 983  void dialog_sndopt(HWND hWnd) {
   
 // ----  // ----
   
 static const char s98ui_file[] = "NP2_%04d.S98";  #if defined(SUPPORT_S98)
 static const char s98ui_title[] = "Save as S98 log";  
 static const char s98ui_ext[] = "s98";  
 static const char s98ui_filter[] = "S98 log (*.s98)\0*.s98\0";  
 static const FILESEL s98ui = {s98ui_title, s98ui_ext, s98ui_filter, 1};  
   
 void dialog_s98(HWND hWnd) {  
   
         BOOL    check;  static const FSPARAM fpS98 =
         char    path[MAX_PATH];  {
           MAKEINTRESOURCE(IDS_S98TITLE),
           MAKEINTRESOURCE(IDS_S98EXT),
           MAKEINTRESOURCE(IDS_S98FILTER),
           1
   };
   static const OEMCHAR szS98File[] = OEMTEXT("NP2_####.S98");
   
   void dialog_s98(HWND hWnd)
   {
           BOOL    bCheck;
           OEMCHAR szPath[MAX_PATH];
   
         S98_close();          S98_close();
         check = FALSE;          bCheck = FALSE;
         file_cpyname(path, bmpfilefolder, sizeof(path));          file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath));
         file_cutname(path);          file_cutname(szPath);
         file_catname(path, s98ui_file, sizeof(path));          file_catname(szPath, szS98File, NELEMENTS(szPath));
         if ((dlgs_selectwritenum(hWnd, &s98ui, path, sizeof(path))) &&          if ((dlgs_createfilenum(hWnd, &fpS98, szPath, NELEMENTS(szPath))) &&
                 (S98_open(path) == SUCCESS)) {                  (S98_open(szPath) == SUCCESS))
                 file_cpyname(bmpfilefolder, path, sizeof(bmpfilefolder));          {
                   file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder));
                   sysmng_update(SYS_UPDATEOSCFG);
                   bCheck = TRUE;
           }
           xmenu_sets98logging(bCheck);
   }
   #endif  // defined(SUPPORT_S98)
   
   
   // ----
   
   #if defined(SUPPORT_WAVEREC)
   
   static const FSPARAM fpWave =
   {
           MAKEINTRESOURCE(IDS_WAVETITLE),
           MAKEINTRESOURCE(IDS_WAVEEXT),
           MAKEINTRESOURCE(IDS_WAVEFILTER),
           1
   };
   static const OEMCHAR szWaveFile[] = OEMTEXT("NP2_####.WAV");
   
   void dialog_waverec(HWND hWnd)
   {
           UINT8   bCheck;
           OEMCHAR szPath[MAX_PATH];
   
           bCheck = FALSE;
           sound_recstop();
           file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath));
           file_cutname(szPath);
           file_catname(szPath, szWaveFile, NELEMENTS(szPath));
           if ((dlgs_createfilenum(hWnd, &fpWave, szPath, NELEMENTS(szPath))) &&
                   (sound_recstart(szPath) == SUCCESS))
           {
                   file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder));
                 sysmng_update(SYS_UPDATEOSCFG);                  sysmng_update(SYS_UPDATEOSCFG);
                 check = TRUE;                  bCheck = TRUE;
         }          }
         xmenu_sets98logging(check);          xmenu_setwaverec(bCheck);
 }  }
   #endif  // defined(SUPPORT_WAVEREC)
   

Removed from v.1.9  
changed lines
  Added in v.1.25


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