| version 1.9, 2003/11/04 19:23:03 | version 1.11, 2005/02/07 14:46:15 | 
| Line 9 | Line 9 | 
 | #include        "np2class.h" | #include        "np2class.h" | 
 | #include        "dialog.h" | #include        "dialog.h" | 
 | #include        "dialogs.h" | #include        "dialogs.h" | 
 | #include        "bit2res.h" |  | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 | #include        "pc9861k.h" | #include        "pc9861k.h" | 
 |  | #include        "dipswbmp.h" | 
 |  |  | 
 |  |  | 
 | static const char str_none[] = "NONE"; | static const char str_none[] = "NONE"; | 
| Line 380  static const UINT pc9861d2sync[] = {1, 2 | Line 380  static const UINT pc9861d2sync[] = {1, 2 | 
 | static const UINT pc9861d2int[] = {0, 2, 1, 3}; | static const UINT pc9861d2int[] = {0, 2, 1, 3}; | 
 |  |  | 
 |  |  | 
 | static void setdip(BYTE *image, int px, int py, int align, BYTE v, BYTE c) { |  | 
 |  |  | 
 | int             i, y; |  | 
 |  |  | 
 | px *= 9; |  | 
 | px++; |  | 
 | py *= 9; |  | 
 | while(c--) { |  | 
 | y = py + ((v&0x01)?5:9); |  | 
 | for (i=0; i<3; i++) { |  | 
 | dlgs_linex(image, px, y+i, 7, align, 0); |  | 
 | } |  | 
 | px+=9; |  | 
 | v>>=1; |  | 
 | } |  | 
 | } |  | 
 |  |  | 
 | 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; |  | 
 | } |  | 
 | } |  | 
 |  |  | 
 | static void pc9861getspeed(HWND hWnd, const PC9861MODE_T *m) { | static void pc9861getspeed(HWND hWnd, const PC9861MODE_T *m) { | 
 |  |  | 
 | LRESULT r; | LRESULT r; | 
| Line 417  static void pc9861getspeed(HWND hWnd, co | Line 389  static void pc9861getspeed(HWND hWnd, co | 
 | 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; | DWORD speed = r; | 
| if (speed > ((sizeof(pc9861k_speed) / sizeof(UINT32)) - 1)) { | if (speed > (NELEMENTS(pc9861k_speed) - 1)) { | 
| speed = (sizeof(pc9861k_speed) / sizeof(UINT32)) - 1; | speed = NELEMENTS(pc9861k_speed) - 1; | 
 | } | } | 
 | if (mode & 2) { | if (mode & 2) { | 
 | speed += 3; | speed += 3; | 
| Line 485  static void pc9861setmode(HWND hWnd, con | Line 457  static void pc9861setmode(HWND hWnd, con | 
 | speed = 0; | speed = 0; | 
 | } | } | 
 | } | } | 
| if (speed > ((sizeof(pc9861k_speed) / sizeof(UINT32)) - 1)) { | if (speed > (NELEMENTS(pc9861k_speed) - 1)) { | 
| speed = (sizeof(pc9861k_speed) / sizeof(UINT32)) - 1; | speed = NELEMENTS(pc9861k_speed) - 1; | 
 | } | } | 
 |  |  | 
 | SendDlgItemMessage(hWnd, m->idc_speed, | SendDlgItemMessage(hWnd, m->idc_speed, | 
| Line 558  static void pc9861cmddipsw(HWND hWnd) { | Line 530  static void pc9861cmddipsw(HWND hWnd) { | 
 | } | } | 
 | } | } | 
 |  |  | 
 | static void pc9861drawdipsw(HWND hWnd, HDC hdc) { |  | 
 |  |  | 
 | BITMAPINFO      *bmi; |  | 
 | HBITMAP         hbmp; |  | 
 | BYTE            *image; |  | 
 | int                     align; |  | 
 | BYTE            *imgbtm; |  | 
 | HDC                     hmdc; |  | 
 |  |  | 
 | bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&pc9861dip), "bitmap"); |  | 
 | if (bmi == NULL) { |  | 
 | return; |  | 
 | } |  | 
 | bit2res_sethead(bmi, &pc9861dip); |  | 
 | hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS, |  | 
 | (void **)&image, NULL, 0); |  | 
 | bit2res_setdata(image, &pc9861dip); |  | 
 | align = ((pc9861dip.x + 7) / 2) & ~3; |  | 
 | imgbtm = image + align * (pc9861dip.y - 1); |  | 
 | setdip(imgbtm, PC9861S1_X, PC9861S_Y, align, pc9861_s[0], 6); |  | 
 | 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); |  | 
 | hmdc = CreateCompatibleDC(hdc); |  | 
 | SelectObject(hmdc, hbmp); |  | 
 | BitBlt(hdc, 0, 0, pc9861dip.x, pc9861dip.y, hmdc, 0, 0, SRCCOPY); |  | 
 | DeleteDC(hmdc); |  | 
 | DeleteObject(hbmp); |  | 
 | _MFREE(bmi); |  | 
 | } |  | 
 |  |  | 
 | static LRESULT CALLBACK pc9861mainProc(HWND hWnd, UINT msg, | static LRESULT CALLBACK pc9861mainProc(HWND hWnd, UINT msg, | 
 | WPARAM wp, LPARAM lp) { | WPARAM wp, LPARAM lp) { | 
 |  |  | 
| Line 687  static LRESULT CALLBACK pc9861mainProc(H | Line 623  static LRESULT CALLBACK pc9861mainProc(H | 
 |  |  | 
 | case WM_DRAWITEM: | case WM_DRAWITEM: | 
 | if (LOWORD(wp) == IDC_PC9861DIP) { | if (LOWORD(wp) == IDC_PC9861DIP) { | 
| pc9861drawdipsw(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC); | dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC, | 
|  | dipswbmp_get9861(pc9861_s, pc9861_j)); | 
 | } | } | 
 | return(FALSE); | return(FALSE); | 
 | } | } |