Пример #1
0
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);
	}
}
Пример #2
0
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();
}
Пример #3
0
String
bufChars(Buffer s)
{
	return (String) bufData(s);
}