You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.2 KiB
118 lines
3.2 KiB
/*
|
|
Copyright (c) Microsoft Corporation
|
|
generate comctl tool
|
|
based on gennt32t
|
|
*/
|
|
#pragma warning( disable : 4786) //disable identifier is too long for debugging error
|
|
#pragma warning( disable : 4503) //disable decorated name is too long
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include <imagehlp.h>
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <iomanip>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <set>
|
|
#include <map>
|
|
|
|
extern "C" {
|
|
|
|
#include "gen.h"
|
|
|
|
#if !defined(NUMBER_OF)
|
|
#define NUMBER_OF(x) (sizeof(x)/sizeof((x)[0]))
|
|
#endif
|
|
|
|
// string to put in front of all error messages so that BUILD can find them.
|
|
const char *ErrMsgPrefix = "NMAKE : U8603: 'GENCOMCTLT' ";
|
|
|
|
void
|
|
HandlePreprocessorDirective(
|
|
char *p
|
|
)
|
|
{
|
|
ExitErrMsg(FALSE, "Preprocessor directives not allowed by gencomctlt.\n");
|
|
}
|
|
|
|
}
|
|
|
|
using namespace std;
|
|
typedef string String;
|
|
|
|
PRBTREE pFunctions = NULL;
|
|
PRBTREE pStructures = NULL;
|
|
PRBTREE pTypedefs = NULL;
|
|
|
|
void ExtractCVMHeader(PCVMHEAPHEADER pHeader) {
|
|
pFunctions = &pHeader->FuncsList;
|
|
pTypedefs = &pHeader->TypeDefsList;
|
|
pStructures =&pHeader->StructsList;
|
|
}
|
|
|
|
// globals so debugging works
|
|
PKNOWNTYPES pFunction;
|
|
PFUNCINFO pfuncinfo;
|
|
|
|
void DumpFunctionDeclarationsHeader(void)
|
|
{
|
|
//PKNOWNTYPES pFunction;
|
|
//PFUNCINFO pfuncinfo;
|
|
|
|
cout << "///////////////////////////////////////////\n";
|
|
cout << "// This file is autogenerated by gencomctlt. \n";
|
|
cout << "// Do not edit \n";
|
|
cout << "///////////////////////////////////////////\n";
|
|
cout << '\n' << '\n';
|
|
|
|
cout << "#include \"windows.h\"\n";
|
|
cout << "#include \"commctrl.h\"\n\n";
|
|
|
|
cout << "///////////////////////////////////////////\n";
|
|
cout << "// Functions //\n";
|
|
cout << "///////////////////////////////////////////\n";
|
|
for (
|
|
pFunction = pFunctions->pLastNodeInserted;
|
|
pFunction != NULL
|
|
&& pFunction->TypeName != NULL
|
|
&& strcmp(pFunction->TypeName, "MarkerFunction_8afccfaa_27e7_45d5_8ff7_7ac0b970789d") != 0 ;
|
|
pFunction = pFunction->Next)
|
|
{
|
|
/*
|
|
for now, just like print out commctrl as a demo/test of understanding the tool
|
|
tomorrow, print out what we actually need
|
|
*/
|
|
cout << pFunction->FuncRet << ' ';
|
|
cout << pFunction->FuncMod << ' '; // __stdcall
|
|
cout << pFunction->TypeName << "(\n"; // function name
|
|
pfuncinfo = pFunction->pfuncinfo;
|
|
if (pfuncinfo == NULL || pfuncinfo->sType == NULL || pfuncinfo->sName == NULL)
|
|
{
|
|
cout << "void";
|
|
}
|
|
else
|
|
{
|
|
for ( ; pfuncinfo != NULL ; pfuncinfo = pfuncinfo->pfuncinfoNext )
|
|
{
|
|
cout << ' ' << pfuncinfo->sType << ' ' << pfuncinfo->sName << ",\n";
|
|
}
|
|
}
|
|
cout << ")\n";
|
|
}
|
|
cout << '\n' << '\n';
|
|
}
|
|
|
|
int __cdecl main(int argc, char*argv[])
|
|
{
|
|
ExtractCVMHeader(MapPpmFile(argv[1], TRUE));
|
|
DumpFunctionDeclarationsHeader();
|
|
return 0;
|
|
}
|