| version 1.1, 2003/10/16 17:59:01 | version 1.20, 2007/12/17 14:52:55 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
| #include        "resource.h" | #include        <prsht.h> | 
 | #include        "strres.h" | #include        "strres.h" | 
 |  | #include        "resource.h" | 
 | #include        "np2.h" | #include        "np2.h" | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "commng.h" | #include        "commng.h" | 
 | #include        "sysmng.h" | #include        "sysmng.h" | 
 |  | #include        "np2class.h" | 
 |  | #include        "dialog.h" | 
 |  | #include        "dialogs.h" | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 | #include        "pc9861k.h" | #include        "pc9861k.h" | 
| #include        "bit2res.h" | #include        "dipswbmp.h" | 
| #include        "dialog.h" |  | 
| #include        "dialogs.h" |  | 
|  | static const CBPARAM cpPort[] = | 
|  | { | 
|  | {MAKEINTRESOURCE(IDS_NONCONNECT),       COMPORT_NONE}, | 
|  | {MAKEINTRESOURCE(IDS_COM1),                     COMPORT_COM1}, | 
|  | {MAKEINTRESOURCE(IDS_COM2),                     COMPORT_COM2}, | 
|  | {MAKEINTRESOURCE(IDS_COM3),                     COMPORT_COM3}, | 
|  | {MAKEINTRESOURCE(IDS_COM4),                     COMPORT_COM4}, | 
|  | {MAKEINTRESOURCE(IDS_MIDI),                     COMPORT_MIDI}, | 
|  | }; | 
 |  |  | 
 |  | static const CBNPARAM cpChars[] = | 
 |  | { | 
 |  | {5,     0x00}, | 
 |  | {6,     0x04}, | 
 |  | {7,     0x08}, | 
 |  | {8,     0x0c}, | 
 |  | }; | 
 |  |  | 
| static const char str_none[] = "NONE"; | static const CBPARAM cpParity[] = | 
| static const char str_com1[] = "COM1"; | { | 
| static const char str_com2[] = "COM2"; | {MAKEINTRESOURCE(IDS_PARITY_NONE),  0x00}, | 
| static const char str_com3[] = "COM3"; | {MAKEINTRESOURCE(IDS_PARITY_ODD),   0x20}, | 
| static const char str_com4[] = "COM4"; | {MAKEINTRESOURCE(IDS_PARITY_EVEN),      0x30}, | 
| static const char str_midi[] = "MIDI"; | }; | 
| static const char str_odd[] = "ODD"; |  | 
| static const char str_even[] = "EVEN"; |  | 
| static const char str_one[] = "1"; |  | 
| static const char str_onehalf[] = "1.5"; |  | 
| static const char str_two[] = "2"; |  | 
|  |  | 
| static const char *rsport[] = {str_none, str_com1, str_com2, str_com3, |  | 
| str_com4, str_midi}; |  | 
| static const UINT32 rscharsize[] = {5, 6, 7, 8}; |  | 
| static const char *rsparity[] = {str_none, str_odd, str_even}; |  | 
| static const char *rsstopbit[] = {str_one, str_onehalf, str_two}; |  | 
 |  |  | 
| static const char str_seropt[] = "Serial option"; | static const CBPARAM cpSBit[] = | 
|  | { | 
|  | {MAKEINTRESOURCE(IDS_1),                    0x40}, | 
|  | {MAKEINTRESOURCE(IDS_1HALF),                0x80}, | 
|  | {MAKEINTRESOURCE(IDS_2),                        0xc0}, | 
|  | }; | 
 |  |  | 
 |  |  | 
 | #ifdef __cplusplus | #ifdef __cplusplus | 
| Line 47  extern COMMNG cm_pc9861ch2; | Line 61  extern COMMNG cm_pc9861ch2; | 
 |  |  | 
 | enum { | enum { | 
 | ID_PORT         = 0, | ID_PORT         = 0, | 
 |  |  | 
 | ID_SPEED, | ID_SPEED, | 
 | ID_CHARS, | ID_CHARS, | 
 | ID_PARITY, | ID_PARITY, | 
 | ID_SBIT, | ID_SBIT, | 
 |  |  | 
 | ID_MMAP, | ID_MMAP, | 
 | ID_MMDL, | ID_MMDL, | 
 | ID_DEFE, | ID_DEFE, | 
| Line 61  enum { | Line 77  enum { | 
 | }; | }; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| WORD    idc[ID_MAX]; | UINT16          idc[ID_MAX]; | 
| COMMNG  *cm; | COMMNG          *cm; | 
| COMCFG  *cfg; | COMCFG          *cfg; | 
| const WORD      *com_item; | const UINT16    *com_item; | 
| const WORD      *midi_item; | const UINT16    *midi_item; | 
| UINT    update; | UINT            update; | 
 | } DLGCOM_P; | } DLGCOM_P; | 
 |  |  | 
 |  |  | 
| static const WORD com1serial[8] = { | static const UINT16 com1serial[8] = { | 
 | IDC_COM1STR00, IDC_COM1STR01, IDC_COM1STR02, IDC_COM1STR03, | IDC_COM1STR00, IDC_COM1STR01, IDC_COM1STR02, IDC_COM1STR03, | 
 | IDC_COM1STR04, IDC_COM1STR05, IDC_COM1STR06, IDC_COM1STR07}; | IDC_COM1STR04, IDC_COM1STR05, IDC_COM1STR06, IDC_COM1STR07}; | 
 |  |  | 
| static const WORD com1rsmidi[3] = { | static const UINT16 com1rsmidi[3] = { | 
 | IDC_COM1STR10, IDC_COM1STR11, IDC_COM1STR12}; | IDC_COM1STR10, IDC_COM1STR11, IDC_COM1STR12}; | 
 |  |  | 
 | static const DLGCOM_P res_com1 = | static const DLGCOM_P res_com1 = | 
| Line 86  static const DLGCOM_P res_com1 = | Line 102  static const DLGCOM_P res_com1 = | 
 | com1serial, com1rsmidi, SYS_UPDATESERIAL1}; | com1serial, com1rsmidi, SYS_UPDATESERIAL1}; | 
 |  |  | 
 |  |  | 
| static const WORD com2serial[8] = { | static const UINT16 com2serial[8] = { | 
 | IDC_COM2STR00, IDC_COM2STR01, IDC_COM2STR02, IDC_COM2STR03, | IDC_COM2STR00, IDC_COM2STR01, IDC_COM2STR02, IDC_COM2STR03, | 
 | IDC_COM2STR04, IDC_COM2STR05, IDC_COM2STR06, IDC_COM2STR07}; | IDC_COM2STR04, IDC_COM2STR05, IDC_COM2STR06, IDC_COM2STR07}; | 
 |  |  | 
| static const WORD com2rsmidi[3] = { | static const UINT16 com2rsmidi[3] = { | 
 | IDC_COM2STR10, IDC_COM2STR11, IDC_COM2STR12}; | IDC_COM2STR10, IDC_COM2STR11, IDC_COM2STR12}; | 
 |  |  | 
 | static const DLGCOM_P res_com2 = | static const DLGCOM_P res_com2 = | 
| Line 102  static const DLGCOM_P res_com2 = | Line 118  static const DLGCOM_P res_com2 = | 
 | com2serial, com2rsmidi, SYS_UPDATESERIAL1}; | com2serial, com2rsmidi, SYS_UPDATESERIAL1}; | 
 |  |  | 
 |  |  | 
| static const WORD com3serial[8] = { | static const UINT16 com3serial[8] = { | 
 | IDC_COM3STR00, IDC_COM3STR01, IDC_COM3STR02, IDC_COM3STR03, | IDC_COM3STR00, IDC_COM3STR01, IDC_COM3STR02, IDC_COM3STR03, | 
 | IDC_COM3STR04, IDC_COM3STR05, IDC_COM3STR06, IDC_COM3STR07}; | IDC_COM3STR04, IDC_COM3STR05, IDC_COM3STR06, IDC_COM3STR07}; | 
 |  |  | 
| static const WORD com3rsmidi[3] = { | static const UINT16 com3rsmidi[3] = { | 
 | IDC_COM3STR10, IDC_COM3STR11, IDC_COM3STR12}; | IDC_COM3STR10, IDC_COM3STR11, IDC_COM3STR12}; | 
 |  |  | 
 | static const DLGCOM_P res_com3 = | static const DLGCOM_P res_com3 = | 
| Line 118  static const DLGCOM_P res_com3 = | Line 134  static const DLGCOM_P res_com3 = | 
 | com3serial, com3rsmidi, SYS_UPDATESERIAL1}; | com3serial, com3rsmidi, SYS_UPDATESERIAL1}; | 
 |  |  | 
 |  |  | 
| static void dlgcom_show(HWND hWnd, int ncmd, const WORD *item, int items) { | static void dlgcom_show(HWND hWnd, int ncmd, const UINT16 *item, int items) { | 
 |  |  | 
 | while(items--) { | while(items--) { | 
 | ShowWindow(GetDlgItem(hWnd, *item++), ncmd); | ShowWindow(GetDlgItem(hWnd, *item++), ncmd); | 
| Line 139  static void dlgcom_items(HWND hWnd, cons | Line 155  static void dlgcom_items(HWND hWnd, cons | 
 | } | } | 
 |  |  | 
 |  |  | 
 |  | static void setChars(HWND hWnd, UINT uID, UINT8 cValue) | 
 |  | { | 
 |  | dlgs_setcbcur(hWnd, uID, cValue & 0x0c); | 
 |  | } | 
 |  |  | 
 |  | static UINT8 getChars(HWND hWnd, UINT uID, UINT8 cDefault) | 
 |  | { | 
 |  | return dlgs_getcbcur(hWnd, uID, cDefault & 0x0c); | 
 |  | } | 
 |  |  | 
 |  |  | 
 |  | static void setParity(HWND hWnd, UINT uID, UINT8 cValue) | 
 |  | { | 
 |  | cValue = cValue & 0x30; | 
 |  | if (!(cValue & 0x20)) | 
 |  | { | 
 |  | cValue = 0; | 
 |  | } | 
 |  | dlgs_setcbcur(hWnd, uID, cValue); | 
 |  | } | 
 |  |  | 
 |  | static UINT8 getParity(HWND hWnd, UINT uID, UINT8 cDefault) | 
 |  | { | 
 |  | return dlgs_getcbcur(hWnd, uID, cDefault & 0x30); | 
 |  | } | 
 |  |  | 
 |  |  | 
 |  | static void setStopBit(HWND hWnd, UINT uID, UINT8 cValue) | 
 |  | { | 
 |  | cValue = cValue & 0xc0; | 
 |  | if (!cValue) | 
 |  | { | 
 |  | cValue = 0x40; | 
 |  | } | 
 |  | dlgs_setcbcur(hWnd, uID, cValue); | 
 |  | } | 
 |  |  | 
 |  | static UINT8 getStopBit(HWND hWnd, UINT uID, UINT8 cDefault) | 
 |  | { | 
 |  | return dlgs_getcbcur(hWnd, uID, cDefault & 0xc0); | 
 |  | } | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  |  | 
 | static LRESULT CALLBACK dlgitem_proc(HWND hWnd, UINT msg, | static LRESULT CALLBACK dlgitem_proc(HWND hWnd, UINT msg, | 
 | WPARAM wp, LPARAM lp, const DLGCOM_P *m) { | WPARAM wp, LPARAM lp, const DLGCOM_P *m) { | 
 |  |  | 
| DWORD   d; | UINT32  d; | 
| BYTE    b; | UINT8   b; | 
 | LRESULT r; | LRESULT r; | 
 | union { | union { | 
| char    mmap[MAXPNAMELEN]; | OEMCHAR mmap[MAXPNAMELEN]; | 
| char    mmdl[64]; | OEMCHAR mmdl[64]; | 
| char    mdef[MAX_PATH]; | OEMCHAR mdef[MAX_PATH]; | 
 | } str; | } str; | 
 | COMCFG  *cfg; | COMCFG  *cfg; | 
 | UINT    update; | UINT    update; | 
 |  | COMMNG  cm; | 
 |  |  | 
 | switch (msg) { | switch (msg) { | 
 | case WM_INITDIALOG: | case WM_INITDIALOG: | 
 | cfg = m->cfg; | cfg = m->cfg; | 
| SETLISTSTR(hWnd, m->idc[ID_PORT], rsport); | dlgs_setcbitem(hWnd, m->idc[ID_PORT], cpPort, NELEMENTS(cpPort)); | 
 | SETLISTUINT32(hWnd, m->idc[ID_SPEED], cmserial_speed); | SETLISTUINT32(hWnd, m->idc[ID_SPEED], cmserial_speed); | 
| SETLISTUINT32(hWnd, m->idc[ID_CHARS], rscharsize); | dlgs_setcbnumber(hWnd, m->idc[ID_CHARS], | 
| SETLISTSTR(hWnd, m->idc[ID_PARITY], rsparity); | cpChars, NELEMENTS(cpChars)); | 
| SETLISTSTR(hWnd, m->idc[ID_SBIT], rsstopbit); | dlgs_setcbitem(hWnd, m->idc[ID_PARITY], | 
| for (d=0; d<(sizeof(cmserial_speed)/sizeof(UINT32))-1; d++) { | cpParity, NELEMENTS(cpParity)); | 
|  | dlgs_setcbitem(hWnd, m->idc[ID_SBIT], cpSBit, NELEMENTS(cpSBit)); | 
|  | for (d=0; d<(NELEMENTS(cmserial_speed) - 1); d++) { | 
 | if (cmserial_speed[d] >= cfg->speed) { | if (cmserial_speed[d] >= cfg->speed) { | 
 | break; | break; | 
 | } | } | 
| Line 171  static LRESULT CALLBACK dlgitem_proc(HWN | Line 237  static LRESULT CALLBACK dlgitem_proc(HWN | 
 |  |  | 
 | b = cfg->param; | b = cfg->param; | 
 | d = (b >> 2) & 3; | d = (b >> 2) & 3; | 
| SendDlgItemMessage(hWnd, m->idc[ID_CHARS], |  | 
| CB_SETCURSEL, (WPARAM)d, (LPARAM)0); | setChars(hWnd, m->idc[ID_CHARS], b); | 
| if (b & 0x10) { | setParity(hWnd, m->idc[ID_PARITY], b); | 
| d = ((b >> 5) & 1) + 1; | setStopBit(hWnd, m->idc[ID_SBIT], b); | 
| } |  | 
| else { |  | 
| d = 0; |  | 
| } |  | 
| SendDlgItemMessage(hWnd, m->idc[ID_PARITY], |  | 
| CB_SETCURSEL, (WPARAM)d, (LPARAM)0); |  | 
| d = (b >> 6) & 3; |  | 
| if (d) { |  | 
| d--; |  | 
| } |  | 
| SendDlgItemMessage(hWnd, m->idc[ID_SBIT], |  | 
| CB_SETCURSEL, (WPARAM)d, (LPARAM)0); |  | 
 |  |  | 
 | dlgs_setlistmidiout(hWnd, m->idc[ID_MMAP], cfg->mout); | dlgs_setlistmidiout(hWnd, m->idc[ID_MMAP], cfg->mout); | 
 | SETLISTSTR(hWnd, m->idc[ID_MMDL], cmmidi_mdlname); | SETLISTSTR(hWnd, m->idc[ID_MMDL], cmmidi_mdlname); | 
| Line 195  static LRESULT CALLBACK dlgitem_proc(HWN | Line 249  static LRESULT CALLBACK dlgitem_proc(HWN | 
 | SetDlgItemText(hWnd, m->idc[ID_DEFF], cfg->def); | SetDlgItemText(hWnd, m->idc[ID_DEFF], cfg->def); | 
 |  |  | 
 | d = cfg->port; | d = cfg->port; | 
| if (d >= (sizeof(rsport)/sizeof(char *))) { | if (d >= NELEMENTS(cpPort)) | 
|  | { | 
 | d = 0; | d = 0; | 
 | } | } | 
| SendDlgItemMessage(hWnd, m->idc[ID_PORT], | dlgs_setcbcur(hWnd, m->idc[ID_PORT], d); | 
| CB_SETCURSEL, (WPARAM)d, (LPARAM)0); |  | 
|  |  | 
 | dlgcom_items(hWnd, m, d); | dlgcom_items(hWnd, m, d); | 
 | return(TRUE); | return(TRUE); | 
 |  |  | 
 | case WM_COMMAND: | case WM_COMMAND: | 
| if (LOWORD(wp) == m->idc[ID_PORT]) { | if (LOWORD(wp) == m->idc[ID_PORT]) | 
| r = SendDlgItemMessage(hWnd, m->idc[ID_PORT], | { | 
| CB_GETCURSEL, (WPARAM)0, (LPARAM)0); | dlgcom_items(hWnd, m, | 
| if (r != CB_ERR) { | dlgs_getcbcur(hWnd, m->idc[ID_PORT], COMPORT_NONE)); | 
| dlgcom_items(hWnd, m, (UINT)r); |  | 
| } |  | 
 | } | } | 
| else if (LOWORD(wp) == m->idc[ID_DEFB]) { | else if (LOWORD(wp) == m->idc[ID_DEFB]) | 
|  | { | 
 | dlgs_browsemimpidef(hWnd, m->idc[ID_DEFF]); | dlgs_browsemimpidef(hWnd, m->idc[ID_DEFF]); | 
 | } | } | 
 | break; | break; | 
 |  |  | 
 | case WM_NOTIFY: | case WM_NOTIFY: | 
| if ((((NMHDR *)lp)->code) == PSN_APPLY) { | if ((((NMHDR *)lp)->code) == (UINT)PSN_APPLY) | 
|  | { | 
 | cfg = m->cfg; | cfg = m->cfg; | 
 | update = 0; | update = 0; | 
| r = SendDlgItemMessage(hWnd, m->idc[ID_PORT], | r = dlgs_getcbcur(hWnd, m->idc[ID_PORT], COMPORT_NONE); | 
| CB_GETCURSEL, (WPARAM)0, (LPARAM)0); | if (cfg->port != (UINT8)r) | 
| if (r != CB_ERR) { | { | 
| if ((UINT)r >= (sizeof(rsport)/sizeof(char *))) { | cfg->port = (UINT8)r; | 
| r = 0; | update |= SYS_UPDATEOSCFG; | 
| } | update |= m->update; | 
| if (cfg->port != (BYTE)r) { |  | 
| cfg->port = (BYTE)r; |  | 
| update |= SYS_UPDATEOSCFG; |  | 
| update |= m->update; |  | 
| } |  | 
 | } | } | 
 | r = SendDlgItemMessage(hWnd, m->idc[ID_SPEED], | r = SendDlgItemMessage(hWnd, m->idc[ID_SPEED], | 
 | CB_GETCURSEL, (WPARAM)0, (LPARAM)0); | CB_GETCURSEL, (WPARAM)0, (LPARAM)0); | 
 | if (r != CB_ERR) { | if (r != CB_ERR) { | 
| if ((UINT)r >= (sizeof(cmserial_speed)/sizeof(UINT32))) { | if ((UINT)r >= NELEMENTS(cmserial_speed)) { | 
 | r = 0; | r = 0; | 
 | } | } | 
 | if (cfg->speed != cmserial_speed[r]) { | if (cfg->speed != cmserial_speed[r]) { | 
| Line 247  static LRESULT CALLBACK dlgitem_proc(HWN | Line 295  static LRESULT CALLBACK dlgitem_proc(HWN | 
 | } | } | 
 |  |  | 
 | b = 0; | b = 0; | 
| r = SendDlgItemMessage(hWnd, m->idc[ID_CHARS], | b |= getChars(hWnd, m->idc[ID_CHARS], cfg->param); | 
| CB_GETCURSEL, (WPARAM)0, (LPARAM)0); | b |= getParity(hWnd, m->idc[ID_PARITY], cfg->param); | 
| if (r != CB_ERR) { | b |= getStopBit(hWnd, m->idc[ID_SBIT], cfg->param); | 
| b |= (BYTE)(((UINT)r & 3) << 2); |  | 
| } |  | 
| r = SendDlgItemMessage(hWnd, m->idc[ID_PARITY], |  | 
| CB_GETCURSEL, (WPARAM)0, (LPARAM)0); |  | 
| if (r != CB_ERR) { |  | 
| if ((UINT)r) { |  | 
| b |= 0x10; |  | 
| b |= (BYTE)((((UINT)r - 1) & 1) << 5); |  | 
| } |  | 
| } |  | 
| r = SendDlgItemMessage(hWnd, m->idc[ID_SBIT], |  | 
| CB_GETCURSEL, (WPARAM)0, (LPARAM)0); |  | 
| if (r != CB_ERR) { |  | 
| b |= (BYTE)((((UINT)r + 1) & 3) << 6); |  | 
| } |  | 
 | if (cfg->param != b) { | if (cfg->param != b) { | 
 | cfg->param = b; | cfg->param = b; | 
 | update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; | 
| Line 272  static LRESULT CALLBACK dlgitem_proc(HWN | Line 306  static LRESULT CALLBACK dlgitem_proc(HWN | 
 | } | } | 
 |  |  | 
 | GetDlgItemText(hWnd, m->idc[ID_MMAP], | GetDlgItemText(hWnd, m->idc[ID_MMAP], | 
| str.mmap, sizeof(str.mmap)); | str.mmap, NELEMENTS(str.mmap)); | 
 | if (milstr_cmp(cfg->mout, str.mmap)) { | if (milstr_cmp(cfg->mout, str.mmap)) { | 
| milstr_ncpy(cfg->mout, str.mmap, sizeof(cfg->mout)); | milstr_ncpy(cfg->mout, str.mmap, NELEMENTS(cfg->mout)); | 
 | update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; | 
 | update |= m->update; | update |= m->update; | 
 | } | } | 
 | GetDlgItemText(hWnd, m->idc[ID_MMDL], | GetDlgItemText(hWnd, m->idc[ID_MMDL], | 
| str.mmdl, sizeof(str.mmdl)); | str.mmdl, NELEMENTS(str.mmdl)); | 
 | if (milstr_cmp(cfg->mdl, str.mmdl)) { | if (milstr_cmp(cfg->mdl, str.mmdl)) { | 
| milstr_ncpy(cfg->mdl, str.mmdl, sizeof(cfg->mdl)); | milstr_ncpy(cfg->mdl, str.mmdl, NELEMENTS(cfg->mdl)); | 
 | update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; | 
 | update |= m->update; | update |= m->update; | 
 | } | } | 
 |  |  | 
| cfg->def_en = GetDlgItemCheck(hWnd, m->idc[ID_DEFE]); | cfg->def_en = (UINT8)GetDlgItemCheck(hWnd, m->idc[ID_DEFE]); | 
|  | cm = *m->cm; | 
|  | if (cm) { | 
|  | cm->msg(cm, COMMSG_MIMPIDEFEN, cfg->def_en); | 
|  | } | 
 | GetDlgItemText(hWnd, m->idc[ID_DEFF], | GetDlgItemText(hWnd, m->idc[ID_DEFF], | 
| str.mdef, sizeof(str.mdef)); | str.mdef, NELEMENTS(str.mdef)); | 
 | if (milstr_cmp(cfg->def, str.mdef)) { | if (milstr_cmp(cfg->def, str.mdef)) { | 
| milstr_ncpy(cfg->def, str.mdef, sizeof(cfg->def)); | milstr_ncpy(cfg->def, str.mdef, NELEMENTS(cfg->def)); | 
 | update |= SYS_UPDATEOSCFG; | update |= SYS_UPDATEOSCFG; | 
| //                                      commsmidi_toneload(m->comm, str.mdef); | if (cm) { | 
|  | cm->msg(cm, COMMSG_MIMPIDEFFILE, (long)str.mdef); | 
|  | } | 
 | } | } | 
 | sysmng_update(update); | sysmng_update(update); | 
 | return(TRUE); | return(TRUE); | 
| Line 324  static LRESULT CALLBACK Com3Proc(HWND hW | Line 364  static LRESULT CALLBACK Com3Proc(HWND hW | 
 |  |  | 
 | // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | 
 |  |  | 
| static  BYTE    pc9861_s[3]; | static  UINT8   pc9861_s[3]; | 
| static  BYTE    pc9861_j[6]; | static  UINT8   pc9861_j[6]; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
 | int             idc_speed; | int             idc_speed; | 
 | int             idc_int; | int             idc_int; | 
 | int             idc_mode; | int             idc_mode; | 
| BYTE    *dip_mode; | UINT8   *dip_mode; | 
| BYTE    *dip_int; | UINT8   *dip_int; | 
| BYTE    sft_int; | UINT8   sft_int; | 
 | } PC9861MODE_T; | } PC9861MODE_T; | 
 |  |  | 
 | static const PC9861MODE_T pc9861mode[2] = { | static const PC9861MODE_T pc9861mode[2] = { | 
| Line 342  static const PC9861MODE_T pc9861mode[2] | Line 382  static const PC9861MODE_T pc9861mode[2] | 
 | {IDC_CH2SPEED, IDC_CH2INT, IDC_CH2MODE, | {IDC_CH2SPEED, IDC_CH2INT, IDC_CH2MODE, | 
 | &pc9861_s[2], &pc9861_s[1], 2}}; | &pc9861_s[2], &pc9861_s[1], 2}}; | 
 |  |  | 
 |  | enum { | 
 |  | PC9861S1_X              = 1, | 
 |  | PC9861S2_X              = 10, | 
 |  | PC9861S3_X              = 17, | 
 |  | PC9861S_Y               = 1, | 
 |  |  | 
 |  | PC9861J1_X              = 1, | 
 |  | PC9861J2_X              = 9, | 
 |  | PC9861J3_X              = 17, | 
 |  | PC9861J4_X              = 1, | 
 |  | PC9861J5_X              = 11, | 
 |  | PC9861J6_X              = 19, | 
 |  | PC9861J1_Y              = 4, | 
 |  | PC9861J4_Y              = 7 | 
 |  | }; | 
 |  |  | 
| #define PC9861S1_X      1 | static const CBNPARAM cpInt1[] = | 
| #define PC9861S2_X      10 | { | 
| #define PC9861S3_X      17 | {0,     0x00}, | 
| #define PC9861S_Y       1 | {1,     0x02}, | 
|  | {2,     0x01}, | 
| #define PC9861J1_X      1 | {3,     0x03}, | 
| #define PC9861J2_X      9 | }; | 
| #define PC9861J3_X      17 |  | 
| #define PC9861J4_X      1 |  | 
| #define PC9861J5_X      11 |  | 
| #define PC9861J6_X      19 |  | 
| #define PC9861J1_Y      4 |  | 
| #define PC9861J4_Y      7 |  | 
|  |  | 
| static  SUBCLASSPROC    oldidc_9861dip = NULL; |  | 
|  |  | 
| static const UINT32 pc9861kint1[] = {0, 1, 2, 3}; |  | 
| static const UINT32 pc9861kint2[] = {0, 4, 5, 6}; |  | 
|  |  | 
| static const char sync0[] = "Start-Stop"; |  | 
| static const char sync1[] = "ST1"; |  | 
| static const char sync2[] = "ST2"; |  | 
| static const char sync3[] = "RD-Sync"; |  | 
| static const char *pc9861sync[] = {sync0, sync1, sync2, sync3}; |  | 
|  |  | 
| static const UINT pc9861d2sync[] = {1, 2, 3, 0}; |  | 
| static const UINT pc9861d2int[] = {0, 2, 1, 3}; |  | 
|  |  | 
 |  |  | 
| static void setdip(BYTE *image, int px, int py, int align, BYTE v, BYTE c) { | static const CBNPARAM cpInt2[] = | 
|  | { | 
|  | {0,     0x00}, | 
|  | {4,     0x08}, | 
|  | {5,     0x04}, | 
|  | {6,     0x0c}, | 
|  | }; | 
 |  |  | 
| int             i, y; | static const CBPARAM cpSync[] = | 
|  | { | 
|  | {MAKEINTRESOURCE(IDS_SYNC),             0x03}, | 
|  | {MAKEINTRESOURCE(IDS_ASYNC),    0x00}, | 
|  | {MAKEINTRESOURCE(IDS_ASYNC16X), 0x01}, | 
|  | {MAKEINTRESOURCE(IDS_ASYNC64X), 0x02}, | 
|  | }; | 
 |  |  | 
| px *= 9; | static void pc9861setspeed(HWND hWnd, const PC9861MODE_T *m) | 
| px++; | { | 
| py *= 9; | UINT8   cMode; | 
| while(c--) { | UINT    uSpeed; | 
| y = py + ((v&0x01)?5:9); |  | 
| for (i=0; i<3; i++) { | cMode = *(m->dip_mode); | 
| dlgs_linex(image, px, y+i, 7, align, 0); | uSpeed = (((~cMode) >> 2) & 0x0f) + 1; | 
|  | if (cMode) | 
|  | { | 
|  | if (uSpeed > 4) | 
|  | { | 
|  | uSpeed -= 4; | 
 | } | } | 
| px+=9; | else | 
| v>>=1; | { | 
| } | uSpeed = 0; | 
| } |  | 
|  |  | 
| static void setjmp(BYTE *image, int px, int py, int align, BYTE v, BYTE c) { |  | 
|  |  | 
| while(c--) { |  | 
| if (v & 0x01) { |  | 
| dlgs_setjumpery(image, px, py, align); |  | 
 | } | } | 
 | px++; |  | 
 | v >>= 1; |  | 
 | } | } | 
| } | if (uSpeed > (NELEMENTS(pc9861k_speed) - 1)) | 
|  | { | 
|  | uSpeed = NELEMENTS(pc9861k_speed) - 1; | 
|  | } | 
 |  |  | 
| static void pc9861getspeed(HWND hWnd, const PC9861MODE_T *m) { | SendDlgItemMessage(hWnd, m->idc_speed, | 
|  | CB_SETCURSEL, (WPARAM)uSpeed, (LPARAM)0); | 
|  | } | 
 |  |  | 
 |  | static void pc9861getspeed(HWND hWnd, const PC9861MODE_T *m) | 
 |  | { | 
 |  | UINT8   cMode; | 
 | LRESULT r; | LRESULT r; | 
| BYTE    mode; | UINT    uSpeed; | 
 |  |  | 
| mode = *(m->dip_mode); | cMode = *(m->dip_mode); | 
 | r = SendDlgItemMessage(hWnd, m->idc_speed, CB_GETCURSEL, 0, 0); | r = SendDlgItemMessage(hWnd, m->idc_speed, CB_GETCURSEL, 0, 0); | 
| if (r != CB_ERR) { | if (r != CB_ERR) | 
| DWORD speed = r; | { | 
| if (speed > ((sizeof(pc9861k_speed) / sizeof(UINT32)) - 1)) { | uSpeed = (UINT)r; | 
| speed = (sizeof(pc9861k_speed) / sizeof(UINT32)) - 1; | if (uSpeed > (NELEMENTS(pc9861k_speed) - 1)) | 
| } | { | 
| if (mode & 2) { | uSpeed = NELEMENTS(pc9861k_speed) - 1; | 
| speed += 3; | } | 
| } | if (cMode & 2) | 
| else { | { | 
| if (speed) { | uSpeed += 3; | 
| speed--; | } | 
|  | else | 
|  | { | 
|  | if (uSpeed) | 
|  | { | 
|  | uSpeed--; | 
 | } | } | 
 | } | } | 
| mode &= 3; | cMode &= 3; | 
| mode |= ((~speed) & 0x0f) << 2; | cMode |= ((~uSpeed) & 0x0f) << 2; | 
| *(m->dip_mode) = mode; | *(m->dip_mode) = cMode; | 
 | } | } | 
 | } | } | 
 |  |  | 
| static void pc9861getint(HWND hWnd, const PC9861MODE_T *m) { | static void pc9861setsync(HWND hWnd, const PC9861MODE_T *m) | 
|  | { | 
|  | UINT8   cMode; | 
 |  |  | 
| LRESULT r; | cMode = *(m->dip_mode); | 
| int             i; | dlgs_setcbcur(hWnd, m->idc_mode, cMode & 0x03); | 
|  | } | 
 |  |  | 
| r = SendDlgItemMessage(hWnd, m->idc_int, CB_GETCURSEL, 0, 0); | static void pc9861getsync(HWND hWnd, const PC9861MODE_T *m) | 
| if (r != CB_ERR) { | { | 
| for (i=0; i<(sizeof(pc9861d2int)/sizeof(UINT)); i++) { | UINT8   cMode; | 
| if (pc9861d2int[i] == (UINT)(r & 3)) { | UINT8   cNewMode; | 
| *(m->dip_int) &= ~(0x03 << (m->sft_int)); |  | 
| *(m->dip_int) |= (BYTE)(i << (m->sft_int)); | cMode = *(m->dip_mode); | 
| break; | cNewMode = (UINT8)dlgs_getcbcur(hWnd, m->idc_mode, cMode & 0x03); | 
| } | *(m->dip_mode) = (UINT8)((cMode & (~3)) | cNewMode); | 
| } |  | 
| } |  | 
 | } | } | 
 |  |  | 
 |  | static void pc9861setint(HWND hWnd, const PC9861MODE_T *m) | 
 |  | { | 
 |  | UINT8   cMask; | 
 |  | UINT8   cMode; | 
 |  |  | 
| static void pc9861getmode(HWND hWnd, const PC9861MODE_T *m) { | cMask = 3 << (m->sft_int); | 
|  | cMode = *(m->dip_int); | 
|  | dlgs_setcbcur(hWnd, m->idc_int, cMode & cMask); | 
|  | } | 
 |  |  | 
| LRESULT r; | static void pc9861getint(HWND hWnd, const PC9861MODE_T *m) | 
| BYTE    i; | { | 
|  | UINT8   cMask; | 
|  | UINT8   cMode; | 
|  | UINT8   cNewMode; | 
 |  |  | 
| r = SendDlgItemMessage(hWnd, m->idc_mode, CB_GETCURSEL, 0, 0); | cMask = 3 << (m->sft_int); | 
| if (r != CB_ERR) { | cMode = *(m->dip_int); | 
| for (i=0; i<(sizeof(pc9861d2sync)/sizeof(UINT)); i++) { | cNewMode = (UINT8)dlgs_getcbcur(hWnd, m->idc_int, cMode & cMask); | 
| if (pc9861d2sync[i] == (UINT)(r & 3)) { | *(m->dip_int) = (cMode & (~cMask)) | cNewMode; | 
| *(m->dip_mode) &= (~3); | } | 
| *(m->dip_mode) |= i; |  | 
| break; | static void pc9861setmode(HWND hWnd, const PC9861MODE_T *m) | 
| } | { | 
| } | pc9861setspeed(hWnd, m); | 
| } | pc9861setint(hWnd, m); | 
|  | pc9861setsync(hWnd, m); | 
 | } | } | 
 |  |  | 
| static void pc9861setmode(HWND hWnd, const PC9861MODE_T *m) { | static void pc9861cmddipsw(HWND hWnd) { | 
 |  |  | 
| DWORD   speed; | RECT    rect1; | 
| DWORD   mode; | RECT    rect2; | 
| DWORD   intnum; | POINT   p; | 
| BYTE    modedip; | UINT8   bit; | 
 |  |  | 
| modedip = *(m->dip_mode); | GetWindowRect(GetDlgItem(hWnd, IDC_PC9861DIP), &rect1); | 
| speed = (((~modedip) >> 2) & 0x0f) + 1; | GetClientRect(GetDlgItem(hWnd, IDC_PC9861DIP), &rect2); | 
| if (modedip & 0x02) { | GetCursorPos(&p); | 
| if (speed > 4) { | p.x += rect2.left - rect1.left; | 
| speed -= 4; | p.y += rect2.top - rect1.top; | 
|  | p.x /= 9; | 
|  | p.y /= 9; | 
|  | if ((p.y >= 1) && (p.y < 3)) {                                  // 1段目 | 
|  | if ((p.x >= 1) && (p.x < 7)) {                          // S1 | 
|  | pc9861_s[0] ^= (1 << (p.x - 1)); | 
|  | pc9861setmode(hWnd, pc9861mode); | 
 | } | } | 
| else { | else if ((p.x >= 10) && (p.x < 14)) {           // S2 | 
| speed = 0; | pc9861_s[1] ^= (1 << (p.x - 10)); | 
|  | pc9861setint(hWnd, pc9861mode); | 
|  | pc9861setint(hWnd, pc9861mode+1); | 
|  | } | 
|  | else if ((p.x >= 17) && (p.x < 23)) {           // S3 | 
|  | pc9861_s[2] ^= (1 << (p.x - 17)); | 
|  | pc9861setmode(hWnd, pc9861mode+1); | 
 | } | } | 
 | } | } | 
| if (speed > ((sizeof(pc9861k_speed) / sizeof(UINT32)) - 1)) { | else if ((p.y >= 4) && (p.y < 6)) {                             // 2段目 | 
| speed = (sizeof(pc9861k_speed) / sizeof(UINT32)) - 1; | if ((p.x >= 1) && (p.x < 7)) {                          // J1 | 
|  | pc9861_j[0] ^= (1 << (p.x - 1)); | 
|  | } | 
|  | else if ((p.x >= 9) && (p.x < 15)) {            // J2 | 
|  | pc9861_j[1] ^= (1 << (p.x - 9)); | 
|  | } | 
|  | else if ((p.x >= 17) && (p.x < 19)) {           // J3 | 
|  | pc9861_j[2] = (1 << (p.x - 17)); | 
|  | } | 
 | } | } | 
|  | else if ((p.y >= 7) && (p.y < 9)) {                             // 3段目 | 
| SendDlgItemMessage(hWnd, m->idc_speed, | if ((p.x >= 1) && (p.x < 9)) {                          // J4 | 
| CB_SETCURSEL, (WPARAM)speed, (LPARAM)0); | bit = (1 << (p.x - 1)); | 
|  | if (pc9861_j[3] == bit) { | 
| mode = pc9861d2sync[modedip & 3]; | bit = 0; | 
| SendDlgItemMessage(hWnd, m->idc_mode, |  | 
| CB_SETCURSEL, (WPARAM)mode, (LPARAM)0); |  | 
|  |  | 
| intnum = pc9861d2int[((*(m->dip_int)) >> (m->sft_int)) & 3]; |  | 
| SendDlgItemMessage(hWnd, m->idc_int, |  | 
| CB_SETCURSEL, (WPARAM)intnum, (LPARAM)0); |  | 
| } |  | 
|  |  | 
|  |  | 
| static LRESULT CALLBACK pc9861d(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) { |  | 
| case WM_PAINT: |  | 
| hdc = BeginPaint(hWnd, &ps); |  | 
| if ((hwork = GlobalAlloc(GPTR, bit2res_getsize(&pc9861dip))) |  | 
| == NULL) { |  | 
| break; |  | 
| } |  | 
| if ((work = (BITMAPINFO *)GlobalLock(hwork)) == NULL) { |  | 
| GlobalFree(hwork); |  | 
| break; |  | 
 | } | } | 
| bit2res_sethead(work, &pc9861dip); | pc9861_j[3] = bit; | 
| hBitmap = CreateDIBSection(hdc, work, DIB_RGB_COLORS, | } | 
| (void **)&image, NULL, 0); | else if ((p.x >= 11) && (p.x < 17)) {           // J5 | 
| bit2res_setdata(image, &pc9861dip); | pc9861_j[4] ^= (1 << (p.x - 11)); | 
| align = ((pc9861dip.x + 7) / 2) & ~3; | } | 
| imgbtm = image + align * (pc9861dip.y - 1); | else if ((p.x >= 19) && (p.x < 25)) {           // J6 | 
| setdip(imgbtm, PC9861S1_X, PC9861S_Y, align, pc9861_s[0], 6); | pc9861_j[5] ^= (1 << (p.x - 19)); | 
| setdip(imgbtm, PC9861S2_X, PC9861S_Y, align, pc9861_s[1], 4); | } | 
| setdip(imgbtm, PC9861S3_X, PC9861S_Y, align, pc9861_s[2], 6); |  | 
| setjmp(imgbtm, PC9861J1_X, PC9861J1_Y, align, pc9861_j[0], 6); |  | 
| setjmp(imgbtm, PC9861J2_X, PC9861J1_Y, align, pc9861_j[1], 6); |  | 
| setjmp(imgbtm, PC9861J3_X, PC9861J1_Y, align, pc9861_j[2], 2); |  | 
| setjmp(imgbtm, PC9861J4_X, PC9861J4_Y, align, pc9861_j[3], 8); |  | 
| setjmp(imgbtm, PC9861J5_X, PC9861J4_Y, align, pc9861_j[4], 6); |  | 
| setjmp(imgbtm, PC9861J6_X, PC9861J4_Y, align, pc9861_j[5], 6); |  | 
| if ((hMemDC = CreateCompatibleDC(hdc)) != NULL) { |  | 
| SelectObject(hMemDC, hBitmap); |  | 
| StretchBlt(hdc, 0, 0, pc9861dip.x, pc9861dip.y, hMemDC, |  | 
| 0, 0, pc9861dip.x, pc9861dip.y, SRCCOPY); |  | 
| DeleteDC(hMemDC); |  | 
| } |  | 
| DeleteObject(hBitmap); |  | 
| EndPaint(hWnd, &ps); |  | 
| GlobalUnlock(hwork); |  | 
| GlobalFree(hwork); |  | 
| break; |  | 
| default: |  | 
| return(CallWindowProc(oldidc_9861dip, hWnd, msg, wp, lp)); |  | 
 | } | } | 
 | return(FALSE); |  | 
 | } | } | 
 |  |  | 
 |  |  | 
 | static LRESULT CALLBACK pc9861mainProc(HWND hWnd, UINT msg, | static LRESULT CALLBACK pc9861mainProc(HWND hWnd, UINT msg, | 
 | WPARAM wp, LPARAM lp) { | WPARAM wp, LPARAM lp) { | 
 |  |  | 
| RECT    rect1; | HWND    sub; | 
| RECT    rect2; | UINT8   r; | 
| POINT   p; |  | 
| BYTE    r; |  | 
 | UINT    update; | UINT    update; | 
 |  |  | 
 | switch (msg) { | switch (msg) { | 
| Line 566  static LRESULT CALLBACK pc9861mainProc(H | Line 598  static LRESULT CALLBACK pc9861mainProc(H | 
 | CopyMemory(pc9861_j, np2cfg.pc9861jmp, 6); | CopyMemory(pc9861_j, np2cfg.pc9861jmp, 6); | 
 | SETLISTUINT32(hWnd, IDC_CH1SPEED, pc9861k_speed); | SETLISTUINT32(hWnd, IDC_CH1SPEED, pc9861k_speed); | 
 | SETLISTUINT32(hWnd, IDC_CH2SPEED, pc9861k_speed); | SETLISTUINT32(hWnd, IDC_CH2SPEED, pc9861k_speed); | 
| SETLISTUINT32(hWnd, IDC_CH1INT, pc9861kint1); | dlgs_setcbnumber(hWnd, IDC_CH1INT, cpInt1, NELEMENTS(cpInt1)); | 
| SETLISTUINT32(hWnd, IDC_CH2INT, pc9861kint2); | dlgs_setcbnumber(hWnd, IDC_CH2INT, cpInt2, NELEMENTS(cpInt2)); | 
| SETLISTSTR(hWnd, IDC_CH1MODE, pc9861sync); | dlgs_setcbitem(hWnd, IDC_CH1MODE, cpSync, NELEMENTS(cpSync)); | 
| SETLISTSTR(hWnd, IDC_CH2MODE, pc9861sync); | dlgs_setcbitem(hWnd, IDC_CH2MODE, cpSync, NELEMENTS(cpSync)); | 
 |  |  | 
 | SendDlgItemMessage(hWnd, IDC_PC9861E, BM_GETCHECK, | SendDlgItemMessage(hWnd, IDC_PC9861E, BM_GETCHECK, | 
 | np2cfg.pc9861enable & 1, 0); | np2cfg.pc9861enable & 1, 0); | 
 | pc9861setmode(hWnd, pc9861mode); | pc9861setmode(hWnd, pc9861mode); | 
 | pc9861setmode(hWnd, pc9861mode+1); | pc9861setmode(hWnd, pc9861mode+1); | 
 |  |  | 
| oldidc_9861dip = (SUBCLASSPROC)GetWindowLong(GetDlgItem(hWnd, | sub = GetDlgItem(hWnd, IDC_PC9861DIP); | 
| IDC_PC9861DIP), GWL_WNDPROC); | SetWindowLong(sub, GWL_STYLE, SS_OWNERDRAW + | 
| SetWindowLong(GetDlgItem(hWnd, IDC_PC9861DIP), GWL_WNDPROC, | (GetWindowLong(sub, GWL_STYLE) & (~SS_TYPEMASK))); | 
| (LONG)pc9861d); |  | 
 | return(TRUE); | return(TRUE); | 
 |  |  | 
 | case WM_COMMAND: | case WM_COMMAND: | 
 | switch (LOWORD(wp)) { | switch (LOWORD(wp)) { | 
 | case IDC_CH1SPEED: | case IDC_CH1SPEED: | 
 | pc9861getspeed(hWnd, pc9861mode); | pc9861getspeed(hWnd, pc9861mode); | 
| pc9861setmode(hWnd, pc9861mode); | pc9861setspeed(hWnd, pc9861mode); | 
 | break; | break; | 
 |  |  | 
 | case IDC_CH1INT: | case IDC_CH1INT: | 
 | pc9861getint(hWnd, pc9861mode); | pc9861getint(hWnd, pc9861mode); | 
| pc9861setmode(hWnd, pc9861mode); | pc9861setint(hWnd, pc9861mode); | 
 | break; | break; | 
 |  |  | 
 | case IDC_CH1MODE: | case IDC_CH1MODE: | 
| pc9861getmode(hWnd, pc9861mode); | pc9861getsync(hWnd, pc9861mode); | 
| pc9861setmode(hWnd, pc9861mode); | pc9861setsync(hWnd, pc9861mode); | 
 | break; | break; | 
 |  |  | 
 | case IDC_CH2SPEED: | case IDC_CH2SPEED: | 
 | pc9861getspeed(hWnd, pc9861mode+1); | pc9861getspeed(hWnd, pc9861mode+1); | 
| pc9861setmode(hWnd, pc9861mode+1); | pc9861setspeed(hWnd, pc9861mode+1); | 
 | break; | break; | 
 |  |  | 
 | case IDC_CH2INT: | case IDC_CH2INT: | 
 | pc9861getint(hWnd, pc9861mode+1); | pc9861getint(hWnd, pc9861mode+1); | 
| pc9861setmode(hWnd, pc9861mode+1); | pc9861setint(hWnd, pc9861mode+1); | 
 | break; | break; | 
 |  |  | 
 | case IDC_CH2MODE: | case IDC_CH2MODE: | 
| pc9861getmode(hWnd, pc9861mode+1); | pc9861getsync(hWnd, pc9861mode+1); | 
| pc9861setmode(hWnd, pc9861mode+1); | pc9861setsync(hWnd, pc9861mode+1); | 
 | break; | break; | 
 |  |  | 
 | case IDC_PC9861DIP: | case IDC_PC9861DIP: | 
| GetWindowRect(GetDlgItem(hWnd, IDC_PC9861DIP), &rect1); | pc9861cmddipsw(hWnd); | 
| GetClientRect(GetDlgItem(hWnd, IDC_PC9861DIP), &rect2); | break; | 
| 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)) {                                  // 1段目 |  | 
| if ((p.x >= 1) && (p.x < 7)) {                          // S1 |  | 
| pc9861_s[0] ^= (1 << (p.x - 1)); |  | 
| pc9861setmode(hWnd, pc9861mode); |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 10) && (p.x < 14)) {           // S2 |  | 
| pc9861_s[1] ^= (1 << (p.x - 10)); |  | 
| pc9861setmode(hWnd, pc9861mode); |  | 
| pc9861setmode(hWnd, pc9861mode+1); |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 17) && (p.x < 23)) {           // S3 |  | 
| pc9861_s[2] ^= (1 << (p.x - 17)); |  | 
| pc9861setmode(hWnd, pc9861mode+1); |  | 
| break; |  | 
| } |  | 
| } |  | 
| else if ((p.y >= 4) && (p.y < 6)) {                             // 2段目 |  | 
| if ((p.x >= 1) && (p.x < 7)) {                          // J1 |  | 
| pc9861_j[0] ^= (1 << (p.x - 1)); |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 9) && (p.x < 15)) {            // J2 |  | 
| pc9861_j[1] ^= (1 << (p.x - 9)); |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 17) && (p.x < 19)) {           // J3 |  | 
| pc9861_j[2] = (1 << (p.x - 17)); |  | 
| break; |  | 
| } |  | 
| } |  | 
| else if ((p.y >= 7) && (p.y < 9)) {                             // 3段目 |  | 
| if ((p.x >= 1) && (p.x < 9)) {                          // J4 |  | 
| BYTE bit = (1 << (p.x - 1)); |  | 
| if (pc9861_j[3] == bit) { |  | 
| bit = 0; |  | 
| } |  | 
| pc9861_j[3] = bit; |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 11) && (p.x < 17)) {           // J5 |  | 
| pc9861_j[4] ^= (1 << (p.x - 11)); |  | 
| break; |  | 
| } |  | 
| else if ((p.x >= 19) && (p.x < 25)) {           // J6 |  | 
| pc9861_j[5] ^= (1 << (p.x - 19)); |  | 
| break; |  | 
| } |  | 
| } |  | 
| return(FALSE); |  | 
 |  |  | 
 | default: | default: | 
 | return(FALSE); | return(FALSE); | 
| Line 681  static LRESULT CALLBACK pc9861mainProc(H | Line 656  static LRESULT CALLBACK pc9861mainProc(H | 
 | break; | break; | 
 |  |  | 
 | case WM_NOTIFY: | case WM_NOTIFY: | 
| if ((((NMHDR *)lp)->code) == PSN_APPLY) { | if ((((NMHDR *)lp)->code) == (UINT)PSN_APPLY) { | 
 | update = 0; | update = 0; | 
 | r = GetDlgItemCheck(hWnd, IDC_PC9861E); | r = GetDlgItemCheck(hWnd, IDC_PC9861E); | 
 | if (np2cfg.pc9861enable != r) { | if (np2cfg.pc9861enable != r) { | 
| Line 700  static LRESULT CALLBACK pc9861mainProc(H | Line 675  static LRESULT CALLBACK pc9861mainProc(H | 
 | return(TRUE); | return(TRUE); | 
 | } | } | 
 | break; | break; | 
 |  |  | 
 |  | case WM_DRAWITEM: | 
 |  | if (LOWORD(wp) == IDC_PC9861DIP) { | 
 |  | dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC, | 
 |  | dipswbmp_get9861(pc9861_s, pc9861_j)); | 
 |  | } | 
 |  | return(FALSE); | 
 | } | } | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
| Line 707  static LRESULT CALLBACK pc9861mainProc(H | Line 689  static LRESULT CALLBACK pc9861mainProc(H | 
 |  |  | 
 | // -------------------------------------------------------------------------- | // -------------------------------------------------------------------------- | 
 |  |  | 
| void dialog_serial(HWND hWnd) { | void dialog_serial(HWND hWnd) | 
|  | { | 
| HINSTANCE               hinst; | HINSTANCE               hInstance; | 
 | PROPSHEETPAGE   psp; | PROPSHEETPAGE   psp; | 
 | PROPSHEETHEADER psh; | PROPSHEETHEADER psh; | 
 | HPROPSHEETPAGE  hpsp[4]; | HPROPSHEETPAGE  hpsp[4]; | 
 |  | 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_SERIAL1); | psp.pszTemplate = MAKEINTRESOURCE(IDD_SERIAL1); | 
 | psp.pfnDlgProc = (DLGPROC)Com1Proc; | psp.pfnDlgProc = (DLGPROC)Com1Proc; | 
| Line 737  void dialog_serial(HWND hWnd) { | Line 720  void dialog_serial(HWND hWnd) { | 
 | psp.pfnDlgProc = (DLGPROC)Com3Proc; | psp.pfnDlgProc = (DLGPROC)Com3Proc; | 
 | hpsp[3] = CreatePropertySheetPage(&psp); | hpsp[3] = CreatePropertySheetPage(&psp); | 
 |  |  | 
 |  | loadstringresource(hInstance, IDS_SERIALOPTION, szTitle, NELEMENTS(szTitle)); | 
 |  |  | 
 | ZeroMemory(&psh, sizeof(psh)); | ZeroMemory(&psh, sizeof(psh)); | 
 | psh.dwSize = sizeof(PROPSHEETHEADER); | psh.dwSize = sizeof(PROPSHEETHEADER); | 
| psh.dwFlags = PSH_NOAPPLYNOW; | psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEHICON | PSH_USECALLBACK; | 
 | psh.hwndParent = hWnd; | psh.hwndParent = hWnd; | 
| psh.hInstance = hinst; | psh.hInstance = hInstance; | 
|  | psh.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2)); | 
 | psh.nPages = 4; | psh.nPages = 4; | 
 | psh.phpage = hpsp; | psh.phpage = hpsp; | 
| psh.pszCaption = str_seropt; | psh.pszCaption = szTitle; | 
|  | psh.pfnCallback = np2class_propetysheet; | 
 | PropertySheet(&psh); | PropertySheet(&psh); | 
| InvalidateRect(hWndMain, NULL, TRUE); | InvalidateRect(hWnd, NULL, TRUE); | 
 | } | } | 
 |  |  |