summaryrefslogtreecommitdiff
path: root/src/ildasm
diff options
context:
space:
mode:
authormikedn <onemihaid@hotmail.com>2017-01-19 01:49:36 +0200
committerJan Kotas <jkotas@microsoft.com>2017-01-18 15:49:36 -0800
commit69e9c8a6b5bbacaa85b4b7953796364cca02a6a5 (patch)
treee60d4c40a983444374bbb0024a767bf84152844f /src/ildasm
parente312e9ab50322b522060fa121d9ed0ddd3a8f4d9 (diff)
downloadcoreclr-69e9c8a6b5bbacaa85b4b7953796364cca02a6a5.tar.gz
coreclr-69e9c8a6b5bbacaa85b4b7953796364cca02a6a5.tar.bz2
coreclr-69e9c8a6b5bbacaa85b4b7953796364cca02a6a5.zip
Remove ILDASM GUI cruft (#8954)
Diffstat (limited to 'src/ildasm')
-rw-r--r--src/ildasm/Litening.icobin766 -> 0 bytes
-rw-r--r--src/ildasm/class.bmpbin3126 -> 0 bytes
-rw-r--r--src/ildasm/classa.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classag.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classe.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classeg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classi.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classig.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classv.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/classvg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/dasm.cpp227
-rw-r--r--src/ildasm/dasm.rc245
-rw-r--r--src/ildasm/dasm_pr.cpp275
-rw-r--r--src/ildasm/dasmgui.h15
-rw-r--r--src/ildasm/dasmhlp.hhc32
-rw-r--r--src/ildasm/dis.cpp35
-rw-r--r--src/ildasm/dman.cpp22
-rw-r--r--src/ildasm/dres.cpp1
-rw-r--r--src/ildasm/event.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/exe/CMakeLists.txt4
-rw-r--r--src/ildasm/field.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/gui.cpp4013
-rw-r--r--src/ildasm/gui.h155
-rw-r--r--src/ildasm/html/clicking.htm35
-rw-r--r--src/ildasm/html/keyboard.htm166
-rw-r--r--src/ildasm/html/menu_options.htm324
-rw-r--r--src/ildasm/html/tree_view_icons.htm102
-rw-r--r--src/ildasm/html/tree_view_icons_files/class.gifbin960 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/enum.gifbin987 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/event.gifbin963 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/field.gifbin965 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/interface.gifbin981 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIFbin843 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpgbin723 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/manifest_classinfo.pngbin926 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/method.gifbin963 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/namespace.gifbin969 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/property.gifbin961 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/static_field.gifbin978 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/static_method.gifbin977 -> 0 bytes
-rw-r--r--src/ildasm/html/tree_view_icons_files/value_class.gifbin960 -> 0 bytes
-rw-r--r--src/ildasm/ildasm.chmbin18371 -> 0 bytes
-rw-r--r--src/ildasm/ildasm.hhp36
-rw-r--r--src/ildasm/map.h8
-rw-r--r--src/ildasm/method.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/methodg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/namespace.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/prop.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/rcdll/CMakeLists.txt2
-rw-r--r--src/ildasm/redarrow.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/resource.h57
-rw-r--r--src/ildasm/staticfield.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/staticmethod.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/staticmethodg.bmpbin1318 -> 0 bytes
-rw-r--r--src/ildasm/windasm.cpp133
55 files changed, 25 insertions, 5862 deletions
diff --git a/src/ildasm/Litening.ico b/src/ildasm/Litening.ico
deleted file mode 100644
index 7bdaa4f1e9..0000000000
--- a/src/ildasm/Litening.ico
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/class.bmp b/src/ildasm/class.bmp
deleted file mode 100644
index 1574b641df..0000000000
--- a/src/ildasm/class.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classa.bmp b/src/ildasm/classa.bmp
deleted file mode 100644
index d0467c45e3..0000000000
--- a/src/ildasm/classa.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classag.bmp b/src/ildasm/classag.bmp
deleted file mode 100644
index 72793ce02f..0000000000
--- a/src/ildasm/classag.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classe.bmp b/src/ildasm/classe.bmp
deleted file mode 100644
index a5f641c915..0000000000
--- a/src/ildasm/classe.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classeg.bmp b/src/ildasm/classeg.bmp
deleted file mode 100644
index 3aeded1ed2..0000000000
--- a/src/ildasm/classeg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classi.bmp b/src/ildasm/classi.bmp
deleted file mode 100644
index 74d64feb09..0000000000
--- a/src/ildasm/classi.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classig.bmp b/src/ildasm/classig.bmp
deleted file mode 100644
index 79b43144a9..0000000000
--- a/src/ildasm/classig.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classv.bmp b/src/ildasm/classv.bmp
deleted file mode 100644
index ecf345ac05..0000000000
--- a/src/ildasm/classv.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/classvg.bmp b/src/ildasm/classvg.bmp
deleted file mode 100644
index a77f99b359..0000000000
--- a/src/ildasm/classvg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/dasm.cpp b/src/ildasm/dasm.cpp
index 86ff5a8932..7b6bca926e 100644
--- a/src/ildasm/dasm.cpp
+++ b/src/ildasm/dasm.cpp
@@ -17,7 +17,6 @@
#include "dasmenum.hpp"
#include "dis.h"
-#include "dasmgui.h"
#include "resource.h"
#include "dasm_sz.h"
@@ -35,13 +34,6 @@
#include <corcompile.h>
#endif
-#ifndef FEATURE_CORECLR
-// Define also LegacyActivationShim::CoInitializeEE wrapper around CoInitializeEE
-#define LEGACY_ACTIVATION_SHIM_DEFINE_CoInitializeEE
-#include "LegacyActivationShim.h"
-#include "clrinternal.h"
-#endif
-
#ifdef FEATURE_PAL
#include "coreclrloader.h"
#include "resourcestring.h"
@@ -119,7 +111,6 @@ BOOL g_fHidePrivScope = TRUE;
BOOL g_fProject = FALSE; // if .winmd file, transform to .NET view
extern BOOL g_fQuoteAllNames; // declared in formatType.cpp, init to FALSE
-BOOL g_fShowProgressBar = TRUE;
BOOL g_fForwardDecl=FALSE;
char g_szAsmCodeIndent[MAX_MEMBER_LENGTH];
@@ -170,8 +161,6 @@ void DisplayFile(__in __nullterminated wchar_t* szFile,
__in_opt __nullterminated wchar_t* szObjFile,
strPassBackFn pDisplayString);
extern mdMethodDef g_tkEntryPoint; // integration with MetaInfo
-// Abort disassembly flag:
-BOOL g_fAbortDisassembly = FALSE;
DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP
@@ -319,12 +308,6 @@ extern CQuickBytes * g_szBuf_JUMPPT;
extern CQuickBytes * g_szBuf_UnquotedProperName;
extern CQuickBytes * g_szBuf_ProperName;
-#ifndef FEATURE_CORECLR
-// CLR internal hosting API
-ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal = NULL;
-#endif
-
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
CoreCLRLoader *g_loader;
#endif
@@ -332,11 +315,9 @@ MetaDataGetDispenserFunc metaDataGetDispenser;
GetMetaDataInternalInterfaceFunc getMetaDataInternalInterface;
GetMetaDataInternalInterfaceFromPublicFunc getMetaDataInternalInterfaceFromPublic;
GetMetaDataPublicInterfaceFromInternalFunc getMetaDataPublicInterfaceFromInternal;
-#endif
BOOL Init()
{
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
g_loader = CoreCLRLoader::Create(g_pszExeFile);
if (g_loader == NULL)
@@ -353,37 +334,7 @@ BOOL Init()
getMetaDataInternalInterfaceFromPublic = (GetMetaDataInternalInterfaceFromPublicFunc)GetMetaDataInternalInterfaceFromPublic;
getMetaDataPublicInterfaceFromInternal = (GetMetaDataPublicInterfaceFromInternalFunc)GetMetaDataPublicInterfaceFromInternal;
#endif // FEATURE_PAL
-#else // FEATURE_CORECLR
- if (FAILED(CoInitialize(NULL)))
- {
- return FALSE;
- }
-
- if (FAILED(LegacyActivationShim::CoInitializeCor(COINITCOR_DEFAULT)))
- {
- return FALSE;
- }
-
- if (FAILED(LegacyActivationShim::CoInitializeEE(COINITEE_DEFAULT)))
- {
- return FALSE;
- }
-
- ICLRRuntimeInfo *pCLRRuntimeInfo = NULL;
- if (FAILED(LegacyActivationShim::Util::GetCLRRuntimeInfo(&pCLRRuntimeInfo)))
- {
- return FALSE;
- }
-
- if (FAILED(pCLRRuntimeInfo->GetInterface(
- CLSID_CLRRuntimeHostInternal,
- IID_ICLRRuntimeHostInternal,
- (LPVOID *)&g_pCLRRuntimeHostInternal)))
- {
- return FALSE;
- }
-#endif // FEATURE_CORECLR
-
+
g_szBuf_KEYWORD = new CQuickBytes();
g_szBuf_COMMENT = new CQuickBytes();
g_szBuf_ERRORMSG = new CQuickBytes();
@@ -482,10 +433,6 @@ void Cleanup()
void Uninit()
{
-#ifndef FEATURE_CORECLR
- GUIAddOpcode(NULL,NULL);
-#endif
-
if (g_pPtrTags != NULL)
{
SDELETE(g_pPtrTags);
@@ -541,24 +488,12 @@ void Uninit()
SDELETE(g_szBuf_ProperName);
}
-#ifdef FEATURE_CORECLR
#ifdef FEATURE_PAL
if (g_loader != NULL)
{
g_loader->Finish();
}
#endif
-#else
- if (g_pCLRRuntimeHostInternal != NULL)
- {
- g_pCLRRuntimeHostInternal->Release();
- g_pCLRRuntimeHostInternal = NULL;
- }
-
- LegacyActivationShim::CoUninitializeEE(COUNINITEE_DEFAULT);
- LegacyActivationShim::CoUninitializeCor();
- CoUninitialize();
-#endif
} // Uninit
HRESULT IsClassRefInScope(mdTypeRef classref)
@@ -1695,17 +1630,10 @@ mdToken TypeRefToTypeDef(mdToken tk, IMDInternalImport *pIMDI, IMDInternalImport
IUnknown *pUnk;
if(FAILED(pIAMDI[0]->QueryInterface(IID_IUnknown, (void**)&pUnk))) goto AssignAndReturn;
-#ifdef FEATURE_CORECLR
if (FAILED(getMetaDataInternalInterfaceFromPublic(
pUnk,
IID_IMDInternalImport,
(LPVOID *)ppIMDInew)))
-#else
- if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterfaceFromPublic(
- pUnk,
- IID_IMDInternalImport,
- (LPVOID *)ppIMDInew)))
-#endif
{
goto AssignAndReturn;
}
@@ -4650,7 +4578,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
#if (0)
- if((!IsTdNested(dwClassAttrs))&&(!(g_Mode & MODE_GUI))) // don't dump namespaces in GUI mode!
+ if((!IsTdNested(dwClassAttrs)))
{
// take care of namespace, if any
if(strcmp(pszNamespace,g_szNamespace))
@@ -4905,11 +4833,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(g_cl_enclosing[i] == cl)
{
DumpClass(g_cl_list[i],dwEntryPointToken,GUICookie,WhatToDumpOrig);
- if(g_fAbortDisassembly)
- {
- g_Mode = dwMode;
- return FALSE;
- }
fRegetClassLayout = TRUE;
}
}
@@ -4920,9 +4843,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(WhatToDump & 4)
{
DumpMembers(cl, pszNamespace, pszClassName, dwClassAttrs, dwEntryPointToken,GUICookie);
-#ifndef FEATURE_CORECLR
- if(!ProgressStep()) g_fAbortDisassembly = TRUE;
-#endif
}
if(g_szAsmCodeIndent[0]) g_szAsmCodeIndent[strlen(g_szAsmCodeIndent)-2] = 0;
@@ -4931,10 +4851,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha
if(*pszNamespace != 0) szptr+=sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s.",ProperName(pszNamespace));
sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s%s", ProperName(pszClassName),COMMENT((char*)-1));
printLine(GUICookie,szString);
- if(!(g_Mode & MODE_GUI))
- {
- printLine(GUICookie,"");
- }
+ printLine(GUICookie,"");
g_tkVarOwner = tkVarOwner;
return TRUE;
}
@@ -4953,7 +4870,7 @@ void DumpGlobalMethods(DWORD dwEntryPointToken)
for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
{
- if ((i == 0)&&(!(g_Mode & MODE_GUI)))
+ if (i == 0)
{
printLine(g_pFile,"");
printLine(g_pFile,COMMENT("// ================== GLOBAL METHODS ========================="));
@@ -4961,14 +4878,6 @@ void DumpGlobalMethods(DWORD dwEntryPointToken)
}
if(DumpMethod(FuncToken, NULL, dwEntryPointToken, g_pFile, TRUE)&&
(g_Mode == MODE_DUMP_CLASS_METHOD || g_Mode == MODE_DUMP_CLASS_METHOD_SIG)) break;
-
-#ifndef FEATURE_CORECLR
- if(!ProgressStep())
- {
- g_fAbortDisassembly = TRUE;
- break;
- }
-#endif
}
g_pImport->EnumClose(&hEnumMethod);
if(i)
@@ -4991,7 +4900,7 @@ void DumpGlobalFields()
for (i = 0; g_pImport->EnumNext(&hEnum, &FieldToken); i++)
{
- if ((i == 0)&&(!(g_Mode & MODE_GUI)))
+ if (i == 0)
{
printLine(g_pFile,"");
printLine(g_pFile,COMMENT("// ================== GLOBAL FIELDS =========================="));
@@ -5019,8 +4928,6 @@ void DumpVTables(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
if (VAL32(CORHeader->VTableFixups.VirtualAddress) == 0) return;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
-
sprintf_s(szString,SZSTRING_SIZE,"// VTableFixup Directory:");
printLine(GUICookie,szStr);
@@ -5087,7 +4994,6 @@ void DumpEATTable(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
DWORD BufferRVA;
DWORD i;
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// Export Address Table Jumps:");
printLine(GUICookie,szStr);
@@ -5143,7 +5049,6 @@ exit:
void DumpCodeManager(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// Code Manager Table:");
printLine(GUICookie,szStr);
if (!VAL32(CORHeader->CodeManagerTable.Size))
@@ -5180,7 +5085,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie)
{
char* szStr = &szString[0];
char name[16];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
printLine(GUICookie,"");
strcpy_s(szString,SZSTRING_SIZE,"// Image sections:");
printLine(GUICookie,szStr);
@@ -5280,7 +5184,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie)
void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
if (!VAL32(pDir->Size))
@@ -5322,7 +5225,7 @@ void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICook
void DumpIAT(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
if (!VAL32(pDir->Size))
@@ -5398,7 +5301,7 @@ struct MDStreamHeader
void DumpMetadataHeader(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
printLine(GUICookie,"");
sprintf_s(szString,SZSTRING_SIZE,"// %s", szName);
printLine(GUICookie,szStr);
@@ -5501,7 +5404,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo
char* szStr = &szString[0];
char* szptr = szStr+2;
DWORD i;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
printLine(GUICookie,"");
strcpy_s(szString,SZSTRING_SIZE,"// Entry point code:");
printLine(GUICookie,szStr);
@@ -5531,7 +5434,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo
void DumpHeader(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
{
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
+
DWORD dwAddrOfEntryPoint=0, dwEntryPointSize=0;
PIMAGE_DOS_HEADER pDOSHeader = g_pPELoader->dosHeader();
@@ -5905,8 +5808,6 @@ void DumpTable(unsigned long Table, const char *TableName, void* GUICookie)
int size;
ULONG sizeRec, count;
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
-
// Record that this table has been seen.
TableSeen(Table);
@@ -5942,7 +5843,6 @@ void DumpStatistics(IMAGE_COR20_HEADER *CORHeader, void* GUICookie)
ULONG sizeRec, count;
char buf[MAX_MEMBER_LENGTH];
char* szStr = &szString[0];
- if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode
TableSeenReset();
metaSize = 0;
@@ -6965,7 +6865,7 @@ void DumpMI(__in __nullterminated const char *str)
strcpy_s(szString,5,"// ");
fInit = FALSE;
GUICookie = (void*)str;
- if(g_Mode & MODE_GUI) szStr = &szString[3]; // don't need "//" in GUI mode
+
return;
}
// Normal work
@@ -7011,18 +6911,8 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul
if(pch && (!_wcsicmp(pch+1,W("lib")) || !_wcsicmp(pch+1,W("obj"))))
{ // This works only when all the rest does not
// Init and run.
-#ifdef FEATURE_CORECLR
if (metaDataGetDispenser(CLSID_CorMetaDataDispenser,
IID_IMetaDataDispenserEx, (void **)&g_pDisp))
-#else
- if(SUCCEEDED(CoInitialize(0)))
- {
- if(SUCCEEDED(LegacyActivationShim::CoInitializeCor(0)))
- {
- if (SUCCEEDED(LegacyActivationShim::ClrCoCreateInstance(
- CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER,
- IID_IMetaDataDispenserEx, (void **) &g_pDisp)))
-#endif
{
WCHAR *pwzObjFileName=NULL;
if (pszObjFileName)
@@ -7037,39 +6927,25 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul
g_pDisp = NULL;
if (pwzObjFileName) VDELETE(pwzObjFileName);
}
-#ifndef FEATURE_CORECLR
- LegacyActivationShim::CoUninitializeCor();
- }
- CoUninitialize();
- }
-#endif
}
else
{
HRESULT hr = S_OK;
if(g_pDisp == NULL)
{
-#ifdef FEATURE_CORECLR
hr = metaDataGetDispenser(CLSID_CorMetaDataDispenser,
IID_IMetaDataDispenserEx, (void **)&g_pDisp);
-#else
- hr = LegacyActivationShim::ClrCoCreateInstance(
- CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER,
- IID_IMetaDataDispenserEx, (void **) &g_pDisp);
-#endif
}
if(SUCCEEDED(hr))
{
g_ValModuleType = ValidatorModuleTypePE;
if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport(NULL);
- if(!(g_Mode & MODE_GUI))
- printLine(GUICookie,RstrUTF(IDS_E_MISTART));
+ printLine(GUICookie,RstrUTF(IDS_E_MISTART));
//MDInfo metaDataInfo(g_pPubImport, g_pAssemblyImport, (LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter);
MDInfo metaDataInfo(g_pDisp,(LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter);
metaDataInfo.SetVEHandlerReporter((__int64) (size_t) VEHandlerReporter);
metaDataInfo.DisplayMD();
- if(!(g_Mode & MODE_GUI))
- printLine(GUICookie,RstrUTF(IDS_E_MIEND));
+ printLine(GUICookie,RstrUTF(IDS_E_MIEND));
}
}
DumpMI((char*)-1); // reset the print function for DumpMetaInfo
@@ -7442,7 +7318,6 @@ BOOL DumpFile()
const char *pszFilename = g_szInputFile;
const DWORD openFlags = ofRead | (g_fProject ? 0 : ofNoTransform);
- if(!(g_Mode & MODE_GUI))
{
if(g_fDumpHTML)
{
@@ -7465,8 +7340,7 @@ BOOL DumpFile()
char* pch = strrchr(g_szInputFile,'.');
if(pch && (!_stricmp(pch+1,"lib") || !_stricmp(pch+1,"obj")))
{
- if(!(g_Mode & MODE_GUI))
- DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile);
+ DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile);
return FALSE;
}
}
@@ -7542,21 +7416,12 @@ BOOL DumpFile()
g_cbMetaData = VAL32(g_CORHeader->MetaData.Size);
}
-#ifdef FEATURE_CORECLR
if (FAILED(getMetaDataInternalInterface(
(BYTE *)g_pMetaData,
g_cbMetaData,
openFlags,
IID_IMDInternalImport,
(LPVOID *)&g_pImport)))
-#else
- if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface(
- (BYTE *)g_pMetaData,
- g_cbMetaData,
- openFlags,
- IID_IMDInternalImport,
- (LPVOID *)&g_pImport)))
-#endif
{
if (g_fDumpHeader)
DumpHeader(g_CORHeader, g_pFile);
@@ -7565,11 +7430,7 @@ BOOL DumpFile()
}
TokenSigInit(g_pImport);
-#ifdef FEATURE_CORECLR
if (FAILED(metaDataGetDispenser(CLSID_CorMetaDataDispenser, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser)))
-#else
- if (FAILED(CoCreateInstance(CLSID_CorMetaDataDispenser, 0, CLSCTX_INPROC_SERVER, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser)))
-#endif
{
if (g_fDumpHeader)
DumpHeader(g_CORHeader, g_pFile);
@@ -7584,31 +7445,6 @@ BOOL DumpFile()
goto exit;
}
-#ifndef FEATURE_CORECLR
- // Get a symbol binder.
- ISymUnmanagedBinder *binder;
- HRESULT hr;
-
- hr = CoCreateInstance(CLSID_CorSymBinder_SxS, NULL,
- CLSCTX_INPROC_SERVER,
- IID_ISymUnmanagedBinder,
- (void**)&binder);
-
- if (SUCCEEDED(hr))
- {
- hr = binder->GetReaderForFile(g_pPubImport,
- wzInputFileName,
- NULL,
- &g_pSymReader);
-
- // Release the binder
- binder->Release();
- }
-
- if (FAILED(hr))
- g_fShowSource = FALSE;
-#endif
-
if((g_uNCA = g_pImport->GetCountWithTokenKind(mdtCustomAttribute)))
{
g_rchCA = new char[g_uNCA+1];
@@ -7636,13 +7472,6 @@ DoneInitialization:
}
#endif
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- {
- GUIAddItemsToList();
- }
- else
-#endif
{
// Dump the CLR header info if requested.
printLine(g_pFile,COMMENT((char*)0)); // start multiline comment
@@ -7682,16 +7511,8 @@ DoneInitialization:
ulNumGlobalFunc = g_pImport->EnumGetCount(&hEnumMethod);
g_pImport->EnumClose(&hEnumMethod);
}
-#ifndef FEATURE_CORECLR
- if(g_fShowProgressBar)
- CreateProgressBar((LONG) (g_NumClasses + ulNumGlobalFunc));
-#endif
}
-#ifndef FEATURE_CORECLR
- ProgressStep();
-#endif
- g_fAbortDisassembly = FALSE;
//DumpVtable(g_pFile);
DumpMscorlib(g_pFile);
if(g_fDumpTypeList) DumpTypelist(g_pFile);
@@ -7734,13 +7555,6 @@ DoneInitialization:
if(g_cl_enclosing[i] == mdTypeDefNil) // nested classes are dumped within enclosing ones
{
DumpClass(g_cl_list[i], VAL32(IMAGE_COR20_HEADER_FIELD(*g_CORHeader, EntryPointToken)),g_pFile,7); //7=everything
- if(g_fAbortDisassembly)
- {
- printError(g_pFile,"");
- printError(g_pFile,RstrUTF(IDS_E_DASMABORT));
- fSuccess = FALSE;
- goto CloseFileAndExit;
- }
}
}
CloseNamespace(szString);
@@ -7756,16 +7570,6 @@ DoneInitialization:
if(g_rchCA[i] == 0) DumpCustomAttribute(TokenFromRid(i,mdtCustomAttribute),g_pFile,true);
}
}
- if(g_fAbortDisassembly)
- {
- printError(g_pFile,"");
- printError(g_pFile,RstrUTF(IDS_E_DASMABORT));
- fSuccess = FALSE;
- goto CloseFileAndExit;
- }
-#ifndef FEATURE_CORECLR
- ProgressStep();
-#endif
#if (0)
/* Third, dump GC/EH info about the native methods, using the IPMap */
@@ -7947,15 +7751,14 @@ ReportAndExit:
DumpRTFPostfix(g_pFile);
}
+#ifndef _DEBUG
CloseFileAndExit:
+#endif
if(g_pFile)
{
fclose(g_pFile);
g_pFile = NULL;
}
-#ifndef FEATURE_CORECLR
- DestroyProgressBar();
-#endif
}
exit:
diff --git a/src/ildasm/dasm.rc b/src/ildasm/dasm.rc
index b16d53ab2f..ea56596f8d 100644
--- a/src/ildasm/dasm.rc
+++ b/src/ildasm/dasm.rc
@@ -10,9 +10,6 @@
//
// Generated from the TEXTINCLUDE 2 resource.
//
-#ifndef FEATURE_CORECLR
-#include "afxres.h"
-#endif
#include <winresrc.h>
/////////////////////////////////////////////////////////////////////////////
@@ -57,250 +54,16 @@ END
#endif // APSTUDIO_INVOKED
-
-#if !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR)
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_ICON2 ICON DISCARDABLE "Litening.ico"
-
-#if FX_VFT == VFT_DLL
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_FIELD BITMAP MOVEABLE PURE "field.bmp"
-IDB_METHOD BITMAP MOVEABLE PURE "method.bmp"
-IDB_STATICFIELD BITMAP MOVEABLE PURE "staticfield.bmp"
-IDB_STATICMETHOD BITMAP MOVEABLE PURE "staticmethod.bmp"
-IDB_REDARROW BITMAP MOVEABLE PURE "redarrow.bmp"
-IDB_EVENT BITMAP DISCARDABLE "event.bmp"
-IDB_PROP BITMAP DISCARDABLE "prop.bmp"
-IDB_NAMESPACE BITMAP DISCARDABLE "namespace.bmp"
-IDB_CLASS BITMAP DISCARDABLE "classa.bmp"
-IDB_CLASSENUM BITMAP DISCARDABLE "classe.bmp"
-IDB_CLASSINT BITMAP DISCARDABLE "classi.bmp"
-IDB_CLASSVAL BITMAP DISCARDABLE "classv.bmp"
-
-IDB_METHOD_GEN BITMAP MOVEABLE PURE "methodg.bmp"
-IDB_STATICMETHOD_GEN BITMAP MOVEABLE PURE "staticmethodg.bmp"
-IDB_CLASS_GEN BITMAP DISCARDABLE "classag.bmp"
-IDB_CLASSENUM_GEN BITMAP DISCARDABLE "classeg.bmp"
-IDB_CLASSINT_GEN BITMAP DISCARDABLE "classig.bmp"
-IDB_CLASSVAL_GEN BITMAP DISCARDABLE "classvg.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 157, 306
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
-CAPTION "Dump options"
-FONT 8, "MS Shell Dlg"
-BEGIN
- DEFPUSHBUTTON L"OK",IDOK,13,285,50,14
- PUSHBUTTON L"Cancel",IDCANCEL,81,285,50,14
- GROUPBOX L"Encoding",IDC_STATIC,13,3,129,28
- CONTROL L"ANSI",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,19,16,34,9
- CONTROL L"UTF-8",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,55,16,34,
- 9
- CONTROL L"Unicode",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,91,16,
- 40,9
- CONTROL L"Dump Class List",IDC_CHECK19,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,36,106,10
- CONTROL L"Dump Statistics",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,48,106,10
- CONTROL L"Show Progress Bar",IDC_CHECK18,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,60,124,11
- CONTROL L"Dump Header",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,73,106,10
- CONTROL L"Dump IL Code",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,86,106,10
- CONTROL L"Token Values",IDC_CHECK4,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,99,106,10
- CONTROL L"Actual Bytes",IDC_CHECK5,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,110,106,10
- CONTROL L"Line Numbers",IDC_CHECK20,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,120,106,10
- CONTROL L"Source Lines",IDC_CHECK6,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,131,106,10
- CONTROL L"Expand try/catch",IDC_CHECK7,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,142,106,10
- CONTROL L"Dump Metainfo",IDC_CHECK8,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,14,158,106,10
- CONTROL L"More HEX",IDC_CHECK11,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,174,106,10
- CONTROL L"Raw: Counts,Sizes",IDC_CHECK12,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,185,106,10
- CONTROL L"Raw: Header",IDC_CHECK10,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,198,106,10
- CONTROL L"Raw: Header,Schema",IDC_CHECK14,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,209,106,10
- CONTROL L"Raw: Header,Schema,Rows",IDC_CHECK15,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,37,222,106,10
- CONTROL L"Raw: Heaps",IDC_CHECK17,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,233,106,10
- CONTROL L"Unresolved Externals",IDC_CHECK13,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,246,106,10
- CONTROL L"Validate",IDC_CHECK16,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,37,257,106,10
- CONTROL L"Debug",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 37,270,106,10
-END
-
-IDD_ABOUT DIALOGEX 0, 0, 289, 112
-STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION
-EXSTYLE WS_EX_CLIENTEDGE
-CAPTION L"About IL DASM"
-FONT 8, "MS Shell Dlg"
-BEGIN
- DEFPUSHBUTTON L"OK",ID_ABOUT_OK,122,83,50,14
- ICON IDI_ICON2,IDC_STATIC,18,22,21,20,0
- LTEXT L"Static",IDC_ABOUT_LINE1,47,22,279,11
- LTEXT L"Static",IDC_ABOUT_LINE2,47,38,279,11
- LTEXT L"Static",IDC_ABOUT_LINE3,47,56,279,11
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-FileAccel ACCELERATORS MOVEABLE PURE
-BEGIN
- "O", 1, VIRTKEY, CONTROL
- "D", 2, VIRTKEY, CONTROL
- "T", 3, VIRTKEY, CONTROL
- "X", 4, VIRTKEY, CONTROL
- "M", 21, VIRTKEY, CONTROL
- VK_F1, 31, VIRTKEY
- VK_ESCAPE, 4, VIRTKEY
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- IDD_DIALOG1, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 150
- TOPMARGIN, 3
- BOTTOMMARGIN, 299
- END
-
- IDD_ABOUT, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 232
- TOPMARGIN, 7
- BOTTOMMARGIN, 105
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_FILE L"&File"
- IDS_VIEW L"&View"
- IDS_HELP L"&Help"
- IDS_OPEN L"&Open\tCtrl+O"
- IDS_DUMP L"&Dump\tCtrl+D"
- IDS_DUMPTREE L"Dump &TreeView\tCtrl+T"
- IDS_EXIT L"E&xit\tCtrl+X"
- IDS_FONTS L"Set &Fonts"
- IDS_FONT_TREE L"&Tree view"
- IDS_FONT_DASM L"&Disassembly"
- IDS_SORT_BY_NAME L"Sort by &name"
- IDS_SHOW_PUB L"Hide &Public"
- IDS_SHOW_PRIV L"Hide P&rivate"
- IDS_SHOW_FAM L"Hide Famil&y"
- IDS_SHOW_ASM L"Hide &Assembly"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_FIND L"&Find"
- IDS_FINDNEXT L"Find &Next"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_MI_DEBUG L"&Debug"
- IDS_MI_SCHEMA L"Raw:Header,Sch&ema"
- IDS_MI_RAW L"Raw:Header,Schema,&Rows"
- IDS_MI_HEAPS L"Raw:Hea&ps"
- IDS_MI_VALIDATE L"&Validate"
- IDS_SHOW_METAINFO L"&Show!\tCtrl+M"
- IDS_ABOUT L"&About IL DASM"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_SHOW_FAA L"Hide FamAN&DAssem"
- IDS_SHOW_FOA L"Hide Fam&ORAssem"
- IDS_SHOW_PSCOPE L"Hide Private&Scope"
- IDS_FULL_INFO L"Show member &types"
- IDS_BYTES L"Show &bytes"
- IDS_TOKENS L"Show token &values"
- IDS_SOURCELINES L"Show source &lines"
- IDS_QUOTEALLNAMES L"&Quote all names"
- IDS_EXPANDTRY L"E&xpand try/catch"
- IDS_SHOW_HEADER L"&Headers"
- IDS_SHOW_STAT L"Stat&istics"
- IDS_METAINFO L"&MetaInfo"
- IDS_MI_HEADER L"Raw:&Header"
- IDS_MI_HEX L"&More HEX"
- IDS_MI_CSV L"Raw:&Counts,Sizes"
- IDS_MI_UNREX L"&Unresolved ext."
- IDS_TREEVIEWFCN L"Full &Class Names"
- IDS_CAVERBAL L"V&erbal CA blobs"
- IDS_DUMPRTF L"&Use RTF"
-END
-
-#endif // FX_VFT == VFT_DLL
-#endif // !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR)
-
#if FX_VFT == VFT_DLL
STRINGTABLE DISCARDABLE
BEGIN
IDS_USAGE_TITLE L"ILDASM command line syntax"
IDS_USAGE_01 L"Usage: ildasm [options] <file_name> [options]\n\n"
IDS_USAGE_02 L"Options for output redirection:\n"
-#ifndef FEATURE_PAL
- IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to GUI.\n"
- IDS_USAGE_04 L" /TEXT Direct output to console window rather than to GUI.\n\n"
- IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n"
- IDS_USAGE_04B L" /RTF Output in rich text format (invalid with /TEXT option).\n"
- IDS_USAGE_05 L"Options for GUI or file/console output (EXE and DLL files only):\n"
-#else
IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to console.\n"
- IDS_USAGE_04 L""
IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n"
IDS_USAGE_04B L" /RTF Output in rich text format (valid with /OUT option only).\n"
IDS_USAGE_05 L"Options for file/console output:\n"
-#endif // !FEATURE_PAL
#ifdef OWNER_OPTION_ENABLED
IDS_USAGE_06 L" /OWNER=<owner name> Set owner name to disassemble a protected PE file.\n"
#endif
@@ -322,15 +85,8 @@ BEGIN
IDS_USAGE_15 L" /QUOTEALLNAMES Include all names into single quotes.\n"
IDS_USAGE_15A L" /NOCA Suppress output of custom attributes.\n"
IDS_USAGE_15B L" /CAVERBAL Output CA blobs in verbal form (default - in binary form).\n"
-#ifndef FEATURE_PAL
- IDS_USAGE_16 L" /NOBAR Suppress disassembly progress bar window pop-up.\n\n"
IDS_USAGE_17 L"The following options are valid for file/console output only:\n"
IDS_USAGE_18 L"Options for EXE and DLL files:\n"
-#else
- IDS_USAGE_16 L""
- IDS_USAGE_17 L""
- IDS_USAGE_18 L""
-#endif // !FEATURE_PAL
IDS_USAGE_19 L" /UTF8 Use UTF-8 encoding for output (default - ANSI).\n"
IDS_USAGE_20 L" /UNICODE Use UNICODE encoding for output.\n"
IDS_USAGE_21 L" /NOIL Suppress IL assembler code output.\n"
@@ -390,7 +146,6 @@ BEGIN
IDS_E_BADCORHDR L"error : Bad CLR header, or the version of the file format is not supported"
IDS_E_OPENMD L"error : Failed to open meta data"
IDS_E_COPYRIGHT L"error : Copyrighted material - can not disassemble!"
- IDS_E_DASMABORT L"********* DISASSEMBLY ABORTED BY THE OPERATOR **************"
IDS_E_DASMOK L"*********** DISASSEMBLY COMPLETE ***********************"
IDS_E_PARTDASM L"warning : THIS IS A PARTIAL DISASSEMBLY, NOT SUITABLE FOR RE-ASSEMBLING"
IDS_E_INSTRDT L"error : Failed to create instruction decoding table"
diff --git a/src/ildasm/dasm_pr.cpp b/src/ildasm/dasm_pr.cpp
deleted file mode 100644
index 9d478bf9ac..0000000000
--- a/src/ildasm/dasm_pr.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "ildasmpch.h"
-
-#ifndef FEATURE_CORECLR
-#include "resource.h"
-#include "formattype.h"
-
-WCHAR* RstrW(unsigned id);
-
-extern HINSTANCE g_hInstance;
-extern HINSTANCE g_hResources;
-extern DWORD g_NumClasses;
-extern char g_szInputFile[]; // in UTF-8
-extern char g_szOutputFile[]; // in UTF-8
-
-#define IDC_CANCEL 101
-
-HWND g_hwndProgress = NULL;
-HWND g_hwndProgBox = NULL;
-HWND g_hwndFromFile = NULL;
-HWND g_hwndToFile = NULL;
-HWND g_hwndTally = NULL;
-HWND g_hwndCancel = NULL;
-HANDLE g_hThreadReady = NULL; // event
-
-BOOL g_fInitCommonControls = TRUE;
-BOOL g_fRegisterClass = TRUE;
-ULONG g_ulCount, g_ulRange;
-RECT rcClient; // client area of parent window
-
-WCHAR* UtfToUnicode(__in __nullterminated const char* sz); // defined in dis.cpp
-
-LRESULT CALLBACK ProgBoxWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
-{
- switch (uMsg)
- {
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CANCEL:
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- DestroyWindow (hwnd);
- break;
- }
- break;
-
-
- case WM_CLOSE:
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- //break;
- default:
- return WszDefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-DWORD WINAPI ProgressMainLoop(LPVOID pv)
-{
- MSG msg;
- DWORD cyVScroll;
- HFONT hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); //(ANSI_FIXED_FONT);
- WCHAR wzStr[1024];
-
- if(g_fInitCommonControls)
- {
- InitCommonControls();
- g_fInitCommonControls = FALSE;
- }
- g_ulCount = 0;
- if(g_fRegisterClass)
- {
- _ASSERTE(g_hResources != NULL);
- WNDCLASSW wndClass;
-
- wndClass.style = CS_HREDRAW|CS_VREDRAW|CS_NOCLOSE;
- wndClass.lpfnWndProc = ProgBoxWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
- wndClass.lpszMenuName = NULL;
- wndClass.lpszClassName = L"ProgressBox";
-
- if (WszRegisterClass(&wndClass) == 0) return 0;
-
- g_fRegisterClass = FALSE;
- }
- cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
- if(g_hwndProgBox = WszCreateWindowEx (0,
- RstrW(IDS_PROGRESSBOX), //"ProgressBox",
- RstrW(IDS_DISASSEMBLING), //"Disassembling",
- WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_CLIPCHILDREN,
- 400, 200, 400, 8*cyVScroll,
- HWND_DESKTOP,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- GetClientRect(g_hwndProgBox, &rcClient);
-
- if(g_hwndFromFile = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-6*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndFromFile,WM_SETFONT,(LPARAM)hFont,FALSE);
- WCHAR* wzFileName = UtfToUnicode(g_szInputFile);
- if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE) /*"File %s"*/,wzFileName);
- else
- {
- WCHAR * p=wzFileName;
- while(p = wcschr(p,L'\\'))
- {
- if(wcslen(p) <= 60) break;
- p++;
- }
- if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50];
- swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE1) /*"File ...%s"*/,p);
- }
- WszSendMessage(g_hwndFromFile, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndToFile = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-5*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndToFile,WM_SETFONT,(LPARAM)hFont,FALSE);
- WCHAR* wzFileName = UtfToUnicode(g_szOutputFile);
- if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE) /*"To file %s"*/,wzFileName);
- else
- {
- WCHAR * p=wzFileName;
- while(p = wcschr(p,L'\\'))
- {
- if(wcslen(p) <= 60) break;
- p++;
- }
- if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50];
- swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE1) /*"To file ...%s"*/,p);
- }
- WszSendMessage(g_hwndToFile, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndTally = WszCreateWindowEx (0,
- L"STATIC",
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER,
- rcClient.left, rcClient.bottom-4*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndTally,WM_SETFONT,(LPARAM)hFont,FALSE);
- if(g_ulCount <= g_NumClasses) swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount);
- else swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses);
- WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr);
- }
- if(g_hwndProgress = WszCreateWindowEx (0,
- PROGRESS_CLASS,
- L"",
- WS_CHILD|WS_VISIBLE|SS_CENTER, // SS_CENTER gives smooth progress and solid bar
- rcClient.left, rcClient.bottom-3*cyVScroll,rcClient.right, cyVScroll,
- g_hwndProgBox,
- (HMENU)0,
- g_hInstance,
- NULL))
- {
- // Set the range for the progress bar.
- SendMessageA (g_hwndProgress, PBM_SETRANGE, 0L, MAKELPARAM(0, g_ulRange));
- // Set the step.
- SendMessageA (g_hwndProgress, PBM_SETSTEP, (WPARAM)1, 0L);
- }
- if(g_hwndCancel = WszCreateWindowEx (0,
- L"BUTTON",
- RstrW(IDS_PB_CANCEL), //"Cancel",
- WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|BS_TEXT,
- rcClient.left+150, rcClient.bottom-3*cyVScroll/2,rcClient.right-300, 4*cyVScroll/3,
- g_hwndProgBox,
- (HMENU)IDC_CANCEL,
- g_hInstance,
- NULL))
- {
- SendMessageA(g_hwndCancel,WM_SETFONT,(LPARAM)hFont,FALSE);
- }
- }
- SetEvent(g_hThreadReady);
- while (WszGetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- WszDispatchMessage(&msg);
- }
- return 0;
-}
-
-void CreateProgressBar(LONG lRange)
-{
- DWORD dwThreadID;
- g_ulCount = 0;
- if((g_ulRange = (ULONG)lRange)==0) return;
-
- g_hThreadReady = WszCreateEvent(NULL,FALSE,FALSE,NULL);
- if (g_hThreadReady != NULL)
- {
- // Thread is never aborted, it always exits by itself
- HANDLE hThread = CreateThread(NULL,0,ProgressMainLoop,NULL,0,&dwThreadID);
- if (hThread != NULL)
- {
- CloseHandle(hThread);
- WaitForSingleObject(g_hThreadReady,INFINITE);
- }
- CloseHandle(g_hThreadReady);
- }
-}
-
-BOOL ProgressStep()
-{
- if(g_hwndProgBox)
- {
- WCHAR wzStr[1024];
- if(g_hwndTally)
- {
- if(g_ulCount <= g_NumClasses)
- swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount);
- else if(g_ulCount <= g_ulRange)
- swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses);
- else
- wcscpy_s(wzStr,1024,RstrW(IDS_PB_WRITINGDATA)); //"Writing global data");
- wzStr[1023]=0;
- WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr);
- }
-
- if(g_hwndProgress && g_ulCount && (g_ulCount <= g_ulRange))
- WszSendMessage (g_hwndProgress, PBM_STEPIT, 0L, 0L);
- g_ulCount++;
- }
- else if(g_ulCount) return FALSE; // disassembly started and was aborted
- return TRUE;
-}
-
-void DestroyProgressBar()
-{
- if(g_hwndProgBox) WszSendMessage (g_hwndProgBox,WM_COMMAND,IDC_CANCEL,0);
- g_hwndProgress = NULL;
- g_hwndProgBox = NULL;
- g_hwndFromFile = NULL;
- g_hwndToFile = NULL;
- g_hwndTally = NULL;
- g_hwndCancel = NULL;
- g_ulCount = 0;
-}
-#endif
diff --git a/src/ildasm/dasmgui.h b/src/ildasm/dasmgui.h
deleted file mode 100644
index aa1747e01b..0000000000
--- a/src/ildasm/dasmgui.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-BOOL CreateGUI();
-void GUISetModule(__in __nullterminated const char *pszModule);
-void GUIMainLoop();
-void GUIAddOpcode(__inout_opt __nullterminated const char *szString, __in_opt void *GUICookie);
-BOOL GUIAddItemsToList();
-void GUIAddOpcode(__inout __nullterminated const char *szString);
-void DestroyGUI();
-UINT GetDasmMBRTLStyle();
-
-BOOL DisassembleMemberByName(__in __nullterminated const char *pszClassName, __in __nullterminated const char *pszMemberName, __in __nullterminated const char *pszSig);
-BOOL IsGuiILOnly();
diff --git a/src/ildasm/dasmhlp.hhc b/src/ildasm/dasmhlp.hhc
deleted file mode 100644
index dcedac2abb..0000000000
--- a/src/ildasm/dasmhlp.hhc
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<HTML>
-<HEAD>
-<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
-<!-- Sitemap 1.0 -->
-</HEAD><BODY>
-<OBJECT type="text/site properties">
- <param name="Window Styles" value="0x800021">
-</OBJECT>
-<UL>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Menu Options">
- <param name="Local" value="html\menu_options.htm">
- <param name="URL" value="html\menu_options.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Tree View Icons">
- <param name="Local" value="html\tree_view_icons.htm">
- <param name="URL" value="html\tree_view_icons.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Clicking on Tree View Items">
- <param name="Local" value="html\clicking.htm">
- <param name="URL" value="html\clicking.htm">
- </OBJECT>
- <LI> <OBJECT type="text/sitemap">
- <param name="Name" value="Keyboard Commands">
- <param name="Local" value="html\keyboard.htm">
- <param name="URL" value="html\keyboard.htm">
- </OBJECT>
-</UL>
-</BODY></HTML>
diff --git a/src/ildasm/dis.cpp b/src/ildasm/dis.cpp
index 371466feee..2b3229e920 100644
--- a/src/ildasm/dis.cpp
+++ b/src/ildasm/dis.cpp
@@ -10,7 +10,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
#include "resource.h"
@@ -133,11 +132,6 @@ char* AnsiToUtf(__in __nullterminated const char* sz) { return UnicodeToUtf(Ansi
static void UnicodeToConsoleOrMsgBox(__in __nullterminated const WCHAR* wz)
{
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- WszMessageBox(NULL,wz,RstrW(IDS_ERRORCAPTION),MB_OK|MB_ICONERROR|GetDasmMBRTLStyle());
- else
-#endif
{
//DWORD dw;
//char* sz = UnicodeToAnsi(wz);
@@ -155,11 +149,6 @@ static void UnicodeToFile(__in __nullterminated const WCHAR* wz, FILE* pF)
}
static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie)
{
-#ifndef FEATURE_CORECLR
- if (g_Mode & MODE_GUI)
- GUIAddOpcode(sz, GUICookie);
- else
-#endif
{
if(g_fDumpRTF) fprintf((FILE*)GUICookie,"%s\\line\n",sz);
else fprintf((FILE*)GUICookie,"%s\n",sz);
@@ -168,8 +157,6 @@ static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie)
//------------------------------------------------------------------
void printError(void* GUICookie, __in __nullterminated const char* string)
{
- if(g_Mode & MODE_GUI) printLine(GUICookie, ERRORMSG(string));
- else
{
//DWORD dw;
const char* sz = ERRORMSG(string);
@@ -198,7 +185,7 @@ void printLine(void* GUICookie, __in __nullterminated const char* string)
{
sz = UnicodeToAnsi(wz);
}
- else if(GUICookie && (!(g_Mode & MODE_GUI)))
+ else if(GUICookie)
{
UnicodeToFile(wz,(FILE*)GUICookie);
return;
@@ -219,11 +206,8 @@ void printLineW(void* GUICookie, __in __nullterminated const WCHAR* string)
}
if(g_uCodePage == 0xFFFFFFFF)
{
- if(!(g_Mode & MODE_GUI))
- {
- UnicodeToFile(string,(FILE*)GUICookie);
- return;
- }
+ UnicodeToFile(string,(FILE*)GUICookie);
+ return;
}
else if(g_uCodePage == CP_UTF8)
sz = UnicodeToUtf(string);
@@ -1083,15 +1067,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md
PC = 0;
fTryInCode = enumEHInfo(method.EH, pImport, method.GetCodeSize());
DasmExceptionInfoClause* ehInfoToPutNext = NULL;
- if(g_Mode & MODE_GUI)
- { // in GUI, reset everything for each method
- ulWasFileToken = 0xFFFFFFFF;
- memset(&guidWasLang,0,sizeof(GUID));
- memset(&guidWasLangVendor,0,sizeof(GUID));
- memset(&guidWasDoc,0,sizeof(GUID));
- memset(wzWasFileName,0,sizeof(wzWasFileName));
- ulWasLine = 0;
- }
+
while (PC < method.GetCodeSize())
{
DWORD Len;
@@ -1117,8 +1093,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md
if (fNeedNewLine)
{
fNeedNewLine = FALSE;
- if (!(g_Mode & MODE_GUI))
- printLine(GUICookie,"");
+ printLine(GUICookie,"");
}
if(fShowSource || fInsertSourceLines)
diff --git a/src/ildasm/dman.cpp b/src/ildasm/dman.cpp
index d0b525556b..30724fc795 100644
--- a/src/ildasm/dman.cpp
+++ b/src/ildasm/dman.cpp
@@ -10,7 +10,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
@@ -727,7 +726,7 @@ static void DumpResourceFile(void *GUICookie, BYTE *pRes, DWORD dwOffset, LPCWST
memcpy(&L,pParam->pRes+pParam->dwOffset,sizeof(DWORD));
sprintf_s(szString,SZSTRING_SIZE,COMMENT("%s// Offset: 0x%8.8X Length: 0x%8.8X"), g_szAsmCodeIndent,pParam->dwOffset,L);
printLine(pParam->GUICookie,szString);
- if ((!(g_Mode & MODE_GUI)) && (g_pFile != NULL)) // embedded resource -- dump as .resources file
+ if (g_pFile != NULL) // embedded resource -- dump as .resources file
{
FILE *pF = NULL;
_wfopen_s(&pF, pParam->wzFileName, W("wb"));
@@ -942,11 +941,6 @@ void DumpManifestResources(void* GUICookie)
else nManRes=0;
}
-#ifndef FEATURE_CORECLR
-// CLR internal hosting API
-extern ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal;
-#endif
-
IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
{
struct Param
@@ -996,7 +990,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
if(pdwSize && *pdwSize)
{
pbManifest += sizeof(DWORD);
-#ifdef FEATURE_CORECLR
if (SUCCEEDED(hr = getMetaDataInternalInterface(
pbManifest,
VAL32(*pdwSize),
@@ -1008,19 +1001,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie)
pParam->pImport,
IID_IMetaDataAssemblyImport,
(LPVOID *)&pParam->pAssemblyImport)))
-#else
- if (SUCCEEDED(hr = g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface(
- pbManifest,
- VAL32(*pdwSize),
- ofRead,
- IID_IMDInternalImport,
- (LPVOID *)&pParam->pImport)))
- {
- if (FAILED(hr = g_pCLRRuntimeHostInternal->GetMetaDataPublicInterfaceFromInternal(
- pParam->pImport,
- IID_IMetaDataAssemblyImport,
- (LPVOID *)&pParam->pAssemblyImport)))
-#endif
{
sprintf_s(szString,SZSTRING_SIZE,RstrUTF(IDS_E_MDAFROMMDI),hr);
printLine(pParam->GUICookie,COMMENT(szString));
diff --git a/src/ildasm/dres.cpp b/src/ildasm/dres.cpp
index 53e1925cea..93e8e48c93 100644
--- a/src/ildasm/dres.cpp
+++ b/src/ildasm/dres.cpp
@@ -11,7 +11,6 @@
#include "debugmacros.h"
#include "corpriv.h"
#include "dasmenum.hpp"
-#include "dasmgui.h"
#include "formattype.h"
#include "dis.h"
#include "resource.h"
diff --git a/src/ildasm/event.bmp b/src/ildasm/event.bmp
deleted file mode 100644
index 99c3357d95..0000000000
--- a/src/ildasm/event.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/exe/CMakeLists.txt b/src/ildasm/exe/CMakeLists.txt
index 87cdd230f9..bf09be58b6 100644
--- a/src/ildasm/exe/CMakeLists.txt
+++ b/src/ildasm/exe/CMakeLists.txt
@@ -27,12 +27,10 @@ set(ILDASM_SOURCES
../dasm.cpp
../dasm_formattype.cpp
../dasm_mi.cpp
- ../dasm_pr.cpp
../dasm_sz.cpp
../dis.cpp
../dman.cpp
../dres.cpp
- ../gui.cpp
../ildasmpch.cpp
../windasm.cpp
)
@@ -73,4 +71,4 @@ else()
)
endif(CLR_CMAKE_PLATFORM_UNIX)
-install_clr(ildasm) \ No newline at end of file
+install_clr(ildasm)
diff --git a/src/ildasm/field.bmp b/src/ildasm/field.bmp
deleted file mode 100644
index aa09fb2f54..0000000000
--- a/src/ildasm/field.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/gui.cpp b/src/ildasm/gui.cpp
deleted file mode 100644
index 83501e66ef..0000000000
--- a/src/ildasm/gui.cpp
+++ /dev/null
@@ -1,4013 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "ildasmpch.h"
-
-#ifndef FEATURE_CORECLR
-#include "debugmacros.h"
-#include "corpriv.h"
-#include "ceeload.h"
-#include "dasmgui.h"
-#include "dasmenum.hpp"
-#include "dis.h"
-#include "resource.h"
-#include "gui.h"
-#include "formattype.h"
-#include "..\tools\metainfo\mdinfo.h"
-#include <NdpVersion.h>
-
-struct MemberInfo {
- const char *pszMemberName;
- DWORD dwAttrs;
- ULONG cComSig;
- PCCOR_SIGNATURE pComSig;
- mdToken token;
-};
-
-int __cdecl memberCmp(const void *elem1, const void *elem2 ) {
- MemberInfo* mem1 = (MemberInfo*) elem1;
- MemberInfo* mem2 = (MemberInfo*) elem2;
- return(strcmp(mem1->pszMemberName, mem2->pszMemberName));
-}
-
-//
-// Global buffer, filled by AddOPCode
-//
-char *GlobalBuffer = new (nothrow) char[65535];
-ULONG GlobalBufferLen = 65535;
-ULONG InGlobalBuffer;
-//
-// Global HINSTANCE
-//
-extern HINSTANCE g_hInstance;
-extern HINSTANCE g_hResources;
-
-//
-// Main window
-//
-HWND g_hwndMain;
-
-//
-// Treeview for main window
-//
-HWND g_hwndTreeView;
-
-//
-// Treeview class full name / partial name switch
-//
-BOOL g_fTreeViewFCN = TRUE;
-
-//
-// Assembly info window (child of main)
-//
-HWND g_hwndAsmInfo;
-extern IMetaDataAssemblyImport* g_pAssemblyImport;
-void DumpAssembly(void* GUICookie, BOOL fFullDump);
-IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie);
-
-//
-// Global image list
-//
-HIMAGELIST g_hImageList;
-
-//
-// Menu for main window
-//
-HMENU g_hMenu, g_hMetaInfoMenu, g_hFileMenu, g_hViewMenu, g_hFontMenu;
-
-//
-// Flags
-//
-BOOL g_fFullMemberInfo = FALSE; // Show member type? (method, field, event, prop)
-BOOL g_fSortByName = TRUE; // Sort members in tree?
-//
-// Module name of loaded DLL/EXE
-//
-const char *g_pszModule;
-
-//
-// Interlocked variable for setting char dimensions once
-//
-long g_SetCharDimensions = 0;
-
-unsigned g_uFindReplaceMsg = 0;
-HWND g_hFindText = NULL;
-//
-// Bitmap handles
-//
-HBITMAP g_hBitmaps[LAST_IMAGE_INDEX];
-
-//
-// Root item for listview
-//
-HTREEITEM g_hRoot;
-
-// Global graphics
-HBRUSH g_hWhiteBrush;
-HFONT g_hFixedFont;
-HFONT g_hSmallFont;
-HBITMAP g_hMethodBmp, g_hFieldBmp, g_hClassBmp, g_hStaticMethodBmp, g_hStaticFieldBmp, g_hQuestionBmp;
-LOGFONTW g_strLogFontTree, g_strLogFontDasm;
-CHOOSEFONTW g_strChFontTree, g_strChFontDasm;
-
-struct GUI_Info
-{
- LOGFONTW* plfTree;
- LOGFONTW* plfDasm;
- int x;
- int y;
- int w;
- int h;
-};
-
-GUI_Info guiInfo = {&g_strLogFontTree, &g_strLogFontDasm, CW_USEDEFAULT, CW_USEDEFAULT, 400,600};
-
-// Text info
-long g_Height;
-long g_MaxCharWidth;
-
-// Currently selected treeview item
-HTREEITEM g_CurSelItem;
-
-extern IMAGE_COR20_HEADER * g_CORHeader;
-extern BOOL g_fDumpTokens;
-extern BOOL g_fShowBytes;
-extern BOOL g_fShowSource;
-extern BOOL g_fTryInCode;
-extern BOOL g_fQuoteAllNames;
-extern BOOL g_fCAVerbal;
-extern BOOL g_fShowProgressBar;
-extern BOOL g_fDumpHeader;
-extern BOOL g_fDumpAsmCode;
-extern BOOL g_fDumpTokens;
-extern BOOL g_fDumpStats;
-extern BOOL g_fDumpMetaInfo;
-extern BOOL g_fDumpClassList;
-extern BOOL g_fInsertSourceLines;
-
-extern BOOL g_fLimitedVisibility;
-extern BOOL g_fHidePub;
-extern BOOL g_fHidePriv;
-extern BOOL g_fHideFam;
-extern BOOL g_fHideAsm;
-extern BOOL g_fHideFAA;
-extern BOOL g_fHideFOA;
-extern BOOL g_fHidePrivScope;
-extern BOOL g_fTDC;
-
-extern char g_szInputFile[]; // in UTF-8
-extern WCHAR g_wszFullInputFile[]; // in UTF-16
-extern ULONG g_ulMetaInfoFilter;
-extern char g_szOutputFile[]; // in UTF-8
-extern DWORD g_Mode;
-extern FILE* g_pFile;
-extern HINSTANCE g_hInstance;
-
-extern unsigned g_uCodePage;
-extern unsigned g_uConsoleCP;
-DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP
-//
-// Functions
-//
-BOOL RegisterWindowClasses();
-HWND CreateTreeView(HWND hwndParent);
-HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded);
-HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszWindowTitle);
-HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl);
-void AddGlobalFunctions();
-void CreateMenus();
-Namespace_t* FindNamespace(const char *pszNamespace);
-void GUICleanupClassItems();
-void SelectClassByName(__in __nullterminated char *pszFQName);
-void SelectClassByToken(mdToken tk);
-void DumpTreeItem(HTREEITEM hItem, FILE* pFile, __inout __nullterminated WCHAR* szIndent);
-HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace);
-FILE* OpenOutput(__in __nullterminated const char* szFileName);
-FILE* OpenOutput(__in __nullterminated const WCHAR* wzFileName);
-
-#undef SendMessageW
-#undef PostMessageW
-#undef CreateWindowExW
-#undef DefWindowProcW
-#undef RegisterClassExW
-#undef RegisterClassW
-#undef SetWindowTextW
-#undef GetWindowTextW
-#undef MessageBoxW
-
-char* UtfToAnsi(__in __nullterminated const char* sz) { return UnicodeToAnsi(UtfToUnicode(sz));}
-
-LRESULT CALLBACK DisassemblyWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-);
-
-LRESULT CALLBACK MainWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-);
-
-ClassItem_t *AddClassToGUI(mdTypeDef cl, UINT uImageIndex,
- const char *pszNamespace, const char *pszClassName, DWORD cSubItems, HTREEITEM *phRoot);
-
-void AddMethodToGUI(
- mdTypeDef cl,
- ClassItem_t * pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszMethodName,
- PCCOR_SIGNATURE pComSig,
- unsigned cComSig,
- mdMethodDef mbMethod,
- DWORD dwAttrs
-);
-
-void AddFieldToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszFieldName,
- const char *pszSignature,
- mdFieldDef mbField,
- DWORD dwAttrs
-);
-
-void AddEventToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdEvent mbEvent
-);
-
-void AddPropToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdProperty mbProp
-);
-
-DynamicArray<DisasmBox_t> *g_DisasmBox;
-DWORD g_NumDisasmBoxes=0;
-
-DynamicArray<ClassItem_t> *g_ClassItemList;
-DWORD g_NumClassItems=0;
-
-DynamicArray<Namespace_t> *g_NamespaceList;
-DWORD g_NumNamespaces=0;
-
-
-ClassItem_t *FindClassItem(HTREEITEM hItem);
-ClassItem_t *FindClassItem(mdTypeDef cl);
-ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszNamespace, __in __nullterminated char *pszName);
-
-// Find disasm box among opened by class and member tokens
-DisasmBox_t* FindDisasmBox(mdToken tkClass, mdToken tkMember)
-{
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- if (((*g_DisasmBox)[i].tkClass == tkClass)
- &&((*g_DisasmBox)[i].tkMember == tkMember))
- return &(*g_DisasmBox)[i];
- }
- return NULL;
-}
-// Find disasm box among opened by the container hwnd
-DisasmBox_t* FindDisasmBoxByHwnd(HWND hwndContainer)
-{
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- return &(*g_DisasmBox)[i];
- }
- return NULL;
-}
-//
-// Add a new disassembly box to the global list of them
-//
-// hwndContainer - parent window
-// hwndChild - listview
-//
-void AddDisasmBox(HWND hwndContainer, HWND hwndChild, HMENU hMenu, mdToken tkClass, mdToken tkMember)
-{
- (*g_DisasmBox)[g_NumDisasmBoxes].hwndContainer = hwndContainer;
- (*g_DisasmBox)[g_NumDisasmBoxes].hwndChild = hwndChild;
- (*g_DisasmBox)[g_NumDisasmBoxes].hMenu = hMenu;
- (*g_DisasmBox)[g_NumDisasmBoxes].tkClass = tkClass;
- (*g_DisasmBox)[g_NumDisasmBoxes].tkMember = tkMember;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lStructSize = sizeof(FINDREPLACEW);
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.hwndOwner = hwndContainer;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.Flags = FR_DOWN|FR_DIALOGTERM;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrFindWhat = (LPWSTR)((*g_DisasmBox)[g_NumDisasmBoxes].wzFind);
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrReplaceWith = NULL;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wFindWhatLen = 120;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wReplaceWithLen = 0;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lCustData = 0;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpfnHook = NULL;
- (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpTemplateName = NULL;
- g_NumDisasmBoxes++;
-}
-
-void UpdateDisasmBox(DisasmBox_t* pBox, HWND hwndContainer, HWND hwndChild, HMENU hMenu)
-{
- pBox->hwndContainer = hwndContainer;
- pBox->hwndChild = hwndChild;
- pBox->hMenu = hMenu;
- pBox->strFR.hwndOwner = hwndContainer;
-}
-//
-// Given a container window, find the associated disassembly window
-//
-HWND FindAssociatedDisassemblyListBox(HWND hwndContainer)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- return (*g_DisasmBox)[i].hwndChild;
- }
-
- return NULL;
-}
-
-//
-// Given a disassembly window, find the associated container window
-//
-HWND FindAssociatedDisassemblyContainer(HWND hwndChild)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndChild == hwndChild)
- return (*g_DisasmBox)[i].hwndContainer;
- }
-
- return NULL;
-}
-
-
-void RemoveDisasmBox(HWND hwndContainer)
-{
- DWORD i;
-
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- if ((*g_DisasmBox)[i].hwndContainer == hwndContainer)
- {
- memcpy(&(*g_DisasmBox)[i], &(*g_DisasmBox)[i+1], (g_NumDisasmBoxes-i-1)*sizeof(DisasmBox_t));
- g_NumDisasmBoxes--;
- break;
- }
- }
-}
-
-
-void RemoveItemsFromList()
-{
- TreeView_DeleteAllItems(g_hwndTreeView);
-}
-
-
-BOOL RefreshList()
-{
- GUICleanupClassItems();
- return GUIAddItemsToList();
-}
-
-
-void GUISetModule(__in __nullterminated const char *pszModule)
-{
- g_pszModule = pszModule;
-}
-
-
-TreeItem_t *FindClassMemberByName(ClassItem_t *pClassItem,
- __in __nullterminated char *pszFindName,
- __in __nullterminated char *pszFindSig)
-{
- HRESULT hr;
- DWORD i;
-
- // do in two passes, fields first
- for (i = 0; i < pClassItem->SubItems; i++)
- {
- TreeItem_t *pItem;
- const char *pszMemberName;
- const char *pszMemberSig;
- DWORD dwAttrs;
-
- CQuickBytes qbMemberSig;
-
- PCCOR_SIGNATURE pComSig;
- ULONG cComSig;
-
-
- pItem = &pClassItem->pMembers[i];
- if (pItem->Discriminator != TREEITEM_TYPE_MEMBER)
- continue;
-
- if (TypeFromToken(pItem->mbMember) == mdtMethodDef)
- {
- if (FAILED(g_pImport->GetMethodDefProps(pItem->mbMember, &dwAttrs)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetNameOfMethodDef(pItem->mbMember, &pszMemberName)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetSigOfMethodDef(pItem->mbMember, &cComSig, &pComSig)))
- {
- continue;
- }
- }
- else
- {
- if (FAILED(g_pImport->GetFieldDefProps(pItem->mbMember, &dwAttrs)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetNameOfFieldDef(pItem->mbMember, &pszMemberName)))
- {
- continue;
- }
- if (FAILED(g_pImport->GetSigOfFieldDef(pItem->mbMember, &cComSig, &pComSig)))
- {
- continue;
- }
- }
- MAKE_NAME_IF_NONE(pszMemberName,pItem->mbMember);
- qbMemberSig.Shrink(0);
- pszMemberSig = PrettyPrintSig(pComSig, cComSig, "", &qbMemberSig, g_pImport,NULL);
-
- // @todo: GUI IL is so that NDView can call into DASM with/GUI; NDView uses Reflection API
- // which doesn't let us get a valid signature.
- // If GUI IL only, then ignore signature if it's NULL
- if (IsGuiILOnly()) {
- if (!strcmp(pszMemberName, pszFindName)) {
- if ((pszFindSig != NULL) && strcmp(pszMemberSig, pszFindSig)) continue;
- return pItem;
- }
- } else {
- if (!strcmp(pszMemberName, pszFindName) && !strcmp(pszMemberSig, pszFindSig))
- return pItem;
- }
- }
-
- return NULL;
-}
-
-// Kick of a disassembly window
-// Return TRUE if window opened ok, and FALSE if there's an error
-BOOL DisassembleMemberByName(__in __nullterminated char *pszClassName,
- __in __nullterminated char *pszMemberName,
- __in_opt __nullterminated char *pszSig)
-{
- char szClassName[MAX_CLASSNAME_LENGTH];
- char szClassNamespace[MAX_CLASSNAME_LENGTH];
- char *pszClassNamespace;
- char *p;
-
- p = ns::FindSep(pszClassName);
- if (p == NULL)
- {
- strcpy_s(szClassName, MAX_CLASSNAME_LENGTH,pszClassName);
- pszClassNamespace = NULL;
- }
- else
- {
- strncpy_s(szClassNamespace, MAX_CLASSNAME_LENGTH, pszClassName, p - pszClassName);
- szClassNamespace[ p - pszClassName ] = '\0';
- pszClassNamespace = szClassNamespace;
-
- strcpy_s(szClassName, MAX_CLASSNAME_LENGTH, p+1);
- }
-
- ClassItem_t *pClassItem = FindClassItem(pszClassNamespace, szClassName);
-
- if (pClassItem != NULL)
- {
- TreeItem_t *pTreeItem;
-
- pTreeItem = FindClassMemberByName(pClassItem, pszMemberName, pszSig);
-
- if (pTreeItem != NULL)
- {
- DWORD dwAttrs;
- DWORD dwImplAttrs;
-
- // What is this member?
-
- if (TypeFromToken(pTreeItem->mbMember) == mdtMethodDef)
- {
- char* szText;
- HWND fOK=NULL;
- if (FAILED(g_pImport->GetMethodDefProps(pTreeItem->mbMember, &dwAttrs)))
- {
- goto ErrorHere;
- }
- if (FAILED(g_pImport->GetMethodImplProps(pTreeItem->mbMember, NULL, &dwImplAttrs)))
- {
- goto ErrorHere;
- }
-
- // Can't be abstract or native
- if (IsMdAbstract(dwAttrs) || IsMiInternalCall(dwImplAttrs))
- return FALSE;
-
- szText = new (nothrow) char[4096];
- if(szText)
- {
- TVITEMA SelItem;
-
- // Get the name of this item so that we can title the disassembly window
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pTreeItem->hItem;
- SelItem.cchTextMax = 4095;
-
- WCHAR* wzText = (WCHAR*)szText;
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- if(szUTFText)
- {
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
-
- fOK = GUIDisassemble(pClassItem->cl, pTreeItem->mbMember, szText);
- delete[] szText;
- }
- if (fOK == NULL) {
- goto ErrorHere;
- }
- }
- } // endif (pTreeItem != NULL)
- else {
- goto ErrorHere;
- }
-
- } else {
- goto ErrorHere;
- }
-
- return TRUE;
-
-ErrorHere:
- char pzText[300];
- sprintf_s(pzText, 300,RstrUTF(IDS_CANTVIEW_TX) /*"Can't view %s::%s(%s)"*/, pszClassName, pszMemberName, pszSig);
-
- WszMessageBox(g_hwndMain, UtfToUnicode(pzText), RstrW(IDS_CANTVIEW_HD) /*"Can't View IL"*/, MB_OK | MB_ICONERROR | GetDasmMBRTLStyle() );
-
-
- return FALSE;
-}
-
-//HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, const char *pszStoredInfoText)
-HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, mdToken tk)
-{
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
- pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem(
- pClassItem->hItem, pszText, hParent, RED_ARROW_IMAGE_INDEX, g_hwndTreeView, FALSE
- );
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_INFO;
- //pClassItem->pMembers[pClassItem->CurMember].pszText = (char *) pszStoredInfoText;
- pClassItem->pMembers[pClassItem->CurMember].mbMember = tk;
- pClassItem->CurMember++;
-
- return pClassItem->pMembers[pClassItem->CurMember-1].hItem;
-}
-
-struct ClassDescr
-{
- mdToken tk;
- const char* szName;
-};
-static int __cdecl classDescrCmp(const void *op1, const void *op2)
-{
- return strcmp(((ClassDescr*)op1)->szName,((ClassDescr*)op2)->szName);
-}
-
-unsigned AddClassesWithEncloser(mdToken tkEncloser, HTREEITEM hParent)
-{
- unsigned i, N=0;
- for (i = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == tkEncloser) N++;
- }
-
- if(N)
- {
- ClassDescr* rClassDescr = new (nothrow) ClassDescr[N];
- const char *pszClassName,*pszNamespace;
- for (i = 0, N = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == tkEncloser)
- {
- rClassDescr[N].tk = g_cl_list[i];
- if (FAILED(g_pImport->GetNameOfTypeDef(g_cl_list[i], &pszClassName, &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- // doesn't throw here, so rClassDescr doesn't leak
- MAKE_NAME_IF_NONE(pszClassName,g_cl_list[i]);
- rClassDescr[N].szName = pszClassName;
- N++;
- }
- }
- if(g_fSortByName) qsort(&rClassDescr[0],N,sizeof(ClassDescr),classDescrCmp);
- for(i = 0; i < N; i++) AddClassToTreeView(hParent,rClassDescr[i].tk);
- delete[] rClassDescr;
- }
- return N;
-}
-
-static int __cdecl stringCmp(const void *op1, const void *op2)
-{
- return strcmp(*((char**)op1), *((char**)op2));
- //return(strlen(*((char**)op1)) - strlen(*((char**)op2)));
-}
-
-UINT GetDasmMBRTLStyle() {
- UINT RTLMessageBoxStyle = 0;
- WCHAR* pwStr = RstrW(IDS_RTL);
- if( wcscmp(pwStr, L"RTL_True") == 0) {
- RTLMessageBoxStyle = 0x00080000 |0x00100000; // MB_RIGHT || MB_RTLREADING
- }
- return RTLMessageBoxStyle;
-}
-
-void GUIDumpAssemblyInfo()
-{
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
- if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport((void*)g_hwndAsmInfo);
- if(g_pAssemblyImport)
- {
- if(g_fDumpRTF) DumpRTFPrefix((void *)g_hwndAsmInfo,FALSE);
- DumpAssembly((void *)g_hwndAsmInfo,FALSE);
- if(g_fDumpRTF) DumpRTFPostfix((void *)g_hwndAsmInfo);
- }
-
- if(g_uCodePage == 0xFFFFFFFF)
- SendMessageW((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)GlobalBuffer);
- else
- {
- UINT32 L = (UINT32)strlen(GlobalBuffer);
- WCHAR* wz = new (nothrow) WCHAR[L+4];
- if(wz)
- {
- memset(wz,0,sizeof(WCHAR)*(L+2));
- int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2);
- if(g_fDumpRTF)
- {
- x = (int)SendMessageA((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz));
- }
- else
- {
- x = (int)WszSendMessage((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)wz);
- }
- delete[] wz;
- }
- }
-}
-
-BOOL GUIAddItemsToList()
-{
- DWORD i,NumGlobals=0;
- HENUMInternal hEnumMethod;
-
- RemoveItemsFromList();
- g_NumClassItems = 0;
- g_NumNamespaces = 0;
-
- g_hRoot = AddOneItem(
- (HTREEITEM)NULL,
- g_pszModule,
- (HTREEITEM)TVI_ROOT,
- FIELD_IMAGE_INDEX,
- g_hwndTreeView,
- TRUE
- );
-
- if (SUCCEEDED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod)))
- {
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- g_pImport->EnumClose(&hEnumMethod);
- }
- if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod)))
- {
- NumGlobals += g_pImport->EnumGetCount(&hEnumMethod);
- g_pImport->EnumClose(&hEnumMethod);
- }
- (*g_ClassItemList)[0].hItem = g_hRoot;
- (*g_ClassItemList)[0].cl = 0;
- (*g_ClassItemList)[0].SubItems = NumGlobals+1;
- (*g_ClassItemList)[0].CurMember = 0;
- (*g_ClassItemList)[0].pMembers = new (nothrow) TreeItem_t[NumGlobals+1];
- g_NumClassItems++;
-
- //AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", "__MANIFEST__");
- AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", 0xFFFFFFFF);
-
- if (g_NumClasses != 0)
- {
- //create root namespaces
- {
- char** rszNamespace = new (nothrow) char*[g_NumClasses];
- ULONG ulNamespaces=0;
- for (i = 0; i < g_NumClasses; i++)
- {
- if (g_cl_enclosing[i] == mdTypeDefNil) // nested classes don't have separate namespaces
- {
- const char *pszClassName, *pszNameSpace;
- if (FAILED(g_pImport->GetNameOfTypeDef(
- g_cl_list[i],
- &pszClassName,
- &pszNameSpace)))
- {
- pszClassName = pszNameSpace = "Invalid TypeDef record";
- }
- if ((pszNameSpace != NULL) && (*pszNameSpace != 0))
- {
- rszNamespace[ulNamespaces++] = (char*)pszNameSpace;
- }
- }
- }
- if (ulNamespaces != 0)
- {
- qsort(&rszNamespace[0],ulNamespaces,sizeof(char*),stringCmp);
- for(i = 0; i < ulNamespaces; i++) FindCreateNamespaceRoot(rszNamespace[i]);
- }
- delete[] rszNamespace;
- }
- AddClassesWithEncloser(mdTypeDefNil,NULL);
- }// end if (g_NumClasses)
- AddGlobalFunctions();
-
- WszSendMessage(g_hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)g_hRoot);
- EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_ENABLED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_ENABLED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_ENABLED);
- DrawMenuBar(g_hwndMain);
-
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzUniBuf,2048);
- wcscat_s(wzUniBuf,2048,L" - IL DASM");
- for(int cnt=0; cnt<100; cnt++)
- {
- SendMessageW(g_hwndMain,WM_SETTEXT, 0, (LPARAM)wzUniBuf);
- SendMessageW(g_hwndMain,WM_GETTEXT, 2048, (LPARAM)&wzUniBuf[2048]);
- wzUniBuf[2047]=0;
- if(0 == wcscmp(wzUniBuf,&wzUniBuf[2048])) break;
- }
- }
-
- if (IsGuiILOnly()) {
- ShowWindow(g_hwndMain, SW_HIDE);
- } else {
- ShowWindow(g_hwndMain, SW_SHOW);
- }
- UpdateWindow(g_hwndMain);
- //GUIDisassemble(0,0,"MANIFEST");
- g_Mode &= ~MODE_GUI;
- DumpManifest(NULL);
- g_Mode |= MODE_GUI;
-
- GUIDumpAssemblyInfo();
-
- TreeView_SelectItem(g_hwndTreeView,g_hRoot);
- SetFocus(g_hwndTreeView);
- return TRUE;
-}
-
-
-//
-// Find class item by class token
-//
-ClassItem_t* ClassItemByToken(mdTypeDef cl)
-{
- for(ULONG i=0; i < g_NumClassItems; i++)
- {
- if((*g_ClassItemList)[i].cl == cl) return &(*g_ClassItemList)[i];
- }
- return NULL;
-}
-
-// Factored out of AddClassToTreeView for its big stack consumption (AddClassToTreeView is
-// called recursively via AddClassesWithEncloser).
-static void AddClassToTreeView_PrettyPrintClass(mdTypeRef crType, LPCUTF8 pszFormat, __out_ecount(cBufferSize) char *pszBuffer, size_t cBufferSize)
-{
- CQuickBytes out;
- sprintf_s(pszBuffer, cBufferSize, pszFormat, PrettyPrintClass(&out, crType, g_pImport));
-}
-
-//
-// Add a class and its members
-//
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
-#endif
-HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl)
-{
- HRESULT hr;
- ClassItem_t *pClassItem;
- HTREEITEM hClassRoot;
- HTREEITEM hNamespaceRoot = hParent;
- HTREEITEM hPrimaryInfo;
- HTREEITEM hLast;
- mdToken *pMemberList = NULL;
- HENUMInternal hEnumMethod; // enumerator for method defs
- HENUMInternal hEnumField; // enumerator for fields
- HENUMInternal hEnumEvent; // enumerator for events
- HENUMInternal hEnumProp; // enumerator for properties
- DWORD NumMembers;
- const char *pszClassName; // name associated with this CL
- const char *pszNamespace;
- DWORD dwClassAttrs;
- mdTypeRef crExtends;
- mdInterfaceImpl ii;
- DWORD NumInterfaces;
- DWORD i;
- char *szPrimaryInfo; // public class foo extends bar
-// char *szFullClassName;
- DWORD SubItems;
- const char *pszSuperName = NULL;
- HENUMInternal hEnumII; // enumerator for interface impl
- mdCustomAttribute *rCA;
- ULONG ulCAs;
- UINT uImageIndex = CLASS_IMAGE_INDEX;
- BOOL bIsEnum = FALSE;
- BOOL bIsValueType = FALSE;
- BOOL bExtendsSysObject=FALSE;
-
- if (FAILED(g_pImport->GetNameOfTypeDef(
- cl,
- &pszClassName,
- &pszNamespace)))
- {
- return FALSE;
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- g_pImport->GetTypeDefProps(
- cl,
- &dwClassAttrs,
- &crExtends
- );
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && (IsTdPublic(dwClassAttrs)||IsTdNestedPublic(dwClassAttrs))) return NULL;
- if(g_fHidePriv && (IsTdNotPublic(dwClassAttrs)||IsTdNestedPrivate(dwClassAttrs))) return NULL;
- if(g_fHideFam && IsTdNestedFamily(dwClassAttrs)) return NULL;
- if(g_fHideAsm && IsTdNestedAssembly(dwClassAttrs)) return NULL;
- if(g_fHideFOA && IsTdNestedFamORAssem(dwClassAttrs)) return NULL;
- if(g_fHideFAA && IsTdNestedFamANDAssem(dwClassAttrs)) return NULL;
- }
- hr = g_pImport->EnumInit(
- mdtInterfaceImpl,
- cl,
- &hEnumII);
- if (FAILED(hr))
- return FALSE;
-
- NumInterfaces = g_pImport->EnumGetCount(&hEnumII);
- hr = g_pImport->EnumInit(mdtMethodDef, cl, &hEnumMethod);
- if (FAILED(hr))
- {
- printf("Unable to enum methods\n");
- return FALSE;
- }
- NumMembers = g_pImport->EnumGetCount(&hEnumMethod);
-
- hr = g_pImport->EnumInit(mdtFieldDef, cl, &hEnumField);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- printf("Unable to enum fields\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumField);
-
- hr = g_pImport->EnumInit(mdtEvent, cl, &hEnumEvent);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- printf("Unable to enum events\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumEvent);
-
- hr = g_pImport->EnumInit(mdtProperty, cl, &hEnumProp);
- if (FAILED(hr))
- {
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- g_pImport->EnumClose(&hEnumEvent);
- printf("Unable to enum properties\n");
- return FALSE;
- }
- NumMembers += g_pImport->EnumGetCount(&hEnumProp);
- if (NumMembers > 0)
- {
- pMemberList = new (nothrow) mdToken[NumMembers];
- if (pMemberList == NULL)
- {
- // close enum before return
- g_pImport->EnumClose(&hEnumMethod);
- g_pImport->EnumClose(&hEnumField);
- g_pImport->EnumClose(&hEnumEvent);
- g_pImport->EnumClose(&hEnumProp);
- return FALSE;
- }
-
- for (i = 0; g_pImport->EnumNext(&hEnumField, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumMethod, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumEvent, &pMemberList[i]); i++);
- for (; g_pImport->EnumNext(&hEnumProp, &pMemberList[i]); i++);
- _ASSERTE(i == NumMembers);
-
- }
- else
- {
- pMemberList = NULL;
- }
-
- // Add class root to treeview
- SubItems = NumMembers + NumInterfaces + 3;
- if (!IsNilToken(crExtends))
- {
- LPCSTR szClassName="";
- LPCSTR szNameSpace="";
- SubItems++;
- if(TypeFromToken(crExtends)==mdtTypeRef)
- {
- if (FAILED(g_pImport->GetNameOfTypeRef(crExtends, &szNameSpace, &szClassName)))
- {
- return FALSE;
- }
- if(!(strcmp(szNameSpace,"System") || strcmp(szClassName, "Object")))
- {
- SubItems--;
- bExtendsSysObject = TRUE;
- }
- }
- else if (TypeFromToken(crExtends) == mdtTypeDef)
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(crExtends, &szClassName, &szNameSpace)))
- {
- return FALSE;
- }
- }
-
- bIsEnum = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"Enum"));
-
- bIsValueType = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"ValueType"))
- && (strcmp(pszNamespace,"System") || strcmp(pszClassName,"Enum"));
- }
- {
- HCORENUM hEnum = NULL;
- rCA = new (nothrow) mdCustomAttribute[4096];
- g_pPubImport->EnumCustomAttributes(&hEnum, cl, 0, rCA, 4096, &ulCAs);
- SubItems += ulCAs;
- g_pPubImport->CloseEnum( hEnum);
- }
- for (i = 0; i < g_NumClasses; i++)
- {
- if(g_cl_enclosing[i] == cl) SubItems++;
- }
-
- if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_IMAGE_INDEX;
- if(bIsValueType) uImageIndex = CLASSVAL_IMAGE_INDEX;
- if(bIsEnum) uImageIndex = CLASSENUM_IMAGE_INDEX;
- char *szptr1;
- if((*pszNamespace != 0) && g_fTreeViewFCN)
- sprintf_s(szString,SZSTRING_SIZE,"%s.",pszNamespace);
- else
- szString[0] = 0;
- strcat_s(szString,SZSTRING_SIZE,pszClassName);
- szptr1 = &szString[strlen(szString)];
- // Count the type parameters -- could be too many for GUI
- DWORD NumTyPars;
- mdGenericParam tkTyPar;
- HCORENUM hEnumTyPar = NULL;
- unsigned jj;
-
- for(jj=0;
- SUCCEEDED(g_pPubImport->EnumGenericParams(&hEnumTyPar, cl, &tkTyPar, 1, &NumTyPars))
- && (NumTyPars != 0); jj++);
-
- if (jj > 0)
- {
- if(jj > 16)
- szptr1 += sprintf_s(szptr1,SZSTRING_REMAINING_SIZE(szptr1),"%s%d type parameters%s",LTN(),jj,GTN());
- else
- DumpGenericPars(szString,cl);
-
- uImageIndex = CLASS_GEN_IMAGE_INDEX;
- if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_GEN_IMAGE_INDEX;
- if(bIsValueType) uImageIndex = CLASSVAL_GEN_IMAGE_INDEX;
- if(bIsEnum) uImageIndex = CLASSENUM_GEN_IMAGE_INDEX;
- }
-
- pClassItem = AddClassToGUI(cl, uImageIndex, pszNamespace, szString, SubItems, &hNamespaceRoot);
- if (pClassItem == NULL)
- return FALSE;
-
- hClassRoot = pClassItem->hItem;
-
- const size_t BUFFER_SIZE = 8192;
- szPrimaryInfo = new (nothrow) char[BUFFER_SIZE];
- strcpy_s(szPrimaryInfo, BUFFER_SIZE,".class ");
-
- if (IsTdInterface(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "interface ");
- //else if (IsTdUnmanagedValueType(dwClassAttrs)) strcat(szPrimaryInfo, "not_in_gc_heap value ");
- else if (bIsValueType) strcat_s(szPrimaryInfo, BUFFER_SIZE, "value ");
- else if (bIsEnum) strcat_s(szPrimaryInfo, BUFFER_SIZE, "enum ");
-
- if (IsTdPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "public ");
- if (IsTdNotPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "private ");
- if (IsTdNestedPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested public ");
- if (IsTdNestedPrivate(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested private ");
- if (IsTdNestedFamily(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested family ");
- if (IsTdNestedAssembly(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested assembly ");
- if (IsTdNestedFamANDAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famandassem ");
- if (IsTdNestedFamORAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famorassem ");
- if (IsTdAbstract(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "abstract ");
- if (IsTdAutoLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "auto ");
- if (IsTdSequentialLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sequential ");
- if (IsTdExplicitLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "explicit ");
- if (IsTdAnsiClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "ansi ");
- if (IsTdUnicodeClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "unicode ");
- if (IsTdAutoClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "autochar ");
- if (IsTdImport(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "import ");
- if (IsTdWindowsRuntime(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "windowsruntime ");
- if (IsTdSerializable(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "serializable ");
-// if (IsTdEnum(dwClassAttrs)) strcat(szPrimaryInfo, "enum ");
- if (IsTdSealed(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sealed ");
- if (IsTdBeforeFieldInit(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "beforefieldinit ");
- if (IsTdSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "specialname ");
- if (IsTdRTSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "rtspecialname ");
-
- if(g_fDumpTokens) sprintf_s(&szPrimaryInfo[strlen(szPrimaryInfo)], BUFFER_SIZE - strlen(szPrimaryInfo)," /*%08X*/",cl);
- hPrimaryInfo = AddInfoItemToClass(hClassRoot, pClassItem, szPrimaryInfo, NULL);
- hLast = hPrimaryInfo;
- // Now add nodes for extends, implements
- if (!IsNilToken(crExtends))
- {
- if (!bExtendsSysObject)
- {
- AddClassToTreeView_PrettyPrintClass(crExtends, " extends %s ", szPrimaryInfo, BUFFER_SIZE);
- hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crExtends);
- }
- }
-
- if (NumInterfaces > 0)
- {
- for (i=0; g_pImport->EnumNext(&hEnumII, &ii); i++)
- {
- mdTypeRef crInterface;
-
- if (FAILED(g_pImport->GetTypeOfInterfaceImpl(ii, &crInterface)))
- {
- printf("Unable to get information about interface implementation\n");
- return FALSE;
- }
- {
- AddClassToTreeView_PrettyPrintClass(crInterface, " implements %s ", szPrimaryInfo, BUFFER_SIZE);
- hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crInterface);
- }
- }
-
- // The assertion will fire if the enumerator is bad
- _ASSERTE(NumInterfaces == i);
-
- // close the enumerator
- g_pImport->EnumClose(&hEnumII);
- }
- delete[] szPrimaryInfo;
-
- BOOL fDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- // add info entries for custom attributes
- for(i = 0; i < ulCAs; i++)
- {
- char* pc;
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
- DumpCustomAttribute(rCA[i],(void *)g_hwndTreeView,false);
- if(pc = strchr(GlobalBuffer,'\r')) strcpy_s(pc,6," ..."); // until the first <CR> only
- //hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, "#####"); // this "name" is guaranteed to be unique!
- hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, rCA[i]);
- }
- delete[] rCA;
-
- // Re-fetch the current class item ptr, dynamic array may have shifted
- pClassItem = ClassItemByToken(cl);
-
- // Add nested classes
- AddClassesWithEncloser(cl,pClassItem->hItem);
- pClassItem = ClassItemByToken(cl);
-
- MemberInfo* members = NULL;
- if (NumMembers != 0)
- {
- members = new (nothrow) MemberInfo[NumMembers];
- if (members == NULL)
- {
- if (pMemberList != NULL) delete[] pMemberList;
- return FALSE;
- }
- }
- // do in four passes, fields first
- MemberInfo* curMem = members;
- for (i = 0; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtFieldDef)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetFieldDefProps(pMemberList[i], &curMem->dwAttrs)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- if (FAILED(g_pImport->GetNameOfFieldDef(pMemberList[i], &curMem->pszMemberName)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- if (FAILED(g_pImport->GetSigOfFieldDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig)))
- {
- printf("Invalid FieldDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- curMem++;
- }
- else break;
- }
-
- MemberInfo* endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
-
- for (curMem = members; curMem < endMem;curMem++)
- {
- if (g_fLimitedVisibility)
- {
- if(g_fHidePub && IsFdPublic(curMem->dwAttrs)) continue;
- if(g_fHidePriv && IsFdPrivate(curMem->dwAttrs)) continue;
- if(g_fHideFam && IsFdFamily(curMem->dwAttrs)) continue;
- if(g_fHideAsm && IsFdAssembly(curMem->dwAttrs)) continue;
- if(g_fHideFOA && IsFdFamORAssem(curMem->dwAttrs)) continue;
- if(g_fHideFAA && IsFdFamANDAssem(curMem->dwAttrs)) continue;
- if(g_fHidePrivScope && IsFdPrivateScope(curMem->dwAttrs)) continue;
- }
- AddFieldToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, NULL, curMem->token, curMem->dwAttrs);
- }
-
- // methods second
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtMethodDef)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetMethodDefProps(pMemberList[i], &curMem->dwAttrs)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
-
- if (FAILED(g_pImport->GetNameOfMethodDef(pMemberList[i], &curMem->pszMemberName)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- if (FAILED(g_pImport->GetSigOfMethodDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig)))
- {
- printf("Invalid MethodDef %08X record\n", pMemberList[i]);
- delete []members;
- delete []pMemberList;
- return FALSE;
- }
- curMem++;
- }
- else break;
- }
-
- endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
-
- for (curMem = members; curMem < endMem;curMem++)
- {
- if (g_fLimitedVisibility)
- {
- if(g_fHidePub && IsMdPublic(curMem->dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(curMem->dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(curMem->dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(curMem->dwAttrs)) continue;
- if(g_fHideAsm && g_fHideFam && IsMdFamORAssem(curMem->dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(curMem->dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(curMem->dwAttrs)) continue;
- }
- AddMethodToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, curMem->pComSig, curMem->cComSig, curMem->token, curMem->dwAttrs);
- }
- // events third
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtEvent)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetEventProps(
- curMem->token,
- &curMem->pszMemberName,
- &curMem->dwAttrs,
- (mdToken *)&curMem->pComSig)))
- {
- curMem->pszMemberName = "Invalid Event record";
- curMem->dwAttrs = 0;
- curMem->pComSig = (PCCOR_SIGNATURE)mdTypeDefNil;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- curMem++;
- }
- else break;
- }
-
- endMem = curMem;
- if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
- curMem = members;
- while (curMem < endMem)
- {
- if (g_fLimitedVisibility)
- {
- HENUMInternal hAssoc;
- unsigned nAssoc;
- if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc)))
- {
- continue;
- }
- if (nAssoc = hAssoc.m_ulCount)
- {
- NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc];
- if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc)))
- {
- continue;
- }
-
- for (unsigned i=0; i < nAssoc;i++)
- {
- if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef)
- {
- DWORD dwAttrs;
- if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs)))
- {
- continue;
- }
- if(g_fHidePub && IsMdPublic(dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue;
- }
- AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- break;
- }
- }
- g_pImport->EnumClose(&hAssoc);
- }
- else AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- curMem++;
- }
- // properties fourth
- curMem = members;
- for (; i < NumMembers; i++)
- {
- if (TypeFromToken(pMemberList[i]) == mdtProperty)
- {
- curMem->token = pMemberList[i];
- if (FAILED(g_pImport->GetPropertyProps(
- curMem->token,
- &curMem->pszMemberName,
- &curMem->dwAttrs,
- &curMem->pComSig,
- &curMem->cComSig)))
- {
- curMem->pszMemberName = "Invalid Property record";
- curMem->dwAttrs = 0;
- curMem->pComSig = NULL;
- curMem->cComSig = 0;
- }
- MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]);
- curMem++;
- }
- }
-
- endMem = curMem;
- if(g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp);
- curMem = members;
- while(curMem < endMem)
- {
- if (g_fLimitedVisibility)
- {
- HENUMInternal hAssoc;
- unsigned nAssoc;
- if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc)))
- {
- continue;
- }
- if (nAssoc = hAssoc.m_ulCount)
- {
- NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc];
- if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc)))
- {
- continue;
- }
-
- for (unsigned i=0; i < nAssoc;i++)
- {
- if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef)
- {
- DWORD dwAttrs;
- if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs)))
- {
- continue;
- }
- if(g_fHidePub && IsMdPublic(dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue;
- }
- AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- break;
- }
- }
- g_pImport->EnumClose(&hAssoc);
- }
- else AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token);
- curMem++;
- }
- g_fDumpRTF = fDumpRTF;
- if(pMemberList) delete[] pMemberList;
- if(members) delete[] members;
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
- return hClassRoot;
-}
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-
-void CreateMenus()
-{
- HMENU hMenuPopup;
-
- g_hMenu = CreateMenu();
-
- hMenuPopup = CreateMenu();
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_OPEN, RstrW(IDS_OPEN));
- WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP, RstrW(IDS_DUMP));
- WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP_TREE, RstrW(IDS_DUMPTREE));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_EXIT, RstrW(IDS_EXIT));
- WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_FILE));
- g_hFileMenu = hMenuPopup;
-
- hMenuPopup = CreateMenu();
- g_hFontMenu = CreateMenu();
- WszAppendMenu(hMenuPopup,MF_POPUP,(UINT)(UINT_PTR)g_hFontMenu,RstrW(IDS_FONTS));
- WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_TREE,RstrW(IDS_FONT_TREE));
- WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_DASM,RstrW(IDS_FONT_DASM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fSortByName ? MF_CHECKED : MF_UNCHECKED), IDM_SORT_BY_NAME, RstrW(IDS_SORT_BY_NAME));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fTreeViewFCN ? MF_CHECKED : MF_UNCHECKED), IDM_TREEVIEWFCN, RstrW(IDS_TREEVIEWFCN));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fCAVerbal ? MF_CHECKED : MF_UNCHECKED), IDM_CAVERBAL, RstrW(IDS_CAVERBAL));
- //WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpRTF ? MF_CHECKED : MF_UNCHECKED), IDM_DUMPRTF, RstrW(IDS_DUMPRTF));
- // MF_SEPARATOR ==> last 2 params ignored
- WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL);
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePub ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PUB, RstrW(IDS_SHOW_PUB));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePriv ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PRIV, RstrW(IDS_SHOW_PRIV));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFam ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAM, RstrW(IDS_SHOW_FAM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideAsm ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_ASM, RstrW(IDS_SHOW_ASM));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFAA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAA, RstrW(IDS_SHOW_FAA));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFOA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FOA, RstrW(IDS_SHOW_FOA));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePrivScope ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PSCOPE, RstrW(IDS_SHOW_PSCOPE));
- WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL);
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fFullMemberInfo ? MF_CHECKED : MF_UNCHECKED), IDM_FULL_INFO, RstrW(IDS_FULL_INFO));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowBytes ? MF_CHECKED : MF_UNCHECKED), IDM_BYTES, RstrW(IDS_BYTES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpTokens ? MF_CHECKED : MF_UNCHECKED), IDM_TOKENS, RstrW(IDS_TOKENS));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowSource ? MF_CHECKED : MF_UNCHECKED), IDM_SOURCELINES, RstrW(IDS_SOURCELINES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fQuoteAllNames ? MF_CHECKED : MF_UNCHECKED), IDM_QUOTEALLNAMES, RstrW(IDS_QUOTEALLNAMES));
- WszAppendMenu(hMenuPopup, MF_STRING|(g_fTryInCode ? MF_CHECKED : MF_UNCHECKED), IDM_EXPANDTRY, RstrW(IDS_EXPANDTRY));
- if(g_fTDC)
- {
-
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_HEADER, RstrW(IDS_SHOW_HEADER));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_STAT, RstrW(IDS_SHOW_STAT));
- g_hMetaInfoMenu = CreateMenu();
- //MENUINFO mi;
- //GetMenuInfo(g_hMetaInfoMenu,&mi);
- //mi.dwStyle |= MNS_MODELESS;
- //SetMenuInfo(g_hMetaInfoMenu,&mi);
- WszAppendMenu(hMenuPopup, MF_POPUP, (UINT)(UINT_PTR)g_hMetaInfoMenu, RstrW(IDS_METAINFO));
-
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEX,RstrW(IDS_MI_HEX));
- WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL);
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED),IDM_MI_CSV,RstrW(IDS_MI_CSV));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEADER,RstrW(IDS_MI_HEADER));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED),IDM_MI_SCHEMA,RstrW(IDS_MI_SCHEMA));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED),IDM_MI_RAW,RstrW(IDS_MI_RAW));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEAPS,RstrW(IDS_MI_HEAPS));
- WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL);
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED),IDM_MI_UNREX,RstrW(IDS_MI_UNREX));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED),IDM_MI_VALIDATE,RstrW(IDS_MI_VALIDATE));
- WszAppendMenu(g_hMetaInfoMenu,MF_STRING,IDM_SHOW_METAINFO,RstrW(IDS_SHOW_METAINFO));
- }
- WszAppendMenu(g_hMenu, MF_POPUP|MF_GRAYED, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_VIEW));
- g_hViewMenu = hMenuPopup;
- hMenuPopup = CreateMenu();
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_HELP,RstrW(IDS_HELP));
- WszAppendMenu(hMenuPopup, MF_STRING, IDM_ABOUT,RstrW(IDS_ABOUT));
- WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_HELP));
-}
-
-BOOL LoadImages()
-{
- int i;
-
- g_hImageList = ImageList_Create(BITMAP_WIDTH, BITMAP_HEIGHT, ILC_COLOR8, LAST_IMAGE_INDEX, 1);
- if (g_hImageList == NULL)
- return FALSE;
-
- _ASSERTE(g_hResources != NULL);
- for (i = 0; i < LAST_IMAGE_INDEX; i++)
- {
- g_hBitmaps[i] = (HBITMAP) WszLoadImage(
- g_hResources,
- MAKEINTRESOURCE(i + IDB_CLASS),
- IMAGE_BITMAP,
- 15,
- 15,
- LR_LOADTRANSPARENT //LR_DEFAULTCOLOR
- );
- if (g_hBitmaps[i] == NULL)
- return FALSE;
- int index = ImageList_Add(g_hImageList, g_hBitmaps[i], NULL);
- if (index != i)
- return FALSE;
- }
-
- return TRUE;
-}
-// Local functions for font persistence:
-char* FontSaveFileName()
-{
- static char szFileName[MAX_PATH];
- static BOOL bInit = TRUE;
- if(bInit)
- {
- (void)GetWindowsDirectoryA(szFileName,MAX_PATH);
- if(szFileName[strlen(szFileName)-1]!='\\') strcat_s(szFileName,MAX_PATH,"\\");
- strcat_s(szFileName,MAX_PATH,"ildasmfnt.bin");
- bInit = FALSE;
- }
- return szFileName;
-}
-BOOL LoadGUIFonts(GUI_Info* pguiInfo)
-{
- FILE* pF = NULL;
- BOOL ret = FALSE;
- int dummy;
- if(fopen_s(&pF,FontSaveFileName(),"rb")==0)
- {
- ret = (fread(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF) && fread(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF));
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->x = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->y = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->w = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->h = dummy;
- if(fread(&dummy,sizeof(int),1,pF)) g_fTreeViewFCN = (dummy != 0);
- if(fread(&dummy,sizeof(int),1,pF)) g_fSortByName = (dummy != 0);
- if(fread(&dummy,sizeof(int),1,pF)) g_fFullMemberInfo = (dummy != 0);
-
- fclose(pF);
- }
- return ret;
-}
-BOOL SaveGUIFonts(GUI_Info* pguiInfo)
-{
- FILE* pF=NULL;
- BOOL ret = FALSE;
- int dummyFCN = (g_fTreeViewFCN ? 1:0);
- int dummySBN = (g_fSortByName ? 1:0);
- int dummyFMI = (g_fFullMemberInfo ? 1:0);
- if(fopen_s(&pF,FontSaveFileName(),"wb")==0)
- {
- ret = (fwrite(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF)
- && fwrite(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF)
- && fwrite(&(pguiInfo->x),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->y),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->w),sizeof(int),1,pF)
- && fwrite(&(pguiInfo->h),sizeof(int),1,pF)
- && fwrite(&dummyFCN,sizeof(int),1,pF)
- && fwrite(&dummySBN,sizeof(int),1,pF)
- && fwrite(&dummyFMI,sizeof(int),1,pF)
- );
- fclose(pF);
- }
- return ret;
-}
-// Init various GUI variables, get handles
-// if InitGUI returns FALSE, ildasm exits
-#define DEFAULT_FONTS
-BOOL InitGUI()
-{
- INITCOMMONCONTROLSEX InitInfo;
-#ifdef DEFAULT_FONTS
- LOGFONTW strDefaultLogFontDasm = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,L"Fixedsys"};
- LOGFONTW strDefaultLogFontTree = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,L"Tahoma"};
- LOGFONTA strDefaultLogFontDasmA = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,"Fixedsys"};
- LOGFONTA strDefaultLogFontTreeA = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET,
- OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,"Tahoma"};
-#endif
- g_DisasmBox = new DynamicArray<DisasmBox_t>;
- g_ClassItemList = new DynamicArray<ClassItem_t>;
- g_NamespaceList = new DynamicArray<Namespace_t>;
- WszLoadLibrary(L"riched20.dll");
-
- InitInfo.dwSize = sizeof(InitInfo);
- InitInfo.dwICC = ICC_LISTVIEW_CLASSES;
-
- if (InitCommonControlsEx(&InitInfo) == FALSE)
- return FALSE;
-
- g_hInstance = WszGetModuleHandle(NULL);
- g_hResources = LoadLocalizedResourceDLLForSDK(L"ildasmrc.dll");
-
- //--------- get logical fonts
-#ifdef DEFAULT_FONTS
- if(!LoadGUIFonts(&guiInfo))
- {
- memcpy(&g_strLogFontDasm,&strDefaultLogFontDasm,sizeof(LOGFONTW));
- memcpy(&g_strLogFontTree,&strDefaultLogFontTree,sizeof(LOGFONTW));
- }
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- // -------- create font for disassembly window
- g_hFixedFont = CreateFontIndirectW(&g_strLogFontDasm);
- // -------- create font for tree view
- g_hSmallFont = CreateFontIndirectW(&g_strLogFontTree);
-#else
- if(LoadGUIFonts(&guiInfo))
- {
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- // -------- create font for disassembly window
- g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm);
- // -------- create font for tree view
- g_hSmallFont = CreateFontIndirect(&g_strLogFontTree);
- }
- else
- {
- g_hFixedFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
- g_hSmallFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
- }
-#endif
- if (g_hFixedFont == NULL) return FALSE;
- if (g_hSmallFont == NULL) return FALSE;
-
- memset(&g_strChFontDasm,0,sizeof(CHOOSEFONT));
- g_strChFontDasm.lStructSize = sizeof(CHOOSEFONT);
- g_strChFontDasm.lpLogFont = &g_strLogFontDasm;
- g_strChFontDasm.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP;
- if(!g_fDumpRTF) g_strChFontDasm.Flags |= CF_EFFECTS; // no color change option for RTF output!
- g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT);
-
- memset(&g_strChFontTree,0,sizeof(CHOOSEFONTW));
- g_strChFontTree.lStructSize = sizeof(CHOOSEFONTW);
- g_strChFontTree.lpLogFont = &g_strLogFontTree;
- g_strChFontTree.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP /*| CF_EFFECTS*/;
- g_strChFontTree.rgbColors = GetSysColor(COLOR_WINDOWTEXT);
-
- g_hWhiteBrush = (HBRUSH) GetStockObject(WHITE_BRUSH);
- if (g_hWhiteBrush == NULL)
- return FALSE;
-
- if (LoadImages() == FALSE)
- return FALSE;
-
- if (RegisterWindowClasses() == FALSE)
- return FALSE;
-#undef RegisterWindowMessageW
- g_uFindReplaceMsg = RegisterWindowMessageW(FINDMSGSTRING);
-
- CreateMenus();
-
- return TRUE;
-}
-
-void DestroyGUI()
-{
- SDELETE(g_DisasmBox);
- SDELETE(g_ClassItemList);
- SDELETE(g_NamespaceList);
-}
-//
-// Set the font of a particular window to the global fixed size font
-//
-void SetWindowFontFixed(HWND hwnd)
-{
- WszSendMessage(
- hwnd,
- WM_SETFONT,
- (LPARAM) g_hFixedFont,
- FALSE
- );
-}
-
-
-//
-// Set the char dimensions variables
-//
-void SetCharDimensions(HWND hwnd)
-{
- if (InterlockedIncrement(&g_SetCharDimensions) == 1)
- {
- HDC hdc;
- TEXTMETRIC tm;
-
- hdc = GetDC(hwnd);
-
- GetTextMetrics(hdc, &tm);
-
- g_MaxCharWidth = tm.tmAveCharWidth;
- g_Height = tm.tmHeight;
-
- ReleaseDC(hwnd, hdc);
- }
- else
- {
- // Already set
- InterlockedDecrement(&g_SetCharDimensions);
- }
-}
-
-
-//
-// Given a member handle and a class item, find the TreeItem for that member
-//
-TreeItem_t *FindMemberInClass(ClassItem_t *pClassItem, HTREEITEM hMember)
-{
- DWORD i;
-
- for (i = 0; i < pClassItem->SubItems; i++)
- {
- if (pClassItem->pMembers[i].hItem == hMember)
- return &pClassItem->pMembers[i];
- }
-
- return NULL;
-}
-
-
-//
-// Register the window classes
-//
-BOOL RegisterWindowClasses()
-{
- _ASSERTE(g_hResources != NULL);
- WNDCLASSW wndClass;
-
- wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
- wndClass.lpfnWndProc = DisassemblyWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = g_hWhiteBrush;
- wndClass.lpszMenuName = NULL;
- wndClass.lpszClassName = DISASSEMBLY_CLASS_NAMEW;
- if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0)
- return FALSE;
-
- wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
- wndClass.lpfnWndProc = MainWndProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = 0;
- wndClass.hInstance = g_hInstance;
- wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2));
- wndClass.hCursor = NULL;
- wndClass.hbrBackground = g_hWhiteBrush;
- wndClass.lpszMenuName = NULL;
-
- wndClass.lpszClassName = MAIN_WINDOW_CLASSW;
- if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0)
- return FALSE;
- return TRUE;
-}
-
-//
-// Dump one item to global buffer
-//
-void GUIDumpItemToDisassemblyEditBox(void*pvDLB, mdToken cl, mdToken mbMember)
-{
- const char * pszClassName;
- const char * pszNamespace;
- mdTypeRef crExtends;
- DWORD dwClassAttrs;
-
- if ((cl != mdTokenNil)&&TypeFromToken(mbMember))
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(cl, &pszClassName, &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- }
- else
- {
- pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields";
- }
- memset(GlobalBuffer,0,GlobalBufferLen);
- InGlobalBuffer = 0;
-
- if (TypeFromToken(mbMember) && cl && (cl != mdTypeDefNil))
- {
- if (FAILED(g_pImport->GetTypeDefProps(cl, &dwClassAttrs, &crExtends)))
- {
- dwClassAttrs = 0;
- crExtends = mdTypeDefNil;
- }
- }
- g_Mode |= MODE_GUI;
- //_ASSERTE(0);
- mdToken tkVarOwner = g_tkVarOwner;
- g_tkVarOwner = cl;
- if(g_fDumpRTF) DumpRTFPrefix(pvDLB,FALSE);
- switch (TypeFromToken(mbMember))
- {
- case 0:
- switch(cl)
- {
- case 0:
- DumpManifest(pvDLB);
- DumpTypedefs(pvDLB);
- break;
- case IDM_SHOW_HEADER:
- DumpHeader(g_CORHeader,pvDLB);
- DumpHeaderDetails(g_CORHeader,pvDLB);
- break;
- case IDM_SHOW_METAINFO:
- DumpMetaInfo(g_wszFullInputFile,NULL,pvDLB);
- break;
- case IDM_SHOW_STAT:
- DumpStatistics(g_CORHeader,pvDLB);
- break;
- }
- break;
-
- case mdtTypeDef:
- DumpClass(mbMember,VAL32(g_CORHeader->EntryPointToken), pvDLB, 1); //1 = title+size+pack+custom attributes
- break;
- case mdtFieldDef:
- {
- ULONG ul1,ul2;
- GetClassLayout(cl,&ul1,&ul2);
- DumpField(mbMember,pszClassName, pvDLB, TRUE);
- }
- break;
- case mdtMethodDef:
- DumpMethod(mbMember,pszClassName,VAL32(g_CORHeader->EntryPointToken), pvDLB, TRUE);
- break;
- case mdtEvent:
- DumpEvent(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE);
- break;
- case mdtProperty:
- DumpProp(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE);
- break;
- }
- if(g_fDumpRTF) DumpRTFPostfix(pvDLB);
- g_tkVarOwner = tkVarOwner;
- if(g_uCodePage==0xFFFFFFFF)
- {
- SendMessageW((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)GlobalBuffer);
- }
- else
- {
- UINT32 L = (UINT32)strlen(GlobalBuffer);
- WCHAR* wz = new (nothrow) WCHAR[L+4];
- if(wz)
- {
- memset(wz,0,sizeof(WCHAR)*(L+2));
- int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2);
- if(g_fDumpRTF)
- {
- x = (int)SendMessageA((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz));
- }
- else
- {
- SETTEXTEX ste;
- ste.flags = ST_DEFAULT;
- ste.codepage = 1200;
- x = (int)WszSendMessage((HWND)pvDLB,EM_SETTEXTEX,(WPARAM)&ste, (LPARAM)wz);
- }
- delete[] wz;
- }
- }
-}
-
-//
-// Disassemble the given method in a new window
-//
-
-HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszNiceMemberName)
-{
- HWND hwndDisassemblyMain;
- HWND hwndDisassemblyListBox;
- const char * pszClassName;
- const char * pszNamespace;
- char* szTemp=NULL;
- RECT rcl;
- static char szsz[4096];
- bool fUpdate = false;
- bool fMetaInfo = (TypeFromToken(mbMember)==0)&&(cl==IDM_SHOW_METAINFO);
- BOOL fDumpRTF = g_fDumpRTF;
- if(fMetaInfo) g_fDumpRTF = FALSE;
-
- //before we even try, check if this member's disasm box is already opened
- DisasmBox_t* pDisasmBox = FindDisasmBox(cl, mbMember);
- if(pDisasmBox)
- {
- if(fMetaInfo || (0 == strcmp(pszNiceMemberName,"UpdateThisDisassemblyBox")))
- {
- fUpdate = true;
- }
- else
- {
- PostMessageA(pDisasmBox->hwndContainer,WM_ACTIVATE,WA_CLICKACTIVE,0);
- PostMessageA(pDisasmBox->hwndContainer,WM_SETFOCUS,0,0);
- return pDisasmBox->hwndContainer;
- }
- }
- if(fUpdate)
- {
- SendMessageW(pDisasmBox->hwndContainer,WM_GETTEXT, 0, (LPARAM)szsz);
- strcpy_s(szsz,4096,UnicodeToUtf((WCHAR*)szsz));
-
- szTemp = szsz;
- PostMessageA(pDisasmBox->hwndContainer,WM_CLOSE,1,0);
- }
- else
- {
- // Prepend class name to nicely formatted member name
- if (mbMember != 0)
- {
- if (cl != mdTokenNil)
- {
- if (FAILED(g_pImport->GetNameOfTypeDef(
- cl,
- &pszClassName,
- &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,cl);
- if(*pszNamespace != 0)
- sprintf_s(szsz,4096,"%s.",pszNamespace);
- else
- szsz[0] = 0;
- strcat_s(szsz,4096,pszClassName);
- pszClassName = (const char*)&szsz[0];
- }
- else
- {
- pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields";
- }
- szTemp = new (nothrow) char[strlen(pszClassName)+strlen(pszNiceMemberName)+4];
- if(szTemp) sprintf_s(szTemp, strlen(pszClassName)+strlen(pszNiceMemberName)+4,"%s::%s", pszClassName, pszNiceMemberName);
- _ASSERTE(TypeFromToken(mbMember) & (mdtMethodDef|mdtEvent|mdtProperty|mdtTypeDef|mdtFieldDef));
- }
- if(!szTemp) szTemp = pszNiceMemberName;
- }
- _ASSERTE(szTemp);
-
- HMENU hMenu = CreateMenu();
- WszAppendMenu(hMenu, MF_STRING, IDM_FIND, RstrW(IDS_FIND));
- WszAppendMenu(hMenu, MF_STRING, IDM_FINDNEXT, RstrW(IDS_FINDNEXT));
-
- hwndDisassemblyMain = WszCreateWindowEx(
- WS_EX_CLIENTEDGE,
- DISASSEMBLY_CLASS_NAMEW,
- UtfToUnicode(szTemp),
- WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- 640,
- 400,
- NULL,
- hMenu, // menu
- g_hInstance, // hinst
- NULL
- );
- SendMessageW(hwndDisassemblyMain,WM_SETTEXT, 0, (LPARAM)(UtfToUnicode(szTemp)));
-
- if((!fUpdate) && szTemp &&(szTemp != pszNiceMemberName)) delete[] szTemp;
- if (hwndDisassemblyMain == NULL)
- {
- g_fDumpRTF = fDumpRTF;
- return NULL;
- }
- GetClientRect(hwndDisassemblyMain, &rcl);
-
- hwndDisassemblyListBox = WszCreateWindowEx(
- 0,
- (!g_fDumpRTF) ? L"RichEdit20W" : L"RichEdit20A",
- RstrW(IDS_TEXTTOOLARGEFORGUI),
- WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE
- | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL,
- rcl.left,
- rcl.top,
- rcl.right - rcl.left,
- rcl.bottom - rcl.top,
- hwndDisassemblyMain,
- (HMENU) ID_LISTBOX,
- g_hInstance, // hinst
- NULL
- );
-
- DWORD e = GetLastError();
- _ASSERTE(hwndDisassemblyListBox);
- if (hwndDisassemblyListBox == NULL)
- {
- DestroyWindow(hwndDisassemblyMain);
- return NULL;
- }
-
- if(fUpdate)
- {
- UpdateDisasmBox(pDisasmBox, hwndDisassemblyMain, hwndDisassemblyListBox, hMenu);
- }
- else
- AddDisasmBox(hwndDisassemblyMain, hwndDisassemblyListBox, hMenu, cl, mbMember);
-
- SendMessage(hwndDisassemblyListBox,EM_SETTEXTMODE,TM_RICHTEXT|TM_MULTICODEPAGE,0);
- SendMessage(hwndDisassemblyListBox,EM_SETBKGNDCOLOR,0,GetSysColor(COLOR_INFOBK));
- SetWindowFontFixed(hwndDisassemblyListBox);
- SetCharDimensions(hwndDisassemblyListBox);
-
- GUIDumpItemToDisassemblyEditBox((void *)hwndDisassemblyListBox,cl,mbMember);
-
- ShowWindow(hwndDisassemblyMain, SW_SHOWNORMAL);
- UpdateWindow(hwndDisassemblyMain);
-
- g_fDumpRTF = fDumpRTF;
- return hwndDisassemblyMain;
-}
-
-//
-// Callback by the disassembler to add another entry to the disassembly window
-//
-void GUIAddOpcode(__inout_opt __nullterminated const char *pszString, __in_opt void *GUICookie)
-{
- if(pszString)
- {
- ULONG L = (g_uCodePage == 0xFFFFFFFF) ? (ULONG)(wcslen((WCHAR*)pszString)*sizeof(WCHAR)) : (ULONG)strlen(pszString);
- if(InGlobalBuffer+L >= GlobalBufferLen-4)
- {
- ULONG LL = ((L >> 12)+1)<<12;
- char *pch = new (nothrow) char[GlobalBufferLen + LL];
- if(pch)
- {
- memcpy(pch,GlobalBuffer,InGlobalBuffer+1);
- delete[] GlobalBuffer;
- GlobalBuffer = pch;
- GlobalBufferLen += LL;
- }
- }
- if(g_uCodePage == 0xFFFFFFFF)
- {
- if(g_fDumpRTF)
- {
- swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\\line\r\n",(WCHAR*)pszString);
- InGlobalBuffer += L+14;
- }
- else
- {
- swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\r\n",(WCHAR*)pszString);
- InGlobalBuffer += L+4;
- }
- }
- else
- {
- if(g_fDumpRTF)
- {
- sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\\line\r\n",pszString);
- InGlobalBuffer += L+7;
- }
- else
- {
- sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\r\n",pszString);
- InGlobalBuffer += L+2;
- }
- }
- }
- else
- {
- delete[] GlobalBuffer;
- GlobalBufferLen = 0;
- InGlobalBuffer = 0;
- }
-}
-
-//
-// Someone has double clicked on an item
-//
-// It could be a method (diassemble it), or a field (ignore it), or an "extends" or "implements"
-// component, in which case we select that component if available.
-//
-HWND DoubleClickSelectedMember(HTREEITEM hItem)
-{
- HTREEITEM hClass;
- ClassItem_t *pClassItem;
-
- static HCURSOR hWaitCursor = NULL;
-
- if (hWaitCursor == NULL)
- hWaitCursor = WszLoadCursor(NULL,IDC_WAIT);
-
- //
- // It could be any item, but assume it's a member item or class info and find its parent
- //
- hClass = TreeView_GetParent(g_hwndTreeView, hItem);
- if (hClass == NULL)
- return NULL;
-
- //
- // Find the class item given the HTREEITEM
- // (will return NULL if hClass is not really a class item)
- //
- pClassItem = FindClassItem(hClass);
- if (pClassItem != NULL)
- {
- // Which subitem was it?
- TreeItem_t *pItem = FindMemberInClass(pClassItem, hItem);
-
- if (pItem == NULL)
- return NULL;
-
- if (pItem->Discriminator == TREEITEM_TYPE_MEMBER)
- {
- TVITEMA SelItem;
- char* szText;
- // Must be a method, event or property
- switch (TypeFromToken(pItem->mbMember))
- {
- case mdtMethodDef:
- case mdtEvent:
- case mdtProperty:
- case mdtFieldDef:
- break;
- default:
- return NULL;
- }
-
-
- // Get the name of this item so that we can title the disassembly window
- szText = new (nothrow) char[8192];
- if(szText)
- {
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pItem->hItem;
- SelItem.cchTextMax = 8192;
-
- WCHAR* wzText = (WCHAR*)szText;
- SelItem.cchTextMax /= sizeof(WCHAR);
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- if(szUTFText)
- {
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
- }
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(pClassItem->cl, pItem->mbMember, szText? szText : "");
- if(szText) delete[] szText;
-
- SetCursor(hWasCursor);
-
- return hRet;
- }
- else if (pItem->Discriminator == TREEITEM_TYPE_INFO)
- {
- if(pItem->mbMember)
- {
- if(pItem->mbMember != 0xFFFFFFFF)
- {
- // We've clicked on an "extends X" or "implements Y", so select that class
- SelectClassByToken(pItem->mbMember);
- }
- else
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(0, 0, "MANIFEST");
-
- SetCursor(hWasCursor);
- return hRet;
- }
- }
- else
- {
- TVITEMA SelItem;
- char* szText = new (nothrow) char[8192];
- if(szText)
- {
- // Get the name of this item so that we can title the disassembly window
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.hItem = pItem->hItem;
- SelItem.cchTextMax = 8192;
-
- WCHAR* wzText = (WCHAR*)szText;
- SelItem.cchTextMax /= sizeof(WCHAR);
- SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem);
- unsigned L = ((unsigned)wcslen(wzText)+1)*3;
- char* szUTFText = new (nothrow) char[L];
- memset(szUTFText,0,L);
- WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL);
- delete[] wzText;
- szText = szUTFText;
- }
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
-
- HWND hRet = GUIDisassemble(pClassItem->cl, pClassItem->cl, szText ? szText : "");
- if(szText) delete[] szText;
-
- SetCursor(hWasCursor);
-
- return hRet;
- }
- }
- }
- return NULL;
-}
-
-
-void SelectClassByName(__in __nullterminated char *pszFQName)
-{
- ClassItem_t *pDestItem;
-
- // Find namespace
- char *p = ns::FindSep(pszFQName);
- if (p == NULL)
- {
- pDestItem = FindClassItem(NULL, pszFQName);
- }
- else
- {
- char szBuffer[MAX_CLASSNAME_LENGTH];
- strncpy_s(szBuffer, MAX_CLASSNAME_LENGTH,pszFQName, p - pszFQName);
- szBuffer[ p - pszFQName ] = '\0';
- pDestItem = FindClassItem(szBuffer, p+1);
- }
-
- if (pDestItem != NULL)
- {
- SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem);
- }
-}
-
-void SelectClassByToken(mdToken tk)
-{
- if(TypeFromToken(tk)==mdtTypeDef)
- {
- ClassItem_t *pDestItem;
- if(pDestItem = FindClassItem(tk))
- {
- SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem);
- }
- }
-}
-
-//
-// Text search in rich text edit
-//
-void FindTextInListbox(HWND hwnd, FINDREPLACEW* lpfr)
-{
- HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd);
- if(hwndLB)
- {
- FINDTEXTW strFind;
- DWORD bgn,end;
- SendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end);
- if(lpfr->Flags & FR_DOWN)
- {
- strFind.chrg.cpMin=end;
- strFind.chrg.cpMax=-1;
- }
- else
- {
- strFind.chrg.cpMin=bgn;
- strFind.chrg.cpMax=0;
- }
- strFind.lpstrText=lpfr->lpstrFindWhat;
- int pos = (int)SendMessage(hwndLB,EM_FINDTEXTW,(WPARAM)(lpfr->Flags),(LPARAM)&strFind);
- if(pos >= 0)
- {
- //char sz[32];
- //sprintf_s(sz, _countof(sz), "%d:%d",strFind.chrg.cpMin,strFind.chrg.cpMax);
- //MessageBox(hwnd,sz,"Find",MB_OK);
- SendMessage(hwndLB,EM_SETSEL,(WPARAM)pos,(LPARAM)(pos+wcslen(lpfr->lpstrFindWhat)));
- }
- }
-}
-
-//
-// Disassembly window(s) WndProc
-//
-LRESULT CALLBACK DisassemblyWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-)
-{
- static HBRUSH hBrush=NULL;
- COLORREF crBackGr;
-
- static COLORREF crBackGrOld=NULL;
-
- if (crBackGrOld == NULL)
- crBackGrOld = GetSysColor(COLOR_INFOBK);
-
- if(uMsg== g_uFindReplaceMsg)
- {
- FINDREPLACEW* lpfr = (FINDREPLACEW*)lParam;
- if(!(lpfr->Flags & FR_DIALOGTERM))
- {
- FindTextInListbox(hwnd,lpfr);
- }
- }
- else
- switch (uMsg)
- {
- case WM_CREATE:
- hBrush = CreateSolidBrush(RGB(255,255,255));
- break;
-
- //===== Sent by Static (label) and Read-Only Edit field =====
- case WM_CTLCOLORSTATIC:
- case WM_CTLCOLOREDIT:
- if(hBrush) DeleteObject(hBrush);
- crBackGr = GetSysColor(COLOR_INFOBK);
- hBrush = CreateSolidBrush(crBackGr);
- SetBkColor((HDC) wParam, crBackGr);
- if(crBackGr != crBackGrOld)
- {
- g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT);
- crBackGrOld = crBackGr;
- }
- SetTextColor((HDC) wParam, g_strChFontDasm.rgbColors);
- return (LRESULT) hBrush;
-
- //====== Sent by active Edit field ============
- //case WM_CTLCOLOREDIT:
- // if(hBrush) DeleteObject(hBrush);
- // hBrush = CreateSolidBrush(RGB(255,255,255));
- // SetBkColor((HDC) wParam, RGB(255,255,255));
- // return (LRESULT) hBrush;
-
- // Ownerdraw stuff
- case WM_MEASUREITEM:
- {
- ((MEASUREITEMSTRUCT *) (lParam))->itemHeight = g_Height;
- break;
- }
-
- // Ownerdraw stuff
- case WM_DRAWITEM:
- {
- DRAWITEMSTRUCT *pDIS;
- WCHAR wzBuf[1024];
- int ItemID;
-
- pDIS = (DRAWITEMSTRUCT *) lParam;
- ItemID = (int) pDIS->itemID;
-
- if (ItemID < 0)
- {
- switch (pDIS->CtlType)
- {
- case ODT_LISTBOX:
- {
- if ((pDIS->itemAction) & (ODA_FOCUS))
- DrawFocusRect (PHDC, &PRC);
- break;
- }
-
- case ODT_COMBOBOX:
- {
- if ((pDIS->itemAction) & ODS_FOCUS)
- DrawFocusRect(PHDC, &PRC);
- break;
- }
- }
-
- return TRUE;
- }
-
- switch (pDIS->CtlType)
- {
- case ODT_LISTBOX:
- WszSendMessage(pDIS->hwndItem, LB_GETTEXT, pDIS->itemID, (LPARAM)wzBuf);
- break;
-
- case ODT_COMBOBOX:
- WszSendMessage(pDIS->hwndItem, CB_GETLBTEXT, pDIS->itemID, (LPARAM)wzBuf);
- break;
- }
-
- int crBack,crText;
- HBRUSH hbrBack;
-
- if ((pDIS->itemState) & (ODS_SELECTED))
- {
- crBack = GetSysColor(COLOR_HIGHLIGHT);
- crText = GetSysColor(COLOR_HIGHLIGHTTEXT);
- }
- else
- {
- crBack = GetSysColor(COLOR_WINDOW);
- crText = GetSysColor(COLOR_WINDOWTEXT);
- }
-
- hbrBack = CreateSolidBrush(crBack);
- FillRect(PHDC, &PRC, hbrBack);
- DeleteObject(hbrBack);
-
- // 0x00bbggrr
- SetBkColor(PHDC, crBack);
-
- // Instruction counter
- if (wcslen(wzBuf) >= PADDING && isdigit(*wzBuf))
- {
- SetTextColor(PHDC, 0x00FF0000);
- TextOutW(PHDC, PRC.left, PRC.top, wzBuf, 5);
-
- SetTextColor(PHDC, 0x00005500);
- TextOutW(PHDC, PRC.left + (5*g_MaxCharWidth), PRC.top, &wzBuf[5], PADDING-5);
-
- SetTextColor(PHDC, crText);
- TextOutW(PHDC, PRC.left + (PADDING*g_MaxCharWidth), PRC.top, &wzBuf[PADDING], (UINT32)wcslen(&wzBuf[PADDING]));
- }
- else
- TextOutW(PHDC, PRC.left, PRC.top, wzBuf, (UINT32)wcslen(wzBuf));
-
- if ((pDIS->itemState) & (ODS_FOCUS))
- DrawFocusRect(PHDC, &PRC);
-
- break;
- }
-
-
- case WM_COMMAND:
- {
- if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only
- switch (LOWORD(wParam))
- {
- case IDM_FIND:
- {
- HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd);
- if(hwndLB)
- {
- FINDREPLACEW *pFR = &(FindDisasmBoxByHwnd(hwnd)->strFR);
- if(pFR && (pFR->Flags&FR_DIALOGTERM)) // i.e., if the box isn't up
- {
- DWORD bgn,end;
- WszSendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end);
- if(end > bgn)
- {
- if(end - bgn > 119)
- SendMessage(hwndLB,EM_SETSEL,(WPARAM)bgn,(LPARAM)(bgn+119));
- SendMessage(hwndLB,EM_GETSELTEXT,0,(LPARAM)(pFR->lpstrFindWhat));
- }
- pFR->Flags &= ~FR_DIALOGTERM;
- g_hFindText = FindTextW(pFR);
- }
- }
- }
- break;
- case IDM_FINDNEXT:
- {
- FindTextInListbox(hwnd,&(FindDisasmBoxByHwnd(hwnd)->strFR));
- }
- break;
- }
- break;
- }
-
- case WM_SETFOCUS:
- SetFocus(FindAssociatedDisassemblyListBox(hwnd));
- break;
-
- case WM_SIZE:
- {
- DWORD cxClient = LOWORD(lParam);
- DWORD cyClient = HIWORD(lParam);
- HWND hListView;
-
- // We have to size the listview also
-
- // Will be NULL if we are ourselves a listview
- hListView = FindAssociatedDisassemblyListBox(hwnd);
-
- if (hListView != NULL)
- {
- // Resize listview window
- MoveWindow(
- hListView,
- 0,
- 0,
- cxClient,
- cyClient,
- TRUE // repaint
- );
- }
-
- break;
- }
-
- case WM_CLOSE:
- if(hBrush) DeleteObject(hBrush);
- if(LOWORD(wParam)==0) RemoveDisasmBox(hwnd);
- DestroyWindow(hwnd); // Generates the WM_DESTROY message
-
- // Shutdown everything if we're just viewing GUI IL and close all our boxes
- if (IsGuiILOnly() && (g_NumDisasmBoxes == 0)) {
- PostQuitMessage(0);
- }
-
- break;
-
- default :
- return WszDefWindowProc(hwnd, uMsg, wParam, lParam);
- }
-
- return 0;
-}
-
-BOOL CALLBACK AboutBoxProc(HWND hwndDlg, // handle to dialog box
- UINT uMsg, // message
- WPARAM wParam, // first message parameter
- LPARAM lParam) // second message parameter
-{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- {
- WCHAR str[1024];
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE1,WM_SETTEXT,0,
- (LPARAM)RstrW(IDS_ILDASM_TITLE));
- swprintf_s(str,1024,RstrW(IDS_VERSION), VER_FILEVERSION_STR_L); str[1023]=0;
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE2,WM_SETTEXT,0,(LPARAM)str);
- WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE3,WM_SETTEXT,0,
- (LPARAM)RstrW(IDS_LEGALCOPYRIGHT));
- }
- return TRUE;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case ID_ABOUT_OK:
- EndDialog(hwndDlg,0);
- return TRUE;
- }
- break;
-
- }
- return FALSE;
-}
-
-BOOL CALLBACK DumpOptionsProc(HWND hwndDlg, // handle to dialog box
- UINT uMsg, // message
- WPARAM wParam, // first message parameter
- LPARAM lParam) // second message parameter
-{
- static BOOL fAsmChecked;
- static BOOL fMetaChecked;
- static ULONG uCodePage = 0;
-
- if (uCodePage == 0)
- uCodePage = g_uCodePage;
-
- switch(uMsg)
- {
- case WM_INITDIALOG:
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO1,BM_SETCHECK,(uCodePage==g_uConsoleCP ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO2,BM_SETCHECK,(uCodePage==CP_UTF8 ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_RADIO3,BM_SETCHECK,(uCodePage==0xFFFFFFFF ? BST_CHECKED : BST_UNCHECKED),0);
-
-
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK18,BM_SETCHECK,(g_fShowProgressBar ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_SETCHECK,(g_fDumpHeader ? BST_CHECKED : BST_UNCHECKED),0);
- if(g_fTDC)
- {
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_SETCHECK,(g_fDumpStats ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_SETCHECK,(g_fDumpClassList ? BST_CHECKED : BST_UNCHECKED),0);
- }
- else
- {
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK2), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK19), SW_HIDE);
- }
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_SETCHECK,(g_fDumpAsmCode ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_SETCHECK,(g_fDumpTokens ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_SETCHECK,(g_fShowBytes ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_SETCHECK,(g_fShowSource ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_SETCHECK,(g_fInsertSourceLines ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_SETCHECK,(g_fTryInCode ? BST_CHECKED : BST_UNCHECKED),0);
- if(!(fAsmChecked = g_fDumpAsmCode))
- {
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), FALSE);
- }
- if(g_fTDC)
- {
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_SETCHECK,(g_fDumpMetaInfo ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK10,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpHeader ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK11,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK12,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpCSV ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK13,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK16,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpValidate ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK14,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpSchema ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK15,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRaw ? BST_CHECKED : BST_UNCHECKED),0);
- WszSendDlgItemMessage(hwndDlg,IDC_CHECK17,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? BST_CHECKED : BST_UNCHECKED),0);
- if(!(fMetaChecked = g_fDumpMetaInfo))
- {
- //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), FALSE);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), FALSE);
- }
- }
- else
- {
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK8), SW_HIDE);
- //ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK10), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK11), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK12), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK13), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK14), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK15), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK16), SW_HIDE);
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK17), SW_HIDE);
- }
- ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE);
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CHECK3:
- fAsmChecked = !fAsmChecked;
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), fAsmChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), fAsmChecked);
- return TRUE;
-
- case IDC_CHECK8:
- fMetaChecked = !fMetaChecked;
- //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), fMetaChecked);
- EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), fMetaChecked);
- return TRUE;
-
- case IDOK:
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO1, BM_GETCHECK,0,0)) g_uCodePage = g_uConsoleCP;
- else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO2, BM_GETCHECK,0,0)) g_uCodePage = CP_UTF8;
- else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO3, BM_GETCHECK,0,0)) g_uCodePage = 0xFFFFFFFF;
- uCodePage = g_uCodePage;
-
- g_fShowProgressBar = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK18, BM_GETCHECK,0,0));
- g_fDumpHeader = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_GETCHECK,0,0));
- if(g_fTDC)
- {
- g_fDumpStats = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_GETCHECK,0,0));
- g_fDumpClassList = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_GETCHECK,0,0));
- }
- g_fDumpAsmCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_GETCHECK,0,0));
- g_fDumpTokens = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_GETCHECK,0,0));
- g_fShowBytes = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_GETCHECK,0,0));
- g_fShowSource = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_GETCHECK,0,0));
- g_fInsertSourceLines = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_GETCHECK,0,0));
- g_fTryInCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_GETCHECK,0,0));
- if(g_fTDC)
- {
- g_fDumpMetaInfo = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_GETCHECK,0,0));
- g_ulMetaInfoFilter = 0;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK10, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK11, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK12, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK13, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK16, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK14, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK15, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK17, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- }
- EndDialog(hwndDlg,1);
- return TRUE;
-
- case IDCANCEL:
- EndDialog(hwndDlg,0);
- return TRUE;
- }
- break;
-
- }
- return FALSE;
-}
-
-static HWND help_hw;
-void * __cdecl HelpFileLoader(_In_z_ LPCWSTR lpHelpFileName)
-{
- return HtmlHelpW(help_hw, lpHelpFileName, HH_DISPLAY_TOPIC, NULL);
-}
-
-//
-// Main window WndProc
-//
-#define CHECK_UNCHECK(x) { x=!x; CheckMenuItem(g_hMenu, LOWORD(wParam), (x ? MF_CHECKED : MF_UNCHECKED)); }
-
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
-#endif
-LRESULT CALLBACK MainWndProc(
- HWND hwnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam
-)
-{
- HWND hwndDasm;
- static HCURSOR hWaitCursor = NULL;
-
- if (hWaitCursor == NULL)
- hWaitCursor = WszLoadCursor(NULL,IDC_WAIT);
-
- switch (uMsg)
- {
- case WM_DROPFILES:
- {
- WCHAR wzFileName[MAX_FILENAME_LENGTH];
- DragQueryFileW((HDROP)wParam,0,wzFileName,MAX_FILENAME_LENGTH-1);
- memset(g_szInputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzFileName,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- GetInputFileFullPath();
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- GUICleanupClassItems();
- TreeView_DeleteAllItems(g_hwndTreeView);
- Cleanup();
- GUISetModule(g_szInputFile);
- DumpFile();
- SetCursor(hWasCursor);
- }
- DragFinish((HDROP)wParam);
- }
- break;
-
- case WM_COMMAND:
- {
- if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only
- switch (LOWORD(wParam))
- {
- case IDM_OPEN:
- {
- WCHAR wzInputFile[MAX_FILENAME_LENGTH];
- memset(wzInputFile,0,sizeof(wzInputFile));
- if(strlen(g_szInputFile))
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzInputFile,MAX_FILENAME_LENGTH-1);
- }
- {
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_IN); //L"PE file (*.exe,*.dll,*.mod,*.mdl,*.winmd)\0*.exe;*.dll;*.mod;*.mdl;*.winmd\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"exe";
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzInputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_FILEMUSTEXIST;
- ofn.lpstrDefExt = wzDefltExt;
- if(GetOpenFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- GUICleanupClassItems();
- TreeView_DeleteAllItems(g_hwndTreeView);
- Cleanup();
- memset(g_szInputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzInputFile,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- GetInputFileFullPath();
- GUISetModule(g_szInputFile);
- DumpFile();
- SetCursor(hWasCursor);
- }
- }
- break;
- }
- case IDM_ABOUT:
- {
- _ASSERTE(g_hResources != NULL);
- WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)AboutBoxProc,0L);
- break;
- }
- case IDM_DUMP:
- //case IDM_DUMP_TREE:
- if(g_pImport)
- {
- unsigned uWasCodePage = g_uCodePage;
- WCHAR wzOutputFile[MAX_FILENAME_LENGTH];
- memset(wzOutputFile,0,sizeof(wzOutputFile));
- if(strlen(g_szOutputFile))
- {
- WszMultiByteToWideChar(CP_UTF8,0,g_szOutputFile,-1,wzOutputFile,MAX_FILENAME_LENGTH-1);
- }
- {
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_OUT);//L"IL file (*.il)\0*.il\0Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"il";
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzOutputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_OVERWRITEPROMPT;
- ofn.lpstrDefExt = wzDefltExt;
- _ASSERTE(g_hResources != NULL);
- if(WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DumpOptionsProc,0L) &&
- GetSaveFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- g_Mode &= ~MODE_GUI;
- memset(g_szOutputFile,0,MAX_FILENAME_LENGTH);
- WszWideCharToMultiByte(CP_UTF8,0,wzOutputFile,-1,g_szOutputFile,MAX_FILENAME_LENGTH-1,NULL,NULL);
- g_pFile = OpenOutput(wzOutputFile);
- if(g_pFile)
- {
- DumpFile(); // closes g_pFile upon completion
- SetCursor(hWasCursor);
- }
- else
- {
- SetCursor(hWasCursor);
- WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle());
- }
- g_szOutputFile[0] = 0;
- g_Mode |= MODE_GUI;
- //g_fShowSource = FALSE; // flag could have been changed for dump
- }
- }
- g_uCodePage = uWasCodePage; // g_uCodePage is changed in DumpOptionsProc
- }
- break;
-
- case IDM_DUMP_TREE:
- if(g_pImport)
- {
- // Dump the tree view(fully expanded, with current sorting) to a text file
- OPENFILENAMEW ofn;
- WCHAR* wzFilter = RstrW(IDS_FILTER_OUT2); //L"Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0";
- const WCHAR* wzDefltExt = L"txt";
- WCHAR szIndent[MAX_FILENAME_LENGTH];
- FILE* pFile;
- WCHAR wzOutputFile[MAX_FILENAME_LENGTH];
- for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0;
- memset(wzOutputFile,0,sizeof(wzOutputFile));
- memset(&ofn,0,sizeof(OPENFILENAMEW));
- ofn.lStructSize = sizeof(OPENFILENAMEW);
- ofn.hwndOwner = hwnd;
- ofn.lpstrFilter = wzFilter;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = wzOutputFile;
- ofn.nMaxFile = MAX_FILENAME_LENGTH-1;
- ofn.Flags = OFN_OVERWRITEPROMPT;
- ofn.lpstrDefExt = wzDefltExt;
- if(GetSaveFileName(&ofn))
- {
- HCURSOR hWasCursor = SetCursor(hWaitCursor);
- pFile = g_pFile;
- g_pFile = OpenOutput(wzOutputFile);
- szIndent[0] = 0;
- if(g_pFile)
- {
- g_Mode &= ~MODE_GUI;
- DumpTreeItem(g_hRoot,g_pFile,szIndent);
- g_Mode |= MODE_GUI;
- fclose(g_pFile);
- SetCursor(hWasCursor);
- }
- else
- {
- SetCursor(hWasCursor);
- WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle());
- }
- g_pFile = pFile;
- }
- }
- break;
-
- case IDM_EXIT:
- {
- WszSendMessage(GetActiveWindow(),WM_CLOSE,0,0);
- }
- break;
-
- case IDM_FONT_TREE:
- {
- g_strChFontTree.hwndOwner = g_hwndMain;
- if(ChooseFont(&g_strChFontTree))
- {
- DeleteObject((HGDIOBJ)g_hSmallFont);
- g_hSmallFont = CreateFontIndirect(&g_strLogFontTree);
- WszSendMessage(g_hwndTreeView,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE);
- if(g_hwndAsmInfo)
- WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE);
- SaveGUIFonts(&guiInfo);
- }
- break;
- }
-
- case IDM_FONT_DASM:
- {
- g_strChFontDasm.hwndOwner = g_hwndMain;
- if(ChooseFont(&g_strChFontDasm))
- {
- if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; }
- DeleteObject((HGDIOBJ)g_hFixedFont);
- g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm);
-
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- WszSendMessage((*g_DisasmBox)[i].hwndChild,WM_SETFONT,(LPARAM)g_hFixedFont,TRUE);
- if(g_fDumpRTF)
- GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild,
- (*g_DisasmBox)[i].tkClass,(*g_DisasmBox)[i].tkMember);
- }
- SaveGUIFonts(&guiInfo);
- }
- break;
- }
-
- case IDM_CAVERBAL:
- {
- CHECK_UNCHECK(g_fCAVerbal);
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild,
- (*g_DisasmBox)[i].tkClass,
- (*g_DisasmBox)[i].tkMember);
- }
- break;
- }
-
- case IDM_DUMPRTF:
- {
- CHECK_UNCHECK(g_fDumpRTF);
- //GUIDumpAssemblyInfo();
- for (DWORD i = 0; i < g_NumDisasmBoxes; i++)
- {
- mdToken tkClass = (*g_DisasmBox)[i].tkClass;
- mdToken tkMember = (*g_DisasmBox)[i].tkMember;
- if((TypeFromToken(tkMember)==0)&&(tkClass==IDM_SHOW_METAINFO))
- continue;
- GUIDisassemble(tkClass,tkMember,"UpdateThisDisassemblyBox");
- }
- break;
- }
-
- case IDM_SORT_BY_NAME:
- {
- CHECK_UNCHECK(g_fSortByName);
- if(g_pImport)
- {
- if(!RefreshList()) goto CloseAndDestroy;
- }
- break;
- }
-
- case IDM_TREEVIEWFCN:
- {
- CHECK_UNCHECK(g_fTreeViewFCN);
- if(g_pImport)
- {
- if(!RefreshList()) goto CloseAndDestroy;
- }
- break;
- }
-
- case IDM_SHOW_PUB:
- {
- CHECK_UNCHECK(g_fHidePub);
-UpdateVisibilityOptions:
- g_fLimitedVisibility = g_fHidePub ||
- g_fHidePriv ||
- g_fHideFam ||
- g_fHideFAA ||
- g_fHideFOA ||
- g_fHidePrivScope ||
- g_fHideAsm;
- if(g_pImport)
- {
- if(!RefreshList()) DestroyWindow(hwnd);
- }
- break;
- }
- case IDM_SHOW_PRIV:
- {
- CHECK_UNCHECK(g_fHidePriv);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FAM:
- {
- CHECK_UNCHECK(g_fHideFam);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_ASM:
- {
- CHECK_UNCHECK(g_fHideAsm);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FAA:
- {
- CHECK_UNCHECK(g_fHideFAA);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_FOA:
- {
- CHECK_UNCHECK(g_fHideFOA);
- goto UpdateVisibilityOptions;
- }
- case IDM_SHOW_PSCOPE:
- {
- CHECK_UNCHECK(g_fHidePrivScope);
- goto UpdateVisibilityOptions;
- }
- case IDM_FULL_INFO:
- {
- CHECK_UNCHECK(g_fFullMemberInfo);
- if(g_pImport)
- {
- if(!RefreshList()) DestroyWindow(hwnd);
- }
- break;
- }
- case IDM_BYTES:
- {
- CHECK_UNCHECK(g_fShowBytes);
- break;
- }
- case IDM_TOKENS:
- {
- CHECK_UNCHECK(g_fDumpTokens);
- break;
- }
- case IDM_SOURCELINES:
- {
- CHECK_UNCHECK(g_fShowSource);
- break;
- }
- case IDM_EXPANDTRY:
- {
- CHECK_UNCHECK(g_fTryInCode);
- break;
- }
- case IDM_QUOTEALLNAMES:
- {
- CHECK_UNCHECK(g_fQuoteAllNames);
- break;
- }
- case IDM_SHOW_HEADER:
- {
- GUIDisassemble(IDM_SHOW_HEADER,0,"Headers");
- break;
- }
- case IDM_SHOW_STAT:
- {
- GUIDisassemble(IDM_SHOW_STAT,0,"Statistics");
- break;
- }
- case IDM_HELP:
- {
- help_hw = hwnd;
- FindLocalizedFile(L"ildasm.chm", &HelpFileLoader);
- break;
- }
- case IDM_SHOW_METAINFO:
- {
- if(g_pImport)
- GUIDisassemble(IDM_SHOW_METAINFO,0,"MetaInfo");
- break;
- }
- case IDM_MI_HEADER:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpHeader) g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- else g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpHeader)
- {
- // HeaderOnly specified,
- // Suppress Counts,Sizes, Header,Schema and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_HEX:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpMoreHex) g_ulMetaInfoFilter &= ~MDInfo::dumpMoreHex;
- else g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_CSV:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpCSV) g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- else g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpCSV)
- {
- // Counts,Sizes specified,
- // Suppress HeaderOnly, Header,Schema and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_UNREX:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpUnsat) g_ulMetaInfoFilter &= ~MDInfo::dumpUnsat;
- else g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_SCHEMA:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpSchema) g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- else g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpSchema)
- {
- // Header,Schema specified,
- // suppress Counts,Sizes, HeaderOnly and Header,Schema,Rows
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_RAW:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpRaw) g_ulMetaInfoFilter &= ~MDInfo::dumpRaw;
- else g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED));
- if(g_ulMetaInfoFilter & MDInfo::dumpRaw)
- {
- // Header,Schema,Rows specified,
- // suppress Counts,Sizes, HeaderOnly and Header,Schema
- g_ulMetaInfoFilter &= ~MDInfo::dumpCSV;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpHeader;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED);
- g_ulMetaInfoFilter &= ~MDInfo::dumpSchema;
- CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED);
- }
- return 1; //break;
- }
- case IDM_MI_HEAPS:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps) g_ulMetaInfoFilter &= ~MDInfo::dumpRawHeaps;
- else g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
- case IDM_MI_VALIDATE:
- {
- WORD iSelection = LOWORD(wParam);
- if(g_ulMetaInfoFilter & MDInfo::dumpValidate) g_ulMetaInfoFilter &= ~MDInfo::dumpValidate;
- else g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED));
- return 1; //break;
- }
-
- }
-
- break;
- }
-
- case WM_SETFOCUS:
- SetFocus(g_hwndTreeView);
- break;
-
- case WM_SIZE:
- {
- DWORD cxClient = LOWORD(lParam);
- DWORD cyClient = HIWORD(lParam);
- DWORD dy;
-
- dy = cyClient >> 3;
- if(dy < 50) dy = 50;
- if(cyClient < dy+4) cyClient = dy+4;
-
- // Resize listview window
- MoveWindow(
- g_hwndTreeView,
- 0,
- 0,
- cxClient,
- cyClient-dy-2,
- TRUE // repaint
- );
- // Resize AsmInfo window
- MoveWindow(
- g_hwndAsmInfo,
- 0,
- cyClient-dy-1,
- cxClient,
- dy,
- TRUE // repaint
- );
-
- break;
- }
-
- case WM_NOTIFY:
- {
- if (wParam == ID_TREEVIEW)
- {
- NMHDR * pNMHDR = (NMHDR*) lParam;
- switch (pNMHDR->code)
- {
- case TVN_KEYDOWN:
- {
- NMTVKEYDOWN *pKeyDown = (NMTVKEYDOWN *) pNMHDR;
-
- if (pKeyDown->wVKey == '\r')
- {
- if(DoubleClickSelectedMember(g_CurSelItem) == NULL)
- TreeView_Expand(g_hwndTreeView,g_CurSelItem,TVE_TOGGLE);
- }
- break;
- }
-
- case NM_DBLCLK:
- {
- hwndDasm = DoubleClickSelectedMember(g_CurSelItem);
- if(hwndDasm)
- {
- PostMessageA(hwndDasm,WM_ACTIVATE,WA_CLICKACTIVE,0);
- PostMessageA(hwndDasm,WM_SETFOCUS,0,0);
- }
- break;
- }
-
- case TVN_SELCHANGEDW:
- case TVN_SELCHANGEDA:
- {
- NMTREEVIEW *pTV = (NMTREEVIEW *) pNMHDR;
- /*
- TVITEM SelItem;
- char szText[256];
-
- memset(&SelItem, 0, sizeof(SelItem));
- SelItem.mask = TVIF_TEXT;
- SelItem.pszText = szText;
- SelItem.cchTextMax = sizeof(szText)-1;
- SelItem.hItem = pTV->itemNew.hItem;
-
- g_CurSelItem = SelItem.hItem;
- SendMessageA(g_hwndTreeView, TVM_GETITEM, 0, (LPARAM)&SelItem);
- */
- g_CurSelItem = pTV->itemNew.hItem;
- break;
- }
- }
- }
-
- break;
- }
-
- case WM_CLOSE:
- CloseAndDestroy:
- // HTML help window is closed automatically
- {
- RECT r;
- ShowWindow(hwnd,SW_RESTORE);
- GetWindowRect(hwnd,(LPRECT)&r);
- guiInfo.x = r.left;
- guiInfo.y = r.top;
- guiInfo.w = r.right - r.left;
- guiInfo.h = r.bottom - r.top;
- SaveGUIFonts(&guiInfo);
- }
- DestroyWindow(hwnd); // Generates the WM_DESTROY message
- break;
-
- case WM_DESTROY :
- PostQuitMessage(0); // Puts a WM_QUIT in the queue
- break;
-
- default :
- return DefWindowProcW(hwnd, uMsg, wParam, lParam);
- }
-
- return 0;
-}
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-
-
-//
-// Create the treeview in the main window
-//
-HWND CreateTreeView(HWND hwndParent)
-{
- HWND hwndTree;
- RECT rcl;
- DWORD tvs =
- TVS_HASLINES
- |TVS_HASBUTTONS
- |TVS_LINESATROOT
- |TVS_SHOWSELALWAYS
- // |TVS_TRACKSELECT
- // |TVS_SINGLEEXPAND
- |TVS_DISABLEDRAGDROP
- ;
- unsigned cy,dy;
-
- GetClientRect(hwndParent, &rcl);
- cy = rcl.bottom - rcl.top;
- dy = cy >> 3;
- hwndTree = WszCreateWindowEx(
- 0,
- WC_TREEVIEWW,
- NULL,
- WS_VISIBLE|WS_CHILD|WS_BORDER|tvs,
- 0,
- 0,
- rcl.right - rcl.left,
- cy-dy-2, //rcl.bottom - rcl.top,
- hwndParent,
- (HMENU) ID_TREEVIEW,
- g_hInstance,
- NULL
- );
- g_hwndAsmInfo = NULL;
- if (hwndTree == NULL)
- return NULL;
-
- WszSendMessage(hwndTree,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE);
-
- TreeView_SetBkColor(hwndTree,-1);
- TreeView_SetImageList(hwndTree, g_hImageList, TVSIL_NORMAL);
-
- g_hwndAsmInfo = WszCreateWindowEx(
- 0, //WS_EX_TOOLWINDOW,
- g_fDumpRTF ? L"RichEdit20A" : L"EDIT",
- NULL,
- WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE | WS_BORDER //| WS_CAPTION | WS_OVERLAPPEDWINDOW
- | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL,
- 0,
- cy-dy-1,
- rcl.right - rcl.left,
- dy,
- hwndParent,
- (HMENU) ID_LISTBOX,
- g_hInstance, // hinst
- NULL
- );
- if(g_hwndAsmInfo)
- {
- WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE);
- }
-
- return hwndTree;
-}
-
-
-//
-// Add one item to a treeview
-//
-HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded)
-{
- HTREEITEM hItem;
- WCHAR* wz = UtfToUnicode(pszText);
- ULONG lLen = (ULONG)wcslen(wz);
- TVINSERTSTRUCTW tvIns;
- memset(&tvIns, 0, sizeof(tvIns));
-
- tvIns.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM;
- tvIns.item.pszText = wz;
- tvIns.item.cchTextMax = lLen;
- tvIns.item.iImage = iImage;
- tvIns.item.iSelectedImage = iImage;
-
- tvIns.hInsertAfter = hInsAfter;
- tvIns.hParent = hParent;
-
- hItem = (HTREEITEM)WszSendMessage(hwndTree, TVM_INSERTITEMW, 0, (LPARAM)(&tvIns));
-
- return hItem;
-}
-
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:22018) // Suppress PREFast warning about Integer overflow/underflow
-#endif
-//ulen cannot be greater than GlobalBufferLen by the definition of ulen. Therefore it's safe to disable this warning here.
-void AddMethodToGUI(
- mdTypeDef cl,
- ClassItem_t * pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszMethodName,
- PCCOR_SIGNATURE pComSig,
- unsigned cComSig,
- mdMethodDef mbMethod,
- DWORD dwAttrs
-)
-{
- HTREEITEM hParent;
- char* szName;
- ULONG ulLen,ulImageIndex;
- BOOL wasDumpRTF;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- sprintf_s(GlobalBuffer, GlobalBufferLen,g_fFullMemberInfo ? "method %s : ": "%s : ",pszMethodName);
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- ulLen = InGlobalBuffer;
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- mdToken tkVarOwner = g_tkVarOwner;
- g_tkVarOwner = cl;
- DumpMethod(mbMethod, pszClassName,VAL32(g_CORHeader->EntryPointToken),(void *)g_hwndTreeView,FALSE);
- g_tkVarOwner = tkVarOwner;
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- szName = &GlobalBuffer[ulLen];
-
- if(strstr(szName,"instance ") == szName) strcpy_s(szName,GlobalBufferLen-ulLen,szName+9);
-
- szName = GlobalBuffer;
-
- hParent = pClassItem->hItem;
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- if((strchr(szName, '<'))&&(strchr(szName, '>')))
- {
- ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_GEN_IMAGE_INDEX : METHOD_GEN_IMAGE_INDEX;
- }
- else
- {
- ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_IMAGE_INDEX : METHOD_IMAGE_INDEX;
- }
-
- pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem(
- hParent, szName, TVI_LAST, ulImageIndex, g_hwndTreeView, FALSE
- );
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbMethod;
- pClassItem->CurMember++;
-}
-
-#ifdef _PREFAST_
-#pragma warning(pop)
-#endif
-BOOL NamespaceMatch(const char *pszNamespace, __in __nullterminated char *pszString)
-{
- if (strncmp(pszNamespace, pszString, strlen(pszNamespace)) == 0)
- {
- if (pszString[ strlen(pszNamespace) ] == NAMESPACE_SEPARATOR_CHAR)
- return TRUE;
- }
-
- return FALSE;
-}
-
-void AddFieldToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- const char *pszFieldName,
- const char *pszSignature,
- mdFieldDef mbField,
- DWORD dwAttrs
-)
-{
- DWORD Dimensions;
- ULONG ul1,ul2;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- sprintf_s(GlobalBuffer,GlobalBufferLen,g_fFullMemberInfo ? "field %s : " : "%s : ",pszFieldName);
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- GetClassLayout(cl,&ul1,&ul2);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpField(mbField, pszClassName,(void *)g_hwndTreeView,FALSE);
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
- char* pch = strchr(GlobalBuffer,'\r');
- if(pch) strcpy_s(pch,5," ...");
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbField;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- (dwAttrs & mdStatic) ? STATIC_FIELD_IMAGE_INDEX : FIELD_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-void AddEventToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdEvent mbEvent
-)
-{
- DWORD Dimensions;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"event ");
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpEvent(mbEvent, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbEvent;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- EVENT_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-void AddPropToGUI(
- mdTypeDef cl,
- ClassItem_t *pClassItem,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD dwClassAttrs,
- mdProperty mbProp
-)
-{
- DWORD Dimensions;
- BOOL wasDumpRTF;
- HTREEITEM hParent = pClassItem->hItem;
-
- Dimensions = 0;
-
- memset(GlobalBuffer,0,GlobalBufferLen);
- if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"prop ");
- InGlobalBuffer = (UINT32)strlen(GlobalBuffer);
- wasDumpRTF = g_fDumpRTF;
- g_fDumpRTF = FALSE;
- DumpProp(mbProp, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body
- g_fDumpRTF = wasDumpRTF;
- GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n
-
- _ASSERTE(pClassItem->CurMember < pClassItem->SubItems);
-
- pClassItem->pMembers[pClassItem->CurMember].mbMember = mbProp;
- pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER;
- pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem(
- hParent,
- GlobalBuffer, //szType,
- TVI_LAST,
- PROP_IMAGE_INDEX,
- g_hwndTreeView,
- FALSE
- );
-}
-
-
-
-HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace)
-{
- DWORD i;
- HTREEITEM hRoot;
- DWORD l = 0,ll;
-
- if (!pszNamespace || !*pszNamespace)
- return g_hRoot; // not in a namespace, use tree root
-
- hRoot = g_hRoot;
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace))
- return (*g_NamespaceList)[i].hRoot;
- }
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if(strstr(pszNamespace,(*g_NamespaceList)[i].pszNamespace) == pszNamespace)
- {
- ll = (DWORD)strlen((*g_NamespaceList)[i].pszNamespace);
- if((ll > l)&&(pszNamespace[ll] == '.'))
- {
- hRoot = (*g_NamespaceList)[i].hRoot;
- l = ll;
- }
- }
- }
-
- hRoot = AddOneItem(hRoot, pszNamespace, TVI_LAST, NAMESPACE_IMAGE_INDEX, g_hwndTreeView, TRUE);
- (*g_NamespaceList)[g_NumNamespaces].pszNamespace = pszNamespace;
- (*g_NamespaceList)[g_NumNamespaces].hRoot = hRoot;
- g_NumNamespaces++;
-
- return hRoot;
-}
-
-
-Namespace_t *FindNamespace(const char *pszNamespace)
-{
- DWORD i;
-
- for (i = 0; i < g_NumNamespaces; i++)
- {
- if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace))
- return &(*g_NamespaceList)[i];
- }
-
- return NULL;
-}
-
-
-void GUICleanupClassItems()
-{
- DWORD i;
- WCHAR* sz=L"\0\0";
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if((*g_ClassItemList)[i].pMembers)
- {
- delete[] (*g_ClassItemList)[i].pMembers;
- (*g_ClassItemList)[i].pMembers = NULL;
- }
- }
- for (i = 0; i < g_NumDisasmBoxes; i++)
- {
- PostMessageA((*g_DisasmBox)[i].hwndContainer,WM_CLOSE,0,0);
- }
- WszSendMessage(g_hwndAsmInfo,WM_SETTEXT,0,(LPARAM)sz);
- EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_GRAYED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_GRAYED);
- EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_GRAYED);
-}
-
-//
-// Add a new class tree node
-//
-ClassItem_t *AddClassToGUI(
- mdTypeDef cl,
- UINT uImageIndex,
- const char *pszNamespace,
- const char *pszClassName,
- DWORD cSubItems,
- HTREEITEM *phRoot // Returns the namespace root (NOT the class root)
-)
-{
- HTREEITEM hRoot;
-
- if(*phRoot)
- hRoot = *phRoot;
- else
- {
- hRoot = FindCreateNamespaceRoot(pszNamespace);
- _ASSERTE(hRoot != NULL);
-
- *phRoot = hRoot;
- }
-
- (*g_ClassItemList)[g_NumClassItems].hItem = AddOneItem(hRoot, pszClassName, TVI_LAST, uImageIndex, g_hwndTreeView, FALSE);
- (*g_ClassItemList)[g_NumClassItems].cl = cl;
- (*g_ClassItemList)[g_NumClassItems].SubItems = cSubItems;
- (*g_ClassItemList)[g_NumClassItems].CurMember = 0;
-
- (*g_ClassItemList)[g_NumClassItems].pMembers = new (nothrow) TreeItem_t[cSubItems];
-
- g_NumClassItems++;
-
- return &(*g_ClassItemList)[g_NumClassItems-1];
-}
-
-
-void AddGlobalFunctions()
-{
- HRESULT hr = S_OK;
- HENUMInternal hEnumMethod;
- mdToken FuncToken;
- DWORD i;
- HTREEITEM hNamespaceRoot = NULL;
- DWORD NumGlobals;
-
- ClassItem_t* pClassItem = &(*g_ClassItemList)[0];
-
- if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod)))
- {
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- MemberInfo* fields = new (nothrow) MemberInfo[NumGlobals];
- MemberInfo* curField = fields;
-
- for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
- {
- curField->token = FuncToken;
- if (FAILED(g_pImport->GetFieldDefProps(FuncToken, &curField->dwAttrs)) ||
- FAILED(g_pImport->GetNameOfFieldDef(FuncToken, &curField->pszMemberName)))
- {
- curField->pszMemberName = "Invalid FieldDef record";
- }
- MAKE_NAME_IF_NONE(curField->pszMemberName,FuncToken);
- //curField->pComSig = g_pImport->GetSigOfFieldDef(FuncToken, &curMethod->cComSig);
- curField++;
- }
- g_pImport->EnumClose(&hEnumMethod);
-
- _ASSERTE(curField - fields == (int) NumGlobals);
-
- if(g_fSortByName) qsort(fields, NumGlobals, sizeof MemberInfo, memberCmp);
-
- for(curField = fields; curField < &fields[NumGlobals];curField++)
- {
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && IsFdPublic(curField->dwAttrs)) continue;
- if(g_fHidePriv && IsFdPrivate(curField->dwAttrs)) continue;
- if(g_fHideFam && IsFdFamily(curField->dwAttrs)) continue;
- if(g_fHideAsm && IsFdAssembly(curField->dwAttrs)) continue;
- if(g_fHideFOA && IsFdFamORAssem(curField->dwAttrs)) continue;
- if(g_fHideFAA && IsFdFamANDAssem(curField->dwAttrs)) continue;
- if(g_fHidePrivScope && IsFdPrivateScope(curField->dwAttrs)) continue;
- }
- AddFieldToGUI(NULL, pClassItem, NULL, "Global Fields", curField->pszMemberName, NULL, curField->token, curField->dwAttrs);
- }
- delete[] fields;
- }
- if (FAILED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod)))
- return;
-
- NumGlobals = g_pImport->EnumGetCount(&hEnumMethod);
- MemberInfo* methods = new (nothrow) MemberInfo[NumGlobals];
- MemberInfo* curMethod = methods;
-
- for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++)
- {
- curMethod->token = FuncToken;
- if (FAILED(g_pImport->GetMethodDefProps(FuncToken, &curMethod->dwAttrs)) ||
- FAILED(g_pImport->GetNameOfMethodDef(FuncToken, &curMethod->pszMemberName)))
- {
- curMethod->pszMemberName = "Invalid MethodDef record";
- }
- MAKE_NAME_IF_NONE(curMethod->pszMemberName,FuncToken);
- if (FAILED(g_pImport->GetSigOfMethodDef(FuncToken, &curMethod->cComSig, &curMethod->pComSig)))
- {
- curMethod->pszMemberName = "Invalid MethodDef record";
- curMethod->cComSig = 0;
- curMethod->pComSig = NULL;
- }
- curMethod++;
- }
- g_pImport->EnumClose(&hEnumMethod);
-
- _ASSERTE(curMethod - methods == (int) NumGlobals);
-
- if(g_fSortByName) qsort(methods, NumGlobals, sizeof MemberInfo, memberCmp);
-
- for(curMethod = methods; curMethod < &methods[NumGlobals];curMethod++)
- {
- if(g_fLimitedVisibility)
- {
- if(g_fHidePub && IsMdPublic(curMethod->dwAttrs)) continue;
- if(g_fHidePriv && IsMdPrivate(curMethod->dwAttrs)) continue;
- if(g_fHideFam && IsMdFamily(curMethod->dwAttrs)) continue;
- if(g_fHideAsm && IsMdAssem(curMethod->dwAttrs)) continue;
- if(g_fHideFOA && IsMdFamORAssem(curMethod->dwAttrs)) continue;
- if(g_fHideFAA && IsMdFamANDAssem(curMethod->dwAttrs)) continue;
- if(g_fHidePrivScope && IsMdPrivateScope(curMethod->dwAttrs)) continue;
- }
- AddMethodToGUI(NULL, pClassItem, NULL, "Global Functions", curMethod->pszMemberName, curMethod->pComSig, curMethod->cComSig, curMethod->token, curMethod->dwAttrs);
- }
- delete[] methods;
- return;
-}
-
-
-BOOL CreateMainWindow()
-{
- DWORD dwStyle, dwStyleEx;
-
-// If only showing GUI's IL window, than we don't want to see the main window
-// However, main window still manages our data, so we have to still create it. :(
-// But we can "pretend" it's not there by hiding it (no WS_VISIBLE, and add WS_EX_TOOLWINDOW)
- if (IsGuiILOnly()) {
- dwStyle = WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_POPUP | WS_SIZEBOX;
- dwStyleEx = WS_EX_TOOLWINDOW;
- } else {
- dwStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SIZEBOX;
- dwStyleEx = WS_EX_CLIENTEDGE;
- }
- g_hwndMain = WszCreateWindowEx(dwStyleEx,
- MAIN_WINDOW_CLASSW,
- L"IL DASM ", //MAIN_WINDOW_CAPTIONW,
- dwStyle,
- guiInfo.x,
- guiInfo.y,
- guiInfo.w,
- guiInfo.h,
- NULL,
- g_hMenu, // menu
- g_hInstance, // hinst
- NULL
- );
- if (g_hwndMain == NULL)
- return FALSE;
- DragAcceptFiles(g_hwndMain,TRUE);
- SendMessageA(g_hwndMain,WM_SETTEXT, 0, (LPARAM)"IL DASM ");
- return TRUE;
-}
-
-
-//
-// Given a CL token, find the classitem for it
-//
-ClassItem_t *FindClassItem(mdTypeDef cl)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if ((*g_ClassItemList)[i].cl == cl)
- return &(*g_ClassItemList)[i];
- }
-
- return NULL;
-}
-
-
-//
-// Given a class name, find the classitem for it (may fail)
-//
-ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszFindNamespace, __in __nullterminated char *pszFindName)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- const char *pszClassName;
- const char *pszNamespace;
-
- if((*g_ClassItemList)[i].cl)
- {
-
- if (FAILED(g_pImport->GetNameOfTypeDef(
- (*g_ClassItemList)[i].cl,
- &pszClassName,
- &pszNamespace)))
- {
- pszClassName = pszNamespace = "Invalid TypeDef record";
- }
- MAKE_NAME_IF_NONE(pszClassName,(*g_ClassItemList)[i].cl);
-
- if (!strcmp(pszFindName, pszClassName))
- {
- if ((((pszFindNamespace == NULL)||(*pszFindNamespace == 0))
- &&((pszNamespace == NULL)||(*pszNamespace == 0)))
- ||(!strcmp(pszFindNamespace, pszNamespace)))
- return &(*g_ClassItemList)[i];
- }
- }
- }
- //MessageBox(NULL,pszFindName,"Class Not Found",MB_OK);
- return NULL;
-}
-
-
-ClassItem_t *FindClassItem(HTREEITEM hItem)
-{
- DWORD i;
-
- for (i = 0; i < g_NumClassItems; i++)
- {
- if ((*g_ClassItemList)[i].hItem == hItem)
- return &(*g_ClassItemList)[i];
- }
-
- return NULL;
-}
-
-
-//
-// Init GUI components
-//
-BOOL CreateGUI()
-{
-
- if (InitGUI() == FALSE)
- return FALSE;
-
- // Register the window class for the main window.
- if (CreateMainWindow() == FALSE)
- return FALSE;
-
- g_hwndTreeView = CreateTreeView(g_hwndMain);
- if (g_hwndTreeView == NULL)
- return FALSE;
-
- return 0;
-}
-
-
-//
-// This is the main loop which the disassembler sits in when in GUI mode
-//
-void GUIMainLoop()
-{
- MSG msg;
- HACCEL hAccel = NULL;
-
- _ASSERTE(g_hResources != NULL);
- hAccel = WszLoadAccelerators(g_hResources,L"FileAccel");
- // Accelerator tables are released when the app exits
- while (WszGetMessage(&msg, (HWND) NULL, 0, 0))
- {
- // Dispatch message to appropriate window
- if((g_hFindText == NULL)|| !WszIsDialogMessage(g_hFindText,&msg))
- {
- if(hAccel && WszTranslateAccelerator(g_hwndMain,hAccel,&msg));
- else
- {
- TranslateMessage(&msg);
- WszDispatchMessage(&msg);
- }
- }
- }
- GUICleanupClassItems();
-}
-// Dump one tree item to a text file (calls itself recursively)
-void DumpTreeItem(HTREEITEM hSelf, FILE* pFile, __inout __nullterminated WCHAR* szIndent)
-{
- HTREEITEM hNext;
- TVITEMEXW tvi;
- static WCHAR szText[2048];
- WCHAR* wzString = (WCHAR*)GlobalBuffer;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_TEXT;
- tvi.hItem = hSelf;
- tvi.pszText = szText;
- tvi.cchTextMax = 2047;
- if(WszSendMessage(g_hwndTreeView,TVM_GETITEMW,0,(LPARAM)(&tvi)))
- {
- WCHAR* szType = NULL;
- if(hSelf == g_hRoot) szType = L"MOD";
- else
- {
- switch(tvi.iImage)
- {
- case CLASS_IMAGE_INDEX: szType = L"CLS"; break;
- case EVENT_IMAGE_INDEX: szType = L"EVT"; break;
- case FIELD_IMAGE_INDEX: szType = L"FLD"; break;
- case NAMESPACE_IMAGE_INDEX: szType = L"NSP"; break;
- case METHOD_IMAGE_INDEX: szType = L"MET"; break;
- case PROP_IMAGE_INDEX: szType = L"PTY"; break;
- case STATIC_FIELD_IMAGE_INDEX: szType = L"STF"; break;
- case STATIC_METHOD_IMAGE_INDEX: szType = L"STM"; break;
- case CLASSENUM_IMAGE_INDEX: szType = L"ENU"; break;
- case CLASSINT_IMAGE_INDEX: szType = L"INT"; break;
- case CLASSVAL_IMAGE_INDEX: szType = L"VCL"; break;
- }
- }
- if(szType) swprintf_s(wzString,4096,L"%s___[%s] %s",szIndent,szType,szText);
- else swprintf_s(wzString,4096,L"%s %s",szIndent,szText);
- }
- else swprintf_s(wzString,4096,L"%sGetItemW failed",szIndent);
- printLineW(pFile,wzString);
- *wzString = 0;
- if(hNext = TreeView_GetChild(g_hwndTreeView,hSelf))
- {
- wcscat_s(szIndent,MAX_FILENAME_LENGTH,L" |");
-
- do {
- DumpTreeItem(hNext,pFile,szIndent);
- } while(hNext = TreeView_GetNextSibling(g_hwndTreeView,hNext));
-
- szIndent[wcslen(szIndent)-4] = 0;
- printLineW(pFile,szIndent);
- }
-}
-#endif
diff --git a/src/ildasm/gui.h b/src/ildasm/gui.h
deleted file mode 100644
index 71a581b3e0..0000000000
--- a/src/ildasm/gui.h
+++ /dev/null
@@ -1,155 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#include "dynamicarray.h"
-
-#define BITMAP_WIDTH 15
-#define BITMAP_HEIGHT 15
-
-#define DISASSEMBLY_CLASS_NAME "disassembly"
-#define MAIN_WINDOW_CLASS "dasm"
-#define MAIN_WINDOW_CAPTION "IL DASM"
-
-#define DISASSEMBLY_CLASS_NAMEW L"disassembly"
-#define MAIN_WINDOW_CLASSW L"dasm"
-#define MAIN_WINDOW_CAPTIONW L"IL DASM\0"
-
-#define PHDC (pDIS->hDC)
-#define PRC (pDIS->rcItem)
-
-#define PADDING 28
-
-#define ID_TREEVIEW 1
-#define ID_LISTBOX 2
-
-typedef struct
-{
- const char *pszNamespace;
- HTREEITEM hRoot;
-} Namespace_t;
-
-
-//
-// Menu info
-//
-enum
-{
- IDM_PROGRESS,
- IDM_OPEN,
- IDM_DUMP,
- IDM_DUMP_TREE,
- IDM_EXIT,
- IDM_SORT_BY_NAME,
- IDM_SHOW_PUB,
- IDM_SHOW_PRIV,
- IDM_SHOW_FAM,
- IDM_SHOW_ASM,
- IDM_SHOW_FAA,
- IDM_SHOW_FOA,
- IDM_SHOW_PSCOPE,
- IDM_FULL_INFO,
- IDM_BYTES,
- IDM_TOKENS,
- IDM_SOURCELINES,
- IDM_EXPANDTRY,
- IDM_QUOTEALLNAMES,
- IDM_SHOW_HEADER,
- IDM_SHOW_STAT,
- IDM_SHOW_METAINFO,
- IDM_MI_DEBUG,
- IDM_MI_HEADER,
- IDM_MI_HEX,
- IDM_MI_CSV,
- IDM_MI_UNREX,
- IDM_MI_SCHEMA,
- IDM_MI_RAW,
- IDM_MI_HEAPS,
- IDM_MI_VALIDATE,
- IDM_HELP,
- IDM_ABOUT,
- IDM_FONT_TREE,
- IDM_FONT_DASM,
- IDM_FIND,
- IDM_FINDNEXT,
- IDM_TREEVIEWFCN,
- IDM_CAVERBAL,
- IDM_DUMPRTF
-};
-
-
-//
-// Bitmaps - keep in same order as in dasm.rc file
-//
-enum
-{
- CLASS_IMAGE_INDEX,
- EVENT_IMAGE_INDEX,
- METHOD_IMAGE_INDEX,
- NAMESPACE_IMAGE_INDEX,
- FIELD_IMAGE_INDEX,
- PROP_IMAGE_INDEX,
- STATIC_METHOD_IMAGE_INDEX,
- STATIC_FIELD_IMAGE_INDEX,
- RED_ARROW_IMAGE_INDEX,
- CLASSENUM_IMAGE_INDEX,
- CLASSINT_IMAGE_INDEX,
- CLASSVAL_IMAGE_INDEX,
- CLASS_GEN_IMAGE_INDEX,
- METHOD_GEN_IMAGE_INDEX,
- STATIC_METHOD_GEN_IMAGE_INDEX,
- CLASSENUM_GEN_IMAGE_INDEX,
- CLASSINT_GEN_IMAGE_INDEX,
- CLASSVAL_GEN_IMAGE_INDEX,
- LAST_IMAGE_INDEX
-};
-
-#define TREEITEM_TYPE_MEMBER 1
-#define TREEITEM_TYPE_INFO 2
-
-// Member items and info items (under classes)
-typedef struct
-{
- HTREEITEM hItem;
- union
- {
- mdToken mbMember;
- char * pszText; // if an info item (extends or implements some class)
- };
- BYTE Discriminator;
-} TreeItem_t;
-
-// Class items (under the root)
-typedef struct
-{
- HTREEITEM hItem;
- mdTypeDef cl;
- TreeItem_t *pMembers; // List of subitems
- DWORD SubItems; // Number of subitems
- DWORD CurMember; // Used when building member list
-} ClassItem_t;
-
-typedef struct
-{
- HWND hwndContainer;
- HWND hwndChild;
- HMENU hMenu;
- mdToken tkClass;
- mdToken tkMember;
- WCHAR wzFind[120];
- FINDREPLACEW strFR;
-} DisasmBox_t;
-
-
-
-// For accessing metadata
-extern IMDInternalImport* g_pImport;
-extern PELoader * g_pPELoader;
-extern IMetaDataImport2* g_pPubImport;
-
-//extern DynamicArray<mdToken> g_cl_list;
-extern mdToken * g_cl_list;
-//extern DynamicArray<mdToken> g_cl_enclosing;
-extern mdToken * g_cl_enclosing;
-extern mdTypeDef g_cl_module;
-extern DWORD g_NumClasses;
diff --git a/src/ildasm/html/clicking.htm b/src/ildasm/html/clicking.htm
deleted file mode 100644
index 828193c988..0000000000
--- a/src/ildasm/html/clicking.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Clicking on Tree View Items</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-
-<P style="margin-top: 0; margin-bottom: 0"><A NAME="clicking"><font size="4">
-</font></A><B><I><font size="4">CLICKING ON TREE VIEW ITEMS</font></I></B></P>
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-
-<font size="2">
-<P style="margin-top: 0; margin-bottom: 0">Double-clicking on various tree view items results in the following actions:
-<UL>
- <LI><P style="margin-top: 0; margin-bottom: 0">On namespace or any type of class - expanding/collapsing respective subtree</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On manifest, field, method, event, property - showing disassembly of the item in a separate window</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>.class</B> info item - showing partial disassembly of the class in a separate window</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>extends</B> info item - selecting the parent class (if present) in tree view</LI>
- <LI><p style="margin-top: 0; margin-bottom: 0">On <B>implements</B> info item - selecting the implemented interface (if present) in tree view</LI>
-</UL>
-</font>
-
-</BODY>
-</HTML>
diff --git a/src/ildasm/html/keyboard.htm b/src/ildasm/html/keyboard.htm
deleted file mode 100644
index 6730adcc22..0000000000
--- a/src/ildasm/html/keyboard.htm
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Keyboard Commands</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="keyboard"><font size="4">
-</font></A><I><font size="4">KEYBOARD COMMANDS</font></I></H1>
-<p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
-
-<font size="2">
-
-<P style="margin-top: 0; margin-bottom: 0">Hot keys: </P>
-<blockquote>
- <table border="1" width="90%" id="table1">
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+O</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- open a file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+D</B>
-</font>
- </td>
- <td>
-
-<font size="2" face="Arial">
-
- disassemble the loaded file into IL source file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+T</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- dump fully expanded tree view into a text file</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+M</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- show metadata info in a disassembly window (advanced mode only)</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>Ctrl+X</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- exit</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <B>F1</B> or
- <B>Alt+H</B></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- Show this help window</font></td>
- </tr>
- </table>
-</blockquote>
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-
-<p style="margin-top: 0; margin-bottom: 0"></p>
-
-<P style="margin-top: 0; margin-bottom: 0">In tree view:</P>
-
-<blockquote>
- <table border="1" width="90%" id="table2">
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Enter</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- similar to double clicking (see above)</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor right</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- expand subtree</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor left</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- collapse subtree</font></td>
- </tr>
- <tr>
- <td width="123">
-
-<font size="2" face="Arial">
-
- <b>Cursor up/down</b></font></td>
- <td>
-
-<font size="2" face="Arial">
-
- select previous/next item</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-</font>
-</BODY>
-</HTML>
diff --git a/src/ildasm/html/menu_options.htm b/src/ildasm/html/menu_options.htm
deleted file mode 100644
index d96f59acfa..0000000000
--- a/src/ildasm/html/menu_options.htm
+++ /dev/null
@@ -1,324 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Menu Options</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- blockquote {text-indent: 0%}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-<P style="margin-top: 0; margin-bottom: 0"><A NAME="menu_options"></A><B><I><font size="4">MENU OPTIONS</font></I></B></P>
-
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-<P style="margin-top: 0; margin-bottom: 0"><B>File</B> (Alt+F)</P>
-<font size="2">
-<blockquote>
- <table border="1" width="90%" id="table1">
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Open</B> (Ctrl+O)</font></td>
- <td>
-<font size="2" face="Arial">
- select a PE file to open</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Dump</B> (Ctrl+D)</font></td>
- <td>
-<font size="2" face="Arial">
- dump the current PE file to an IL source file</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Dump TreeView</B> (Ctrl+T)</font></td>
- <td>
-<font size="2" face="Arial">
- dump the fully expanded tree view of current PE file to a text file</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-<font size="2" face="Arial">
- <B>Exit</B> (Ctrl+X)</font></td>
- <td>
-<font size="2" face="Arial">
- close the current PE file and exit</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-<p style="margin-top: 0; margin-bottom: 0">
-</P>
-
-<P style="margin-top: 0; margin-bottom: 0">&nbsp;</P>
-<P style="margin-top: 0; margin-bottom: 0"><B>View</B> (Alt+V)</P>
-
-<font size="2">
-<blockquote>
- <table border="1" width="90%" id="table2">
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Set Fonts</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- set the fonts for tree view and disassembly windows. Default fonts
- are MS Sans Serif 8 for tree view and Courier 10 for Disassembly
- windows</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Sort by name</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) sort the items in tree view by name</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Public</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having public accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Private</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having private accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Family</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Assembly</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having assembly accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show FamANDAssem</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family-and-assembly
- accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show FamORAssem</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having family-or-assembly
- accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show PrivateScope</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show or dump the items having private scope accessibility</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show Member Types</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show types of members ('method','field',etc.) in tree view nodes</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show bytes</B>
-</font>
- </td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show the actual IL code in hexadecimal (as comments) when
- disassembling the methods</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show token values</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show token values in hexadecimal (as comments)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Show source lines</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) show the original source code (as comments, if the original
- source is available)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Quote all names</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) include all names in single quotes (when off, only illegal
- names are quoted)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Expand try/catch</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- (on/off) present SEH clauses in expanded form when possible (<B>try { ... } catch ExceptionClass { ... }</B>)</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>COR Header</B></font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- show contents of COR header in a disassembly window"</font></td>
- </tr>
- <tr>
- <td width="155" valign="top">
-
-<font size="2" face="Arial">
- <B>Statistics</B> <br>
- (advanced mode only)</font></td>
- <td colspan="2" valign="top">
-
-<font size="2" face="Arial">
- show PE file statistics in a disassembly window</font></td>
- </tr>
- <tr>
- <td width="155" rowspan="6" valign="top">
-
-<font size="2" face="Arial">
- <B>MetaInfo</B> <br>
- (advanced mode only)</font></td>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Header</B>
-</font>
- </td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata info as header summary</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>More HEX</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show token and attribute values (in hexadecimal) in
- metadata info</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>CSV</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata info as comma-separated values</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Unresolved ext</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) add list of unresolved external references to metadata info</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Validate</B></font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- (on/off) show metadata validation results</font></td>
- </tr>
- <tr>
- <td width="16%" valign="top">
-
-<font size="2" face="Arial">
- <B>Show!</B> (Ctrl+M)</font></td>
- <td valign="top">
-
-<font size="2" face="Arial">
- show the metadata info in a disassembly window</font></td>
- </tr>
- </table>
-</blockquote>
-</font>
-</font>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/src/ildasm/html/tree_view_icons.htm b/src/ildasm/html/tree_view_icons.htm
deleted file mode 100644
index d39e7e811d..0000000000
--- a/src/ildasm/html/tree_view_icons.htm
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
-<TITLE>Tree View Icons</TITLE>
-
-<STYLE>
- BODY {background: white; color: black}
- h3 {font: 8pt Arial bold}
- P {font: 10pt Arial}
- TD {font: 10pt Arial}
- A {text-decoration: none; color: blue}
-</STYLE>
-
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
-<font face="Arial">
-
-<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="tree_view_icons">
-</A><I><font size="4">TREE VIEW ICONS</font></I></H1>
-<p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
-
-<table border="1" width="82%" id="table1" cellpadding="3" cellspacing="3" >
-<font size="2">
- <tr>
- <td width="148" valign="top"><b>Namespace</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/namespace.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue shield)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Class</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/class.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue rectangle with three outputs)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Interface</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/interface.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Blue rectangle with three outputs marked 'I')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Value Class</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/value_class.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Brown rectangle with three outputs)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Enum</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/enum.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Brown rectangle with three outputs marked 'E')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Method</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/method.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Magenta rectangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Static method</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/static_method.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Magenta rectangle marked 'S')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Field</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/field.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Cyan diamond)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Static field</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/static_field.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Cyan diamond marked 'S')</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Event</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/event.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Green point-down triangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Property</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/property.gif" width="15" height="15"></td>
- <td width="321" valign="top">(Red point-up triangle)</td>
- </tr>
- <tr>
- <td width="148" valign="top"><b>Manifest or a class info item</b></td>
- <td align="center" valign="top">
- <img border="0" src="tree_view_icons_files/manifest_classinfo.GIF" width="15" height="15"></td>
- <td width="321" valign="top">(Red point-right triangle)</td>
- </tr>
-</font></table>
-
-</font>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/src/ildasm/html/tree_view_icons_files/class.gif b/src/ildasm/html/tree_view_icons_files/class.gif
deleted file mode 100644
index 53d1494a33..0000000000
--- a/src/ildasm/html/tree_view_icons_files/class.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/enum.gif b/src/ildasm/html/tree_view_icons_files/enum.gif
deleted file mode 100644
index af7a94ee0b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/enum.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/event.gif b/src/ildasm/html/tree_view_icons_files/event.gif
deleted file mode 100644
index 00de688ab8..0000000000
--- a/src/ildasm/html/tree_view_icons_files/event.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/field.gif b/src/ildasm/html/tree_view_icons_files/field.gif
deleted file mode 100644
index 0b6ed0a74b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/field.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/interface.gif b/src/ildasm/html/tree_view_icons_files/interface.gif
deleted file mode 100644
index 21664cc715..0000000000
--- a/src/ildasm/html/tree_view_icons_files/interface.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF
deleted file mode 100644
index 8811686023..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg
deleted file mode 100644
index 8a752429eb..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png
deleted file mode 100644
index a68d41dd02..0000000000
--- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/method.gif b/src/ildasm/html/tree_view_icons_files/method.gif
deleted file mode 100644
index d96cfe4e0b..0000000000
--- a/src/ildasm/html/tree_view_icons_files/method.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/namespace.gif b/src/ildasm/html/tree_view_icons_files/namespace.gif
deleted file mode 100644
index 4001293dc0..0000000000
--- a/src/ildasm/html/tree_view_icons_files/namespace.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/property.gif b/src/ildasm/html/tree_view_icons_files/property.gif
deleted file mode 100644
index 08edbf854c..0000000000
--- a/src/ildasm/html/tree_view_icons_files/property.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/static_field.gif b/src/ildasm/html/tree_view_icons_files/static_field.gif
deleted file mode 100644
index d8d6ff3ca3..0000000000
--- a/src/ildasm/html/tree_view_icons_files/static_field.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/static_method.gif b/src/ildasm/html/tree_view_icons_files/static_method.gif
deleted file mode 100644
index 5d982e1fc8..0000000000
--- a/src/ildasm/html/tree_view_icons_files/static_method.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/html/tree_view_icons_files/value_class.gif b/src/ildasm/html/tree_view_icons_files/value_class.gif
deleted file mode 100644
index d4546f510f..0000000000
--- a/src/ildasm/html/tree_view_icons_files/value_class.gif
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/ildasm.chm b/src/ildasm/ildasm.chm
deleted file mode 100644
index 166b1ca936..0000000000
--- a/src/ildasm/ildasm.chm
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/ildasm.hhp b/src/ildasm/ildasm.hhp
deleted file mode 100644
index 71d47f5ff7..0000000000
--- a/src/ildasm/ildasm.hhp
+++ /dev/null
@@ -1,36 +0,0 @@
-[OPTIONS]
-Binary Index=No
-Compatibility=1.1 or later
-Compiled file=ildasm.chm
-Contents file=dasmhlp.hhc
-Default Font=Arial,8,0
-Default Window=Main
-Default topic=html\menu_options.htm
-Display compile progress=No
-Full-text search=Yes
-Language=0x409 English (United States)
-Title=MSIL Disassembler Help
-
-[WINDOWS]
-Main="MSIL Disassembler Help","dasmhlp.hhc",,"html\menu_options.htm","html\menu_options.htm",,,,,0x42520,185,0x3006,[253,102,1070,702],,0x8,,,,,0
-
-
-[FILES]
-html\clicking.htm
-html\keyboard.htm
-html\menu_options.htm
-html\tree_view_icons.htm
-ildasm.hhp
-map.h
-
-[ALIAS]
-CLICKING=html\clicking.htm
-KEYBOARD=html\keyboard.htm
-MENU_OPTIONS=html\menu_options.htm
-TREE_VIEW_ICONS=html\tree_view_icons.htm
-
-[MAP]
-#include map.h
-
-[INFOTYPES]
-
diff --git a/src/ildasm/map.h b/src/ildasm/map.h
deleted file mode 100644
index 5f0cfec93c..0000000000
--- a/src/ildasm/map.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-#define MENU_OPTIONS 1
-#define TREE_VIEW_ICONS 2
-#define CLICKING 3
-#define KEYBOARD 4
diff --git a/src/ildasm/method.bmp b/src/ildasm/method.bmp
deleted file mode 100644
index b76bb93ef7..0000000000
--- a/src/ildasm/method.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/methodg.bmp b/src/ildasm/methodg.bmp
deleted file mode 100644
index dfa4c68c10..0000000000
--- a/src/ildasm/methodg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/namespace.bmp b/src/ildasm/namespace.bmp
deleted file mode 100644
index 6ac839ee65..0000000000
--- a/src/ildasm/namespace.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/prop.bmp b/src/ildasm/prop.bmp
deleted file mode 100644
index 857e69c3fe..0000000000
--- a/src/ildasm/prop.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/rcdll/CMakeLists.txt b/src/ildasm/rcdll/CMakeLists.txt
index 5fb49daedc..316f778769 100644
--- a/src/ildasm/rcdll/CMakeLists.txt
+++ b/src/ildasm/rcdll/CMakeLists.txt
@@ -24,4 +24,4 @@ target_link_libraries(ildasmrc
${STATIC_MT_VCRT_LIB}
)
-install_clr (ildasmrc) \ No newline at end of file
+install_clr (ildasmrc)
diff --git a/src/ildasm/redarrow.bmp b/src/ildasm/redarrow.bmp
deleted file mode 100644
index ce94dc8fb2..0000000000
--- a/src/ildasm/redarrow.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/resource.h b/src/ildasm/resource.h
index ae126fafb4..6d7d1e8c40 100644
--- a/src/ildasm/resource.h
+++ b/src/ildasm/resource.h
@@ -7,63 +7,7 @@
// Used by dasm.rc
//
-#define IDS_FILE 1
-#define IDS_VIEW 2
-#define IDS_HELP 3
-#define IDS_OPEN 4
-#define IDS_DUMP 5
-#define IDS_DUMPTREE 6
-#define IDS_EXIT 7
-#define IDS_FONTS 8
-#define IDS_FONT_TREE 9
-#define IDS_FONT_DASM 10
-#define IDS_SORT_BY_NAME 11
-#define IDS_SHOW_PUB 12
-#define IDS_SHOW_PRIV 13
-#define IDS_SHOW_FAM 14
-#define IDS_SHOW_ASM 15
-#define IDS_SHOW_FAA 16
-#define IDS_SHOW_FOA 17
-#define IDS_SHOW_PSCOPE 18
-#define IDS_FULL_INFO 19
-#define IDS_BYTES 20
-#define IDS_TOKENS 21
-#define IDS_SOURCELINES 22
-#define IDS_QUOTEALLNAMES 23
-#define IDS_EXPANDTRY 24
-#define IDS_SHOW_HEADER 25
-#define IDS_SHOW_STAT 26
-#define IDS_METAINFO 27
-#define IDS_MI_HEADER 28
-#define IDS_MI_HEX 29
-#define IDS_MI_CSV 30
-#define IDS_MI_UNREX 31
-#define IDS_MI_DEBUG 32
-#define IDS_MI_SCHEMA 33
-#define IDS_MI_RAW 34
-#define IDS_MI_HEAPS 35
-#define IDS_MI_VALIDATE 36
-#define IDS_SHOW_METAINFO 37
-#define IDS_ABOUT 38
-#define IDS_ABOUT_COPYRIGHTINFO 39
-#define IDS_PRODUCTNAME 40
-#define IDS_MAINWINDOWCAPTION 41
-#define IDS_MAINWINDOWCAPTIONAPPEND 42
-#define IDS_NETHEADER 43
-#define IDS_STATISTICS 44
-#define IDS_METAINFOTEXT 45
-#define IDS_FIND 46
-#define IDS_FINDNEXT 47
#define IDS_RTL 48
-#define IDS_TREEVIEWFCN 49
-#define IDS_CAVERBAL 50
-#define IDS_DUMPRTF 51
-
-#define IDI_ICON2 136
-#define IDD_DIALOG1 137
-#define IDD_ABOUT 149
-#define IDR_MAINMENU 149
-#define IDI_ICON1 150
#define IDS_USAGE_TITLE 200
#define IDS_USAGE_01 IDS_USAGE_TITLE + 1
@@ -152,7 +96,6 @@
#define IDS_E_BADCORHDR 404
#define IDS_E_OPENMD 405
#define IDS_E_COPYRIGHT 406
-#define IDS_E_DASMABORT 407
#define IDS_E_DASMOK 408
#define IDS_E_PARTDASM 409
#define IDS_E_INSTRDT 410
diff --git a/src/ildasm/staticfield.bmp b/src/ildasm/staticfield.bmp
deleted file mode 100644
index 70edc432c1..0000000000
--- a/src/ildasm/staticfield.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/staticmethod.bmp b/src/ildasm/staticmethod.bmp
deleted file mode 100644
index bc87d243ae..0000000000
--- a/src/ildasm/staticmethod.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/staticmethodg.bmp b/src/ildasm/staticmethodg.bmp
deleted file mode 100644
index fedc1c56da..0000000000
--- a/src/ildasm/staticmethodg.bmp
+++ /dev/null
Binary files differ
diff --git a/src/ildasm/windasm.cpp b/src/ildasm/windasm.cpp
index 57f779fd50..13b56fca42 100644
--- a/src/ildasm/windasm.cpp
+++ b/src/ildasm/windasm.cpp
@@ -13,8 +13,6 @@
#include "dynamicarray.h"
-#define DO_DASM_GUI
-#include "dasmgui.h"
#include "dasmenum.hpp"
#include "dis.h"
#include <ndpversion.h>
@@ -26,7 +24,6 @@
#define MODE_DUMP_CLASS 1
#define MODE_DUMP_CLASS_METHOD 2
#define MODE_DUMP_CLASS_METHOD_SIG 3
-#define MODE_GUI 4
// All externs are defined in DASM.CPP
extern BOOL g_fDumpIL;
@@ -47,7 +44,6 @@ extern BOOL g_fShowSource;
extern BOOL g_fInsertSourceLines;
extern BOOL g_fTryInCode;
extern BOOL g_fQuoteAllNames;
-extern BOOL g_fShowProgressBar;
extern BOOL g_fTDC;
extern BOOL g_fShowCA;
extern BOOL g_fCAVerbal;
@@ -99,13 +95,6 @@ void Cleanup();
void DumpMetaInfo(__in __nullterminated const WCHAR* pszFileName, __in __nullterminated const char* pszObjFileName, void* GUICookie);
FILE* OpenOutput(__in __nullterminated const char* szFileName);
-// Do we only view an IL-dasm window in GUI mode?
-// TRUE when we're in GUI mode and we specified a particular method from the cmd line
-BOOL IsGuiILOnly()
-{
- return (g_Mode & MODE_GUI) && (g_pszMethodToDump[0] != 0);
-}
-
void PrintLogo()
{
printf("Microsoft (R) .NET Framework IL Disassembler. Version " VER_FILEVERSION_STR);
@@ -221,11 +210,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
}
else if (_stricmp(szOpt, "sou") == 0)
{
-#ifdef FEATURE_CORECLR
printf("Warning: 'SOURCE' option is ignored for ildasm on CoreCLR.\n");
-#else
- g_fShowSource = TRUE;
-#endif
}
else if (_stricmp(szOpt, "lin") == 0)
{
@@ -303,10 +288,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
g_fHideFOA ||
g_fHidePrivScope;
}
- else if (_stricmp(szOpt, "nob") == 0)
- {
- g_fShowProgressBar = FALSE;
- }
else if (_stricmp(szOpt, "quo") == 0)
{
g_fQuoteAllNames = TRUE;
@@ -383,29 +364,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
}
else if ((_stricmp(szOpt, "met") == 0)&&g_fTDC)
{
-#ifdef FEATURE_CORECLR
printf("Warning: 'METADATA' option is ignored for ildasm on CoreCLR.\n");
-#else
-
- char *pStr = EqualOrColon(szArg);
- g_fDumpMetaInfo = TRUE;
- if(pStr)
- {
- char szOptn[64];
- strncpy_s(szOptn, 64, pStr+1,10);
- szOptn[3] = 0; // recognize metainfo specifier by first 3 chars
- if (_stricmp(szOptn, "hex") == 0) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex;
- else if(_stricmp(szOptn, "csv") == 0) g_ulMetaInfoFilter |= MDInfo::dumpCSV;
- else if(_stricmp(szOptn, "mdh") == 0) g_ulMetaInfoFilter |= MDInfo::dumpHeader;
- else if(_stricmp(szOptn, "raw") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRaw;
- else if(_stricmp(szOptn, "hea") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps;
- else if(_stricmp(szOptn, "sch") == 0) g_ulMetaInfoFilter |= MDInfo::dumpSchema;
- else if(_stricmp(szOptn, "unr") == 0) g_ulMetaInfoFilter |= MDInfo::dumpUnsat;
- else if(_stricmp(szOptn, "val") == 0) g_ulMetaInfoFilter |= MDInfo::dumpValidate;
- else if(_stricmp(szOptn, "sta") == 0) g_ulMetaInfoFilter |= MDInfo::dumpStats;
- else return -1;
- }
-#endif // FEATURE_CORECLR
}
else if (_stricmp(szOpt, "obj") == 0)
{
@@ -428,15 +387,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam
strncpy_s(g_szOutputFile, MAX_FILENAME_LENGTH, pStr,MAX_FILENAME_LENGTH-1);
g_szOutputFile[MAX_FILENAME_LENGTH-1] = 0;
}
- else
- g_fShowProgressBar = FALSE;
-
- g_Mode &= ~MODE_GUI;
- }
- else if (_stricmp(szOpt, "tex") == 0)
- {
- g_Mode &= ~MODE_GUI;
- g_fShowProgressBar = FALSE;
}
else
{
@@ -541,16 +491,9 @@ int ParseCmdLineA(__in __nullterminated char* szCmdLine, __out char** ppszObjFil
return ret;
}
-#ifdef FEATURE_CORECLR
int __cdecl main(int nCmdShow, char* lpCmdLine[])
-#else
-int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- __in LPSTR lpCmdLine,
- int nCmdShow)
-#endif
{
-#if defined(FEATURE_CORECLR) && defined(FEATURE_PAL)
+#if defined(FEATURE_PAL)
if (0 != PAL_Initialize(nCmdShow, lpCmdLine))
{
printError(g_pFile, "Error: Fail to PAL_Initialize\n");
@@ -575,10 +518,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
g_fUseProperName = TRUE;
-#ifndef FEATURE_CORECLR
- g_hInstance = hInstance;
- g_Mode = MODE_GUI;
-#endif
g_pszClassToDump[0]=0;
g_pszMethodToDump[0]=0;
g_pszSigToDump[0]=0;
@@ -623,7 +562,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
SyntaxCon();
exit((iCommandLineParsed == 1) ? 0 : 1);
}
- if(!(g_Mode & MODE_GUI))
+
{
DWORD exitCode = 1;
if(g_szInputFile[0] == 0)
@@ -658,75 +597,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
Uninit();
exit(exitCode);
}
- else // if GUI ordered, restart as WinApp
- {
-#ifdef FEATURE_CORECLR
- _ASSERTE(!"GUI is not supported for ildasm on CoreCLR.");
-#else
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- memset(&pi, 0, sizeof(PROCESS_INFORMATION) );
- memset(&si, 0, sizeof(STARTUPINFO) );
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
- si.wShowWindow = SW_SHOW;
- si.hStdOutput = INVALID_HANDLE_VALUE;
- si.hStdInput = INVALID_HANDLE_VALUE;
- si.hStdError = INVALID_HANDLE_VALUE;
- // Create the child process.
- if(CreateProcessW(NULL,
- wzCommandLine, // command line
- NULL, // process security attributes
- NULL, // primary thread security attributes
- TRUE, // handles are inherited
- DETACHED_PROCESS, // creation flags
- NULL, // use parent's environment
- NULL, // use parent's current directory
- (LPSTARTUPINFOW)&si, // STARTUPINFO pointer
- &pi)==0) // receives PROCESS_INFORMATION
- {
- printf(RstrANSI(IDS_E_CANTCREATEPROC));//"Failed to CreateProcess\n\n");
- exit(1);
- }
- exit(0);
-#endif
- }
- }
-#ifndef FEATURE_CORECLR
- else //Second pass: WinApp
- {
- g_uCodePage = CP_UTF8;
- g_Mode = MODE_GUI;
- g_fDumpHTML = FALSE;
-
- if(g_szInputFile[0])
- {
- char* pch = strrchr(g_szInputFile,'.');
- if(pch && (!_strcmpi(pch+1,"lib") || !_strcmpi(pch+1,"obj")))
- {
- WszMessageBox(NULL,
- RstrW(IDS_ONLYPEINGUI),//"ILDASM supports only PE files in graphic mode",
- RstrW(IDS_BADFILETYPE),//"Invalid File Type",
- MB_OK|MB_ICONERROR|GetDasmMBRTLStyle());
- return 0;
- }
- }
- if (Init() == TRUE)
- {
- CreateGUI();
- if(g_szInputFile[0])
- {
- GUISetModule(g_szInputFile);
- DumpFile();
- }
- GUIMainLoop();
- Cleanup();
- DestroyGUI();
- }
- Uninit();
- return 0 ;
}
-#endif
return 0;
}