debugger: start basic syntax highlighter
This commit is contained in:
parent
e2b761d9a5
commit
ff1c1e0977
|
@ -392,6 +392,9 @@ BOOL CALLBACK AddbpCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
void HighlightPC()
|
void HighlightPC()
|
||||||
{
|
{
|
||||||
|
if (PCLine == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
FINDTEXT ft;
|
FINDTEXT ft;
|
||||||
ft.lpstrText = ">";
|
ft.lpstrText = ">";
|
||||||
ft.chrg.cpMin = 0;
|
ft.chrg.cpMin = 0;
|
||||||
|
@ -411,8 +414,6 @@ void HighlightPC()
|
||||||
cf.cbSize = sizeof cf;
|
cf.cbSize = sizeof cf;
|
||||||
cf.dwMask = CFM_COLOR;
|
cf.dwMask = CFM_COLOR;
|
||||||
cf.crTextColor = RGB(0,0,255);
|
cf.crTextColor = RGB(0,0,255);
|
||||||
//cf.dwMask = CFM_BACKCOLOR;
|
|
||||||
//cf.crBackColor = RGB(208,255,255);
|
|
||||||
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf);
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -421,6 +422,33 @@ void HighlightPC()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HighlightSyntax(int lines)
|
||||||
|
{
|
||||||
|
int old_start, old_end;
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_GETSEL, (WPARAM)&old_start, (LPARAM)&old_end);
|
||||||
|
|
||||||
|
CHARFORMAT2 cf;
|
||||||
|
memset(&cf, 0, sizeof cf);
|
||||||
|
cf.cbSize = sizeof cf;
|
||||||
|
cf.dwMask = CFM_COLOR;
|
||||||
|
cf.crTextColor = RGB(0,0,128);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETSEL, (WPARAM)20, (LPARAM)23);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf);
|
||||||
|
|
||||||
|
FINDTEXT ft;
|
||||||
|
ft.lpstrText = "\r";
|
||||||
|
ft.chrg.cpMax = -1;
|
||||||
|
int start = 0;
|
||||||
|
for (int line = 1; line <= lines; line++)
|
||||||
|
{
|
||||||
|
ft.chrg.cpMin = start+1;
|
||||||
|
start = SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_FINDTEXT, (WPARAM)FR_DOWN, (LPARAM)&ft);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETSEL, (WPARAM)20+ft.chrg.cpMin, (LPARAM)23+ft.chrg.cpMin);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf);
|
||||||
|
}
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETSEL, (WPARAM)old_start, (LPARAM)old_end);
|
||||||
|
}
|
||||||
|
|
||||||
void Disassemble(HWND hWnd, int id, int scrollid, unsigned int addr)
|
void Disassemble(HWND hWnd, int id, int scrollid, unsigned int addr)
|
||||||
{
|
{
|
||||||
char chr[40] = {0};
|
char chr[40] = {0};
|
||||||
|
@ -584,10 +612,18 @@ void Disassemble(HWND hWnd, int id, int scrollid, unsigned int addr)
|
||||||
strcat(debug_str, "\n");
|
strcat(debug_str, "\n");
|
||||||
instructions_count++;
|
instructions_count++;
|
||||||
}
|
}
|
||||||
SetDlgItemText(hWnd, id, debug_str);
|
|
||||||
|
|
||||||
if (PCLine >= 0)
|
// basic syntax highlighter and due richedit optimizations
|
||||||
HighlightPC();
|
int eventMask = SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETEVENTMASK, 0, 0);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, WM_SETREDRAW, false, 0);
|
||||||
|
|
||||||
|
SetDlgItemText(hWnd, id, debug_str);
|
||||||
|
HighlightSyntax(lines);
|
||||||
|
HighlightPC();
|
||||||
|
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, WM_SETREDRAW, true, 0);
|
||||||
|
InvalidateRect(GetDlgItem(hWnd, id), 0, true);
|
||||||
|
SendDlgItemMessage(hDebug, IDC_DEBUGGER_DISASSEMBLY, EM_SETEVENTMASK, 0, eventMask);
|
||||||
|
|
||||||
// fill the left panel data
|
// fill the left panel data
|
||||||
debug_cdl_str[0] = 0;
|
debug_cdl_str[0] = 0;
|
||||||
|
|
Loading…
Reference in New Issue