void viewer_allreload(BOOL force) { static UINT32 last = 0; UINT32 now; now = GetTickCount(); if ((force) || ((now - last) >= 200)) { int i; NP2VIEW_T *view; last = now; view = np2view; for (i=0; i<NP2VIEW_MAX; i++, view++) { if ((view->alive) && (!view->lock)) { if (view->type == VIEWMODE_ASM) { view->seg = CPU_CS; view->off = CPU_IP; view->pos = 0; viewcmn_setvscroll(view->hwnd, view); } viewcmn_setbank(view); InvalidateRect(view->hwnd, NULL, TRUE); } } } }
void viewasm_reload(NP2VIEW_T *view) { view->seg = CPU_CS; view->off = CPU_IP; view->cursor = seg_to_real(view->seg) + view->off; view->pos = 0; viewcmn_setvscroll(view); }
static void set_viewseg(HWND hwnd, NP2VIEW_T *view, UINT16 seg) { UINT32 pos; pos = (UINT32)seg; if (view->pos != pos) { view->pos = pos; viewcmn_setvscroll(view); InvalidateRect(hwnd, NULL, TRUE); } }
static void viewer_segmode(HWND hwnd, UINT8 type) { NP2VIEW_T *view; view = viewcmn_find(hwnd); if ((view) && (view->type != type)) { viewcmn_setmode(view, view, type); viewcmn_setbank(view); viewcmn_setvscroll(hwnd, view); InvalidateRect(hwnd, NULL, TRUE); } }
LRESULT CALLBACK ViewProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { NP2VIEW_T *view; switch (msg) { case WM_CREATE: break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_VIEWWINNEW: viewer_open(); break; case IDM_VIEWWINCLOSE: return(ViewProc(hWnd, WM_CLOSE, 0, 0)); break; case IDM_VIEWWINALLCLOSE: viewer_allclose(); break; case IDM_VIEWMODEREG: viewer_segmode(hWnd, VIEWMODE_REG); break; case IDM_VIEWMODESEG: viewer_segmode(hWnd, VIEWMODE_SEG); break; case IDM_VIEWMODE1MB: viewer_segmode(hWnd, VIEWMODE_1MB); break; case IDM_VIEWMODEASM: viewer_segmode(hWnd, VIEWMODE_ASM); break; case IDM_VIEWMODESND: viewer_segmode(hWnd, VIEWMODE_SND); break; default: return(viewcmn_dispat(hWnd, msg, wParam, lParam)); } break; case WM_PAINT: return(viewcmn_dispat(hWnd, msg, wParam, lParam)); case WM_SIZE: view = viewcmn_find(hWnd); if (view) { RECT rc; GetClientRect(hWnd, &rc); view->step = rc.bottom / 16; viewcmn_setvscroll(hWnd, view); } break; case WM_VSCROLL: view = viewcmn_find(hWnd); if (view) { UINT32 newpos = view->pos; switch(LOWORD(wParam)) { case SB_LINEUP: if (newpos) { newpos--; } break; case SB_LINEDOWN: if (newpos < (view->maxline - view->step)) { newpos++; } break; case SB_PAGEUP: if (newpos > view->step) { newpos -= view->step; } else { newpos = 0; } break; case SB_PAGEDOWN: newpos += view->step; if (newpos > (view->maxline - view->step)) { newpos = view->maxline - view->step; } break; case SB_THUMBTRACK: newpos = HIWORD(wParam) * (view->mul); break; } if (view->pos != newpos) { view->pos = newpos; viewcmn_setvscroll(hWnd, view); InvalidateRect(hWnd, NULL, TRUE); } } break; case WM_ENTERMENULOOP: viewcmn_setmenuseg(hWnd); break; case WM_ACTIVATE: view = viewcmn_find(hWnd); if (view) { if (LOWORD(wParam) != WA_INACTIVE) { view->active = 1; InvalidateRect(hWnd, NULL, TRUE); } else { view->active = 0; } vieweractive_renewal(); } break; case WM_CLOSE: view = viewcmn_find(hWnd); DestroyWindow(hWnd); if (view) { viewer_close(view); vieweractive_renewal(); } break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return(0L); }