GUI: escape unicode and ascii mnemonic characters
This commit is contained in:
parent
7a2e6eb40e
commit
5747342938
|
|
@ -52,6 +52,10 @@ String StringUtils::Escape(unsigned char ch)
|
|||
return "\\\\";
|
||||
case '\"':
|
||||
return "\\\"";
|
||||
case '\a':
|
||||
return "\\a";
|
||||
case '\b':
|
||||
return "\\b";
|
||||
default:
|
||||
if(!isprint(ch)) //unknown unprintable character
|
||||
sprintf_s(buf, "\\x%02X", ch);
|
||||
|
|
|
|||
|
|
@ -275,7 +275,6 @@ Instruction_t QBeaEngine::DecodeDataAt(byte_t* data, duint size, duint origBase,
|
|||
if(infoIter == dataInstMap.end())
|
||||
infoIter = dataInstMap.find(enc_byte);
|
||||
|
||||
|
||||
int len = mEncodeMap->getDataSize(origBase + origInstRVA, 1);
|
||||
|
||||
QString mnemonic = _bLongDataInst ? infoIter.value().longName : infoIter.value().shortName;
|
||||
|
|
@ -316,7 +315,6 @@ void QBeaEngine::UpdateDataInstructionMap()
|
|||
dataInstMap.insert(enc_real10, {"real10", "real10", "long double"});
|
||||
dataInstMap.insert(enc_ascii, {"ascii", "ascii", "string"});
|
||||
dataInstMap.insert(enc_unicode, {"unicode", "unicode", "wstring"});
|
||||
|
||||
}
|
||||
|
||||
void QBeaEngine::setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager)
|
||||
|
|
|
|||
|
|
@ -81,29 +81,6 @@ void CPUInfoBox::clear()
|
|||
setInfoLine(3, "");
|
||||
}
|
||||
|
||||
static QString escapeCh(QChar ch)
|
||||
{
|
||||
switch(ch.unicode())
|
||||
{
|
||||
case '\t':
|
||||
return "\\t";
|
||||
case '\f':
|
||||
return "\\f";
|
||||
case '\v':
|
||||
return "\\v";
|
||||
case '\n':
|
||||
return "\\n";
|
||||
case '\r':
|
||||
return "\\r";
|
||||
case '\\':
|
||||
return "\\\\";
|
||||
case '\"':
|
||||
return "\\\"";
|
||||
default:
|
||||
return QString(1, ch);
|
||||
}
|
||||
}
|
||||
|
||||
QString CPUInfoBox::getSymbolicName(dsint addr)
|
||||
{
|
||||
char labelText[MAX_LABEL_SIZE] = "";
|
||||
|
|
@ -129,13 +106,13 @@ QString CPUInfoBox::getSymbolicName(dsint addr)
|
|||
{
|
||||
QChar c = QChar((char)addr);
|
||||
if(c.isPrint() || c.isSpace())
|
||||
finalText += QString(" '%1'").arg(escapeCh(c));
|
||||
finalText += QString(" '%1'").arg(EscapeCh(c));
|
||||
}
|
||||
else if(addr == (addr & 0xFFF)) //UNICODE?
|
||||
{
|
||||
QChar c = QChar((ushort)addr);
|
||||
if(c.isPrint() || c.isSpace())
|
||||
finalText += QString(" L'%1'").arg(escapeCh(c));
|
||||
finalText += QString(" L'%1'").arg(EscapeCh(c));
|
||||
}
|
||||
}
|
||||
return finalText;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,14 @@ QString DataCopyDialog::printEscapedString(bool & bPrevWasHex, int ch, const cha
|
|||
data = "\\\"";
|
||||
bPrevWasHex = false;
|
||||
break;
|
||||
case '\a':
|
||||
data = "\\a";
|
||||
bPrevWasHex = false;
|
||||
break;
|
||||
case '\b':
|
||||
data = "\\b";
|
||||
bPrevWasHex = false;
|
||||
break;
|
||||
default:
|
||||
if(ch >= ' ' && ch <= '~')
|
||||
{
|
||||
|
|
|
|||
|
|
@ -12,6 +12,35 @@ QString ToLongDoubleString(void* buffer)
|
|||
return str;
|
||||
}
|
||||
|
||||
QString EscapeCh(QChar ch)
|
||||
{
|
||||
switch(ch.unicode())
|
||||
{
|
||||
case '\0':
|
||||
return "\\0";
|
||||
case '\t':
|
||||
return "\\t";
|
||||
case '\f':
|
||||
return "\\f";
|
||||
case '\v':
|
||||
return "\\v";
|
||||
case '\n':
|
||||
return "\\n";
|
||||
case '\r':
|
||||
return "\\r";
|
||||
case '\\':
|
||||
return "\\\\";
|
||||
case '\"':
|
||||
return "\\\"";
|
||||
case '\a':
|
||||
return "\\a";
|
||||
case '\b':
|
||||
return "\\b";
|
||||
default:
|
||||
return QString(1, ch);
|
||||
}
|
||||
}
|
||||
|
||||
QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
|
||||
{
|
||||
switch(type)
|
||||
|
|
@ -23,13 +52,13 @@ QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
|
|||
case enc_dword:
|
||||
return ToIntegralString<unsigned int>(buffer);
|
||||
case enc_fword:
|
||||
return QString(ByteReverse(QByteArray((char*)buffer, 6)).toHex());
|
||||
return QString(ByteReverse(QByteArray((const char*)buffer, 6)).toHex());
|
||||
case enc_qword:
|
||||
return ToIntegralString<unsigned long long int>(buffer);
|
||||
case enc_tbyte:
|
||||
return QString(ByteReverse(QByteArray((char*)buffer, 10)).toHex());
|
||||
return QString(ByteReverse(QByteArray((const char*)buffer, 10)).toHex());
|
||||
case enc_oword:
|
||||
return QString(ByteReverse(QByteArray((char*)buffer, 16)).toHex());
|
||||
return QString(ByteReverse(QByteArray((const char*)buffer, 16)).toHex());
|
||||
case enc_mmword:
|
||||
case enc_xmmword:
|
||||
case enc_ymmword:
|
||||
|
|
@ -41,9 +70,9 @@ QString GetDataTypeString(void* buffer, duint size, ENCODETYPE type)
|
|||
case enc_real10:
|
||||
return ToLongDoubleString(buffer);
|
||||
case enc_ascii:
|
||||
return QString::fromLocal8Bit((const char*)buffer, size);
|
||||
return EscapeCh(*(const char*)buffer);
|
||||
case enc_unicode:
|
||||
return QString::fromWCharArray((const wchar_t*)buffer, size / sizeof(wchar_t));
|
||||
return EscapeCh(*(const wchar_t*)buffer);
|
||||
default:
|
||||
return ToIntegralString<unsigned char>(buffer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,4 +131,6 @@ QString FILETIMEToDate(const FILETIME & date);
|
|||
|
||||
bool GetCommentFormat(duint addr, QString & comment, bool* autoComment = nullptr);
|
||||
|
||||
QString EscapeCh(QChar ch);
|
||||
|
||||
#endif // STRINGUTIL_H
|
||||
|
|
|
|||
Loading…
Reference in New Issue