📄 dasm.cpp
字号:
case block_top:
scheduler.addtask(user_marktopblock,priority_userrequest,nlptr,NULL);
break;
case block_bottom:
scheduler.addtask(user_markbottomblock,priority_userrequest,nlptr,NULL);
break;
case line_jumpto:
scheduler.addtask(user_jumpto,priority_userrequest,nlptr,NULL);
break;
case line_jumptoarg2:
scheduler.addtask(user_jumptoarg2,priority_userrequest,nlptr,NULL);
break;
case Name_Location:
namelocation();
break;
case help_short:
DialogBox(hInst,MAKEINTRESOURCE(help_shortcuts),hwnd,(DLGPROC)helpshortcuts);
break;
case help_about:
DialogBox(hInst,MAKEINTRESOURCE(D_help_about),hwnd,(DLGPROC)habox);
break;
case Jump_Back:
scheduler.addtask(user_jumpback,priority_userrequest,nlptr,NULL);
break;
case main_search:
searchengine();
break;
case search_again:
searchmore();
break;
case set_bg_color:
options.bgcolor=choosecolour(options.bgcolor);
GetClientRect(mainwindow,&tmp_rect);
InvalidateRect(mainwindow,&tmp_rect,true);
scheduler.addtask(windowupdate,priority_window,nlptr,NULL);
break;
case set_high_color:
options.highcolor=choosecolour(options.highcolor);
GetClientRect(mainwindow,&tmp_rect);
InvalidateRect(mainwindow,&tmp_rect,true);
scheduler.addtask(windowupdate,priority_window,nlptr,NULL);
break;
case set_text_color:
options.textcolor=choosecolour(options.textcolor);
GetClientRect(mainwindow,&tmp_rect);
InvalidateRect(mainwindow,&tmp_rect,true);
scheduler.addtask(windowupdate,priority_window,nlptr,NULL);
break;
case font_system:
options.font=systemfont;
setupfont();
break;
case font_courier:
options.font=courierfont;
setupfont();
break;
case font_courier10:
options.font=courierfont10;
setupfont();
break;
case font_courier12:
options.font=courierfont12;
setupfont();
break;
case font_ansi:
options.font=ansifont;
setupfont();
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
break;
case WM_CHAR:
if(charinputenabled)
switch(wParam)
{ case 'c':
scheduler.addtask(user_makecode,priority_userrequest,nlptr,NULL);
break;
case 'C':
scheduler.addtask(user_argoverchar,priority_userrequest,nlptr,NULL);
break;
case 'd':
scheduler.addtask(user_makedword,priority_userrequest,nlptr,NULL);
break;
case 'D':
scheduler.addtask(user_argoverdec,priority_userrequest,nlptr,NULL);
break;
case 'H':
scheduler.addtask(user_argoverhex,priority_userrequest,nlptr,NULL);
break;
case '-':
scheduler.addtask(user_argnegate,priority_userrequest,nlptr,NULL);
break;
case 'n':
namelocation();
break;
case ';':
getcomment();
break;
case 'o':
scheduler.addtask(user_argoveroffsetdseg,priority_userrequest,nlptr,NULL);
break;
case 'p':
scheduler.addtask(user_pascalstring,priority_userrequest,nlptr,NULL);
break;
case 's':
scheduler.addtask(user_makestring,priority_userrequest,nlptr,NULL);
break;
case 'u':
scheduler.addtask(user_undefineline,priority_userrequest,nlptr,NULL);
break;
case 'U':
scheduler.addtask(user_undefinelines,priority_userrequest,nlptr,NULL);
break;
case 'w':
scheduler.addtask(user_makeword,priority_userrequest,nlptr,NULL);
break;
case 't':
scheduler.addtask(user_marktopblock,priority_userrequest,nlptr,NULL);
break;
case 'b':
scheduler.addtask(user_markbottomblock,priority_userrequest,nlptr,NULL);
break;
default:
break;
}
break;
case WM_LBUTTONDOWN:
dio.setpos(HIWORD(lParam));
break;
case WM_RBUTTONDOWN:
dio.setpos(HIWORD(lParam));
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
ClientToScreen(mainwindow,&point);
TrackPopupMenu(rmenu,0,point.x,point.y,0,mainwindow,NULL);
break;
case WM_PAINT:
if(!KillThread)
DoPaint(hwnd,cxChar,cyChar);
else
PaintBack(hwnd);
//ValidateRect(mainwindow,NULL);
break;
case WM_CLOSE:
if(MessageBox(mainwindow,"Are you sure that you want to exit Borg ?\n\rHit Yes To Exit\n\rHit No to Stay","Borg Disassembler",
MB_ICONEXCLAMATION|MB_YESNO)==IDNO)
break;
scheduler.stopthread();
scheduler.addtask(quitborg,priority_quit,nlptr,NULL);
KillThread=true;
if(InThread)
SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL);
DestroyWindow(mainwindow);
return 0;
case WM_DESTROY:
save_reg_entries();
KillThread=true;
killcount=0;
Sleep(0);
SetPriorityClass(ThreadHandle,HIGH_PRIORITY_CLASS);
if(InThread)
while(TestThread())
{ killcount++;
if(killcount>2)
{ // this is a nasty way of getting out.
// sometimes the thread just will not exit nicely when its busy.
if(TerminateThread(ThreadHandle,1))
{ CloseHandle(ThreadHandle);
break;
}
}
}
DeleteCriticalSection(&cs);
PostQuitMessage(0);
break;
case WM_SIZE:
if(wParam==SIZE_MAXIMIZED)
options.winmax=true;
else if (wParam==SIZE_RESTORED)
options.winmax=false;
mainwndsize.top=0;
mainwndsize.left=0;
mainwndsize.right=LOWORD(lParam);
mainwndsize.bottom=HIWORD(lParam);
GetWindowRect(hwndStatusBar,&StatusWindowSize);
GetWindowRect(mainwindow,&mainwnd);
MoveWindow(hwndStatusBar,0,mainwndsize.bottom-StatusWindowSize.bottom+StatusWindowSize.top,
mainwndsize.right,StatusWindowSize.bottom-StatusWindowSize.top,true);
break;
case WM_VSCROLL:
switch(LOWORD(wParam))
{ case SB_TOP:
break;
case SB_BOTTOM:
break;
case SB_LINEUP:
scrll.assign(0,-1);
if(InThread)
scheduler.addtask(scrolling,priority_userrequest,scrll,NULL);
break;
case SB_LINEDOWN:
scrll.assign(0,1);
if(InThread)
scheduler.addtask(scrolling,priority_userrequest,scrll,NULL);
break;
case SB_PAGEUP:
scrll.assign(0,-mainwndsize.bottom/cyChar+1);
if(InThread)
scheduler.addtask(scrolling,priority_userrequest,scrll,NULL);
break;
case SB_PAGEDOWN:
scrll.assign(0,mainwndsize.bottom/cyChar-1);
if(InThread)
scheduler.addtask(scrolling,priority_userrequest,scrll,NULL);
break;
case SB_THUMBPOSITION:
scrll.assign(0,HIWORD(wParam));
if(InThread)
scheduler.addtask(vthumbposition,priority_userrequest,scrll,NULL);
break;
default:
break;
}
break;
case WM_HSCROLL:
switch(LOWORD(wParam))
{ case SB_LINEUP:
scrll.assign(0,-1);
scheduler.addtask(hscroll,priority_userrequest,scrll,NULL);
break;
case SB_LINEDOWN:
scrll.assign(0,1);
scheduler.addtask(hscroll,priority_userrequest,scrll,NULL);
break;
case SB_PAGEUP:
scrll.assign(0,-8);
scheduler.addtask(hscroll,priority_userrequest,scrll,NULL);
break;
case SB_PAGEDOWN:
scrll.assign(0,8);
scheduler.addtask(hscroll,priority_userrequest,scrll,NULL);
break;
case SB_THUMBPOSITION:
scrll.assign(0,HIWORD(wParam));
if(InThread)
scheduler.addtask(hthumbposition,priority_userrequest,scrll,NULL);
break;
default:
break;
}
break;
case WM_REPEATNAMEVIEW:
namesviewer();
break;
case WM_REPEATXREFVIEW:
xrefsviewer();
break;
// maximises window, used when the reg is read in at the start to maximise
// the main window after initialisation of it
case WM_MAXITOUT:
ShowWindow(mainwindow,SW_MAXIMIZE);
break;
case WM_CREATE:
optionsinit();
hdc=GetDC(hwnd);
SelectObject(hdc,GetStockObject(ANSI_FIXED_FONT));
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
cyChar=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
InitializeCriticalSection(&cs);
hwndStatusBar=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|CCS_BOTTOM,
"No File Loaded",hwnd,2);
GetWindowRect(hwndStatusBar,&StatusWindowSize);
GetWindowRect(mainwindow,&mainwnd);
SetScrollRange(hwnd,SB_VERT,0,VERTSCROLLRANGE,false);
SetScrollPos(hwnd,SB_VERT,0,false);
KillThread=false;
InThread=false;
rmenu=LoadMenu(hInst,MAKEINTRESOURCE(right_click_menu));
rmenu=GetSubMenu(rmenu,0);
load_reg_entries();
setupfont();
break;
case WM_KEYDOWN:
if(!charinputenabled) break;
switch(wParam)
{ case VK_HOME:
SendMessage(hwnd,WM_VSCROLL,SB_TOP,0L);
break;
case VK_PRIOR:
SendMessage(hwnd,WM_VSCROLL,SB_PAGEUP,0L);
break;
case VK_NEXT:
SendMessage(hwnd,WM_VSCROLL,SB_PAGEDOWN,0L);
break;
case VK_DOWN:
SendMessage(hwnd,WM_VSCROLL,SB_LINEDOWN,0L);
break;
case VK_UP:
SendMessage(hwnd,WM_VSCROLL,SB_LINEUP,0L);
break;
case VK_LEFT:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -