void CHbgPatchDialog::OnEnChangeEditPatch() { CString strInput, strOnput; m_editPatch.GetWindowText(strInput); SIZE_T lenInput = strInput.GetLength(); if (!lenInput) { m_editInfo.SetWindowText(NULL); return; } if (!(lenInput % 2)) { SIZE_T lenBuf = lenInput / 2; CHbgMemPtr bufData(lenBuf); _Convert(strInput, bufData); SIZE_T nRead = 0; if (m_bCode) { HbgDasmInfo dasmInfo; SIZE_T sz = 0; while (nRead < lenBuf) { HbgDasmInit(dasmInfo, HBGDASM_OPT_RETLENGTH | HBGDASM_OPT_GETDASM/* | HBGDASM_OPT_GETOPCODE*/, bufData + nRead, lenBuf - nRead, m_address); sz = HbgDasmParse(dasmInfo); if (!sz) break; if (nRead) strOnput.Append(L"\r\n"); nRead += sz; strOnput.Append(dasmInfo.dasm); } } else { while (nRead < lenBuf) { WCHAR tmpChar[2] = {0, 0}; *tmpChar = *(bufData + nRead); ++nRead; if (*tmpChar < 0x0080) { if ((*tmpChar >= 0x0021) && (*tmpChar <= 0x007E)) strOnput.Append(tmpChar); else strOnput.Append(L"."); } else { strOnput.Append(L"?"); } } } m_editInfo.SetWindowText(strOnput); } }
void CHbgPatchDialog::OnOK() { CString strPatch; m_editPatch.GetWindowText(strPatch); DWORD lenPatch = strPatch.GetLength() / 2; CHbgMemPtr bufData(lenPatch); _Convert(strPatch, bufData); static_cast<CHbgMainApp*>(AfxGetApp())->HbgGetEngine()->WriteMemory(m_address, lenPatch, bufData); CDialog::OnOK(); }
String bufChars(Buffer s) { return (String) bufData(s); }