2015-02-13 16:59:11 +03:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "FalloutScript.h"
|
|
|
|
|
|
|
|
|
|
// CFalloutScript
|
|
|
|
|
void CFalloutScript::Dump(CArchive& ar)
|
|
|
|
|
{
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Procedures table ==================\n");
|
|
|
|
|
ar.WriteString("\n");
|
|
|
|
|
m_ProcTable.Dump(ar);
|
|
|
|
|
ar.WriteString("\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Namespace ==================\n");
|
|
|
|
|
m_Namespace.Dump(ar);
|
|
|
|
|
ar.WriteString("\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Stringspace ==================\n");
|
|
|
|
|
m_Stringspace.Dump(ar);
|
|
|
|
|
ar.WriteString("\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
|
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
CString strOutLine;
|
|
|
|
|
WORD wOperator;
|
|
|
|
|
ULONG ulArgument = 0;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Global variables values ==================\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-13 23:09:21 +03:00
|
|
|
if (m_GlobalVar.IsEmpty())
|
|
|
|
|
{
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("Not found\n");
|
|
|
|
|
}
|
2015-02-13 23:09:21 +03:00
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for(unsigned int i = 0; i < m_GlobalVar.GetSize(); i++)
|
|
|
|
|
{
|
2015-02-13 16:59:11 +03:00
|
|
|
wOperator = m_GlobalVar.at(i).GetOperator();
|
|
|
|
|
ulArgument = m_GlobalVar.at(i).GetArgument();
|
|
|
|
|
|
2015-02-13 23:09:21 +03:00
|
|
|
switch(wOperator)
|
|
|
|
|
{
|
2015-02-14 13:39:47 +03:00
|
|
|
case COpcode::O_STRINGOP:
|
|
|
|
|
case COpcode::O_INTOP:
|
|
|
|
|
strOutLine.Format("%d: %s(0x%08x) // %u (%d)\n",
|
|
|
|
|
i,
|
2015-02-13 16:59:11 +03:00
|
|
|
m_GlobalVar.at(i).GetAttributes().m_strMnemonic.c_str(),
|
|
|
|
|
ulArgument,
|
|
|
|
|
ulArgument,
|
|
|
|
|
ulArgument);
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
break;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
case COpcode::O_FLOATOP:
|
|
|
|
|
strOutLine.Format("%d: %s(0x%08x) // %05f\n",
|
|
|
|
|
i,
|
2015-02-13 16:59:11 +03:00
|
|
|
m_GlobalVar.at(i).GetAttributes().m_strMnemonic.c_str(),
|
2015-02-14 13:39:47 +03:00
|
|
|
ulArgument,
|
|
|
|
|
*((float*)(&ulArgument)));
|
|
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Exported variables ==================\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
if (m_ExportedVarValue.IsEmpty()) {
|
|
|
|
|
ar.WriteString("Not found\n");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
for(INT_PTR i = 0; i < m_ExportedVarValue.GetSize(); i += 2) {
|
2015-02-13 16:59:11 +03:00
|
|
|
wOperator = m_ExportedVarValue.at(i).GetOperator();
|
|
|
|
|
ulArgument = m_ExportedVarValue.at(i).GetArgument();
|
|
|
|
|
ULONG ulNameArgument = m_ExportedVarValue.at(i + 1).GetArgument();
|
|
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
switch(wOperator) {
|
|
|
|
|
case COpcode::O_STRINGOP:
|
|
|
|
|
strOutLine.Format("%s := \"%s\"\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_Namespace[ulNameArgument].c_str(),
|
|
|
|
|
m_Stringspace[ulArgument].c_str());
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
break;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
case COpcode::O_INTOP:
|
|
|
|
|
strOutLine.Format("%s := %u (%d)\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_Namespace[ulNameArgument].c_str(),
|
2015-02-14 13:39:47 +03:00
|
|
|
ulArgument,
|
|
|
|
|
ulArgument);
|
|
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
break;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
case COpcode::O_FLOATOP:
|
|
|
|
|
strOutLine.Format("%s := %05f\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_Namespace[ulNameArgument].c_str(),
|
2015-02-14 13:39:47 +03:00
|
|
|
*((float*)(&ulArgument)));
|
|
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("============== Procedures ==================\n");
|
|
|
|
|
ar.WriteString("\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
for(INT_PTR nIndexOfProc = 0; nIndexOfProc < m_ProcTable.GetSize(); nIndexOfProc++) {
|
2015-02-13 16:59:11 +03:00
|
|
|
strOutLine.Format("%d: %s (0x%08x)\n", nIndexOfProc,
|
|
|
|
|
m_Namespace[m_ProcTable[nIndexOfProc].m_ulNameOffset].c_str(),
|
|
|
|
|
m_ProcTable[nIndexOfProc].m_ulBodyOffset
|
|
|
|
|
);
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
ar.WriteString("===============================\n");
|
2015-02-13 16:59:11 +03:00
|
|
|
|
|
|
|
|
for(INT_PTR i = 0; i < m_ProcBodies.at(nIndexOfProc).GetSize(); i++) {
|
|
|
|
|
wOperator = m_ProcBodies.at(nIndexOfProc).at(i).m_Opcode.GetOperator();
|
|
|
|
|
ulArgument = m_ProcBodies.at(nIndexOfProc).at(i).m_Opcode.GetArgument();
|
|
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
switch(wOperator) {
|
|
|
|
|
case COpcode::O_STRINGOP:
|
|
|
|
|
case COpcode::O_INTOP:
|
|
|
|
|
strOutLine.Format("0x%08X: 0x%04X 0x%08x - %s(0x%08x) // %u (%d)\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_ulOffset,
|
2015-02-14 13:39:47 +03:00
|
|
|
wOperator,
|
|
|
|
|
ulArgument,
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_Opcode.GetAttributes().m_strMnemonic.c_str(),
|
2015-02-14 13:39:47 +03:00
|
|
|
ulArgument,
|
|
|
|
|
ulArgument,
|
|
|
|
|
ulArgument);
|
|
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
break;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
case COpcode::O_FLOATOP:
|
|
|
|
|
strOutLine.Format("0x%08X: 0x%04X 0x%08X - %s // %05f\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_ulOffset,
|
2015-02-14 13:39:47 +03:00
|
|
|
wOperator,
|
|
|
|
|
ulArgument,
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_Opcode.GetAttributes().m_strMnemonic.c_str(),
|
2015-02-14 13:39:47 +03:00
|
|
|
*((float*)(&ulArgument)));
|
|
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
break;
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
default:
|
|
|
|
|
strOutLine.Format("0x%08X: 0x%04X - %s\n",
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_ulOffset,
|
2015-02-14 13:39:47 +03:00
|
|
|
wOperator,
|
2015-02-13 16:59:11 +03:00
|
|
|
m_ProcBodies.at(nIndexOfProc).at(i).m_Opcode.GetAttributes().m_strMnemonic.c_str());
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString(strOutLine);
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-13 16:59:11 +03:00
|
|
|
|
2015-02-14 13:39:47 +03:00
|
|
|
ar.WriteString("\n");
|
|
|
|
|
}
|
2015-02-13 16:59:11 +03:00
|
|
|
}
|