Leaked source code of windows server 2003
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.

708 lines
19 KiB

  1. /*++
  2. Copyright (c) Microsoft Corporation
  3. Module Name:
  4. gen.h
  5. Abstract:
  6. Types shared between the Wx86 tools
  7. Author:
  8. ??-???-?? Unknown
  9. Revision History:
  10. July 2001 JayKrell
  11. integrated from base\wow64\tools to /private/winfuse_longhorn/base/tools
  12. January 2002 JayKrell
  13. integrated /private/winfuse_longhorn/base/tools to /lab01_n/base/win32/fusion/tools
  14. some -W4 cleanup
  15. --*/
  16. #pragma warning(disable:4057) /* char vs. unsigned char mixup */
  17. #pragma warning(disable:4100) /* unreferenced formal parameter */
  18. #pragma warning(disable:4115) /* named type definition in parentheses */
  19. #pragma warning(disable:4127) /* conditional expression is constant */
  20. #pragma warning(disable:4201) /* nameless struct/union */
  21. #pragma warning(disable:4214) /* bit field types other than int */
  22. #pragma warning(disable:4267) /* conversion from 'size_t' to 'int', possible loss of data */
  23. // Increment this number whenever the format of winincs.ppm changes
  24. #define VM_TOOL_VERSION_BASE 0x80000006
  25. // Make the 64-bit PPM file format incompatible to prevent badness
  26. #if _WIN64
  27. #define VM_TOOL_VERSION (VM_TOOL_VERSION_BASE | 0x01000000)
  28. #else
  29. #define VM_TOOL_VERSION (VM_TOOL_VERSION_BASE)
  30. #endif
  31. // Make the compiler more struct.
  32. #pragma warning(3:4033) // function must return a value
  33. //#pragma warning(3:4701) // local may be used w/o init
  34. #pragma warning(3:4702) // Unreachable code
  35. #pragma warning(3:4705) // Statement has no effect
  36. extern const char *ErrMsgPrefix; // string to put in front of all error
  37. // messages so that BUILD can find them.
  38. // This is something like:
  39. // "NMAKE : U8600: 'GENTHNK' "
  40. struct _KnownTypesInfo;
  41. typedef enum _TokenType {
  42. TK_NONE, // 0
  43. TK_IDENTIFIER, // 1
  44. TK_NUMBER, // 2
  45. TK_PLUS, // 3
  46. TK_MINUS, // 4
  47. TK_STAR, // 5
  48. TK_DIVIDE, // 6
  49. TK_LSQUARE, // 7
  50. TK_RSQUARE, // 8
  51. TK_LBRACE, // 9
  52. TK_RBRACE, // a
  53. TK_LPAREN, // b
  54. TK_RPAREN, // c
  55. TK_VARGS, // d
  56. TK_CONST, // e
  57. TK_VOLATILE, // f
  58. TK_REGISTER, // 10
  59. TK_EXTERN, // 11
  60. TK_CDECL, // 12
  61. TK_STDCALL, // 13
  62. TK_TYPEDEF, // 14
  63. TK_STATIC, // 15
  64. TK_COMMA, // 16
  65. TK_SEMI, // 17
  66. TK_STRUCT, // 18
  67. TK_UNION, // 19
  68. TK_ENUM, // 1a
  69. TK_INLINE, // 1b
  70. TK_COLON, // 1c
  71. TK_ASSIGN, // 1d
  72. TK_DOT, // 1e
  73. TK_LSHIFT, // 1f
  74. TK_RSHIFT, // 20
  75. TK_LESS, // 21
  76. TK_GREATER, // 22
  77. TK_UNALIGNED, // 23
  78. TK_DECLSPEC, // 24
  79. TK_RESTRICT, // 25
  80. TK_FASTCALL, // 26
  81. TK_IN, // 27
  82. TK_OUT, // 28
  83. TK_INOUT, // 29
  84. TK_BITWISE_AND, // 30
  85. TK_BITWISE_OR, // 31
  86. TK_LOGICAL_AND, // 32
  87. TK_LOGICAL_OR, // 33
  88. TK_MOD, // 34
  89. TK_XOR, // 35
  90. TK_NOT, // 36
  91. TK_TILDE, // 37
  92. TK_STRING, // 38
  93. TK_SIZEOF, // 39
  94. TK_TEMPLATE, // 40
  95. TK___W64, // 41
  96. TK_EOS // end-of-statement
  97. } TOKENTYPE, *PTOKENTYPE;
  98. typedef struct _cvmheapinfo {
  99. ULONG_PTR uBaseAddress;
  100. ULONG_PTR uReserveSize;
  101. ULONG_PTR uRegionSize;
  102. ULONG_PTR uUncomitted;
  103. ULONG_PTR uUnReserved;
  104. ULONG_PTR uAvailable;
  105. } CVMHEAPINFO;
  106. typedef struct _memberinfo {
  107. struct _memberinfo *pmeminfoNext; // ptr to next member
  108. DWORD dwOffset; // offset in structure of member
  109. char *sName; // member name
  110. char *sType; // type name
  111. struct _KnownTypesInfo *pkt; // Info for this type
  112. int IndLevel; // levels of indirection
  113. struct _KnownTypesInfo *pktCache; // used by MemberTypes() in genthnk
  114. BOOL bIsBitfield; // Determines if this is a bitfield
  115. int BitsRequired; // Number of bits required for bitfield
  116. BOOL bIsPtr64; // Pointer is a 64 bit pointer
  117. BOOL bIsArray; // This member is an array
  118. int ArrayElements; // Number of elements in the array
  119. } MEMBERINFO, *PMEMBERINFO;
  120. typedef struct _funcinfo {
  121. struct _funcinfo *pfuncinfoNext;
  122. BOOL fIsPtr64; // TRUE if this is a __ptr64
  123. TOKENTYPE tkDirection; // TK_IN, TK_OUT, TK_INOUT or TK_NONE
  124. TOKENTYPE tkPreMod; // TK_CONST, TK_VOLATILE, or TK_NONE
  125. TOKENTYPE tkSUE; // TK_STRUCT/UNION/ENUM, or TK_NONE
  126. char *sType; // name of the type
  127. struct _KnownTypesInfo *pkt; // Info for this type
  128. TOKENTYPE tkPrePostMod; // TK_CONST, TK_VOLATILE, or TK_NONE
  129. int IndLevel; // indirection level
  130. TOKENTYPE tkPostMod; // TK_CONST, TK_VOLATILE, or TK_NONE
  131. char *sName; // name of the argment
  132. } FUNCINFO, *PFUNCINFO;
  133. #if _WIN64
  134. // The sizes must be bigger since the MEMBERINFO structs themselves are bigger
  135. #define FUNCMEMBERSIZE (40*1024) // storage for members or MEMINFO list
  136. #define MEMBERMETHODSSIZE 8192 // storage for names of methods
  137. #else
  138. #define FUNCMEMBERSIZE (20*1024) // storage for members or MEMINFO list
  139. #define MEMBERMETHODSSIZE 4096 // storage for names of methods
  140. #endif
  141. typedef enum _TypeKind {
  142. TypeKindEmpty = 0, // Members[] is unused
  143. TypeKindStruct, // TYPESINFO.Members is array of MEMBERINFO
  144. TypeKindFunc // TYPESINFO.Members is array of FUNCINFO
  145. } TYPEKIND;
  146. #define DIR_INOUT 0
  147. #define DIR_IN 1
  148. #define DIR_OUT 2
  149. #define SIZEOFPOINTER 4 // standard size for 32 bit pointer
  150. #define SIZEOFPOINTER64 8 // standard size for 64 bit pointer
  151. // The colors
  152. typedef enum {RED, BLACK} COL;
  153. typedef struct _KnownTypesInfo {
  154. // elements used by the Red-Black tree code, along with TypeName
  155. struct _KnownTypesInfo *RBParent;
  156. struct _KnownTypesInfo *RBLeft;
  157. struct _KnownTypesInfo *RBRight;
  158. COL RBColor;
  159. struct _KnownTypesInfo *Next;
  160. ULONG Flags;
  161. int IndLevel;
  162. int RetIndLevel;
  163. int Size;
  164. int iPackSize;
  165. char *BasicType;
  166. char *BaseName;
  167. char *FuncRet;
  168. char *FuncMod;
  169. char *TypeName;
  170. char *Methods;
  171. char *IMethods;
  172. char *BaseType;
  173. GUID gGuid;
  174. DWORD dwVTBLSize;
  175. DWORD dwVTBLOffset;
  176. int TypeId;
  177. int LineNumber;
  178. DWORD dwScopeLevel;
  179. struct _KnownTypesInfo *pktBase; // a cache, used by genthnk
  180. struct _KnownTypesInfo *pktRet; // a cache, used by genthnk
  181. int SizeMembers; // size of Members[], in bytes
  182. char *Members;
  183. char *FileName;
  184. PMEMBERINFO pmeminfo;
  185. PFUNCINFO pfuncinfo;
  186. DWORD dwArrayElements;
  187. DWORD dwBaseSize;
  188. struct _KnownTypesInfo *pTypedefBase;
  189. DWORD dwCurrentPacking;
  190. char Names[1];
  191. } KNOWNTYPES, *PKNOWNTYPES;
  192. typedef struct _RBTree {
  193. PKNOWNTYPES pRoot;
  194. PKNOWNTYPES pLastNodeInserted;
  195. } RBTREE, *PRBTREE;
  196. typedef struct _DefaultBasicTypes {
  197. char *BasicType;
  198. }DEFBASICTYPES, *PDEFBASICTYPES;
  199. typedef struct _TypesInfo {
  200. ULONG Flags;
  201. int IndLevel; // indirection level
  202. int Size; // size of the type in bytes
  203. int iPackSize; // packing size
  204. char BasicType[MAX_PATH];
  205. char BaseName[MAX_PATH];
  206. char FuncRet[MAX_PATH];
  207. char FuncMod[MAX_PATH];
  208. char TypeName[MAX_PATH]; // typedef or struc name
  209. TYPEKIND TypeKind; // how to interpret Members[] data
  210. PFUNCINFO pfuncinfo; // if TypeKind==TypeKindFunc, ptr to first FUNCINFO
  211. int RetIndLevel; // if TypeKind==TypeKindFunc, indlevel of return type for function
  212. DWORD dwMemberSize; // #bytes used in Members array
  213. char Members[FUNCMEMBERSIZE]; // stores either MEMBERINFOs or FUNCINFOs
  214. // Added to support automatic retrival of COM objects
  215. // If a class or struct is found with virtual methods, an extra VTLB member
  216. // is created at the top.
  217. // Note: a class has a VTLB if virtual methods are found or base class
  218. // has virtual methods
  219. // A type is a COM object if it is IUnknown or it derives from a COM object
  220. GUID gGuid; // Guid for this object if
  221. DWORD dwVTBLSize; // Total size of the VTBL
  222. DWORD dwVTBLOffset; // Offset of VTLB from parent
  223. char Methods[MEMBERMETHODSSIZE]; // Names of methods
  224. char IMethods[MEMBERMETHODSSIZE]; // Names of methods not inherited
  225. char BaseType[MAX_PATH]; // Name of the base class
  226. //////////////////////////////////////////////////////////////////////
  227. // Added to support reordering of definations later
  228. //////////////////////////////////////////////////////////////////////
  229. int TypeId; //is actually a defination ID
  230. char FileName[MAX_PATH];
  231. int LineNumber;
  232. DWORD dwCurrentPacking; // Packing level when structure defined
  233. DWORD dwScopeLevel;
  234. DWORD dwArrayElements; // If this is an array, the number of elements
  235. DWORD dwBaseSize; // Base size before it is multiplied for the array
  236. PKNOWNTYPES pTypedefBase;
  237. } TYPESINFO, *PTYPESINFO;
  238. #define BTI_DLLEXPORT 1 // the function decl had __declspec(dllimport)
  239. #define BTI_CONTAINSFUNCPTR 2 // the type contains a function pointer
  240. #define BTI_PTR64 4 // the type is a __ptr64
  241. #define BTI_HASGUID 8 // A guid has been found for this type
  242. #define BTI_ISCOM 16 // This is a COM object
  243. #define BTI_DISCARDABLE 32 // Type is overwriteable
  244. #define BTI_VIRTUALONLY 64 // Contains only virtual methods
  245. #define BTI_ANONYMOUS 128 // Type is anonymous
  246. #define BTI_POINTERDEP 256 // Type is dependent on the standard pointer size
  247. #define BTI_NOTDERIVED 512 // Type is not derived, but a placeholder
  248. #define BTI_ISARRAY 1024 // Element is an array
  249. #define BTI_UNSIGNED 2048 // Used only on default derived types
  250. // Signals that the type is unsigned
  251. #define BTI_INT64DEP 4096 // this is a 8byte integer value that
  252. // might be union as well
  253. // contiguous allocation in a buffer
  254. typedef struct _bufallocinfo {
  255. BYTE *pb; // ptr to buffer pool
  256. DWORD dwSize; // size of buffer pool
  257. DWORD dwLen; // current length of buffer pool
  258. } BUFALLOCINFO;
  259. typedef struct _TokenMatch {
  260. TOKENTYPE Tk;
  261. char *MatchString;
  262. } TOKENMATCH, *PTOKENMATCH;
  263. extern char *TokenString[];
  264. extern TOKENMATCH KeywordList[];
  265. typedef struct _Token {
  266. TOKENTYPE TokenType;
  267. union _TokenName {
  268. char *Name; // filled in only for TokenType==TK_IDENTIFIER or TK_STRING
  269. long Value; // filled in only for TokenType==TK_NUMBER
  270. };
  271. DWORD dwValue; //unsigned version of Value
  272. } TOKEN, *PTOKEN;
  273. #define MAX_CHARS_IN_LINE 4096
  274. #define MAX_TOKENS_IN_STATEMENT 4096
  275. extern TOKEN Tokens[MAX_TOKENS_IN_STATEMENT];
  276. extern int CurrentTokenIndex;
  277. void
  278. ResetLexer(
  279. void
  280. );
  281. char *
  282. LexOneLine(
  283. char *p,
  284. BOOL fStopAtStatement,
  285. BOOL *pfLexDone
  286. );
  287. BOOL
  288. UnlexToText(
  289. char *dest,
  290. int destlen,
  291. int StartToken,
  292. int EndToken
  293. );
  294. void
  295. DumpLexerOutput(
  296. int FirstToken
  297. );
  298. void
  299. HandlePreprocessorDirective(
  300. char *Line
  301. );
  302. TOKENTYPE
  303. ConsumeDirectionOpt(
  304. void
  305. );
  306. TOKENTYPE
  307. ConsumeConstVolatileOpt(
  308. void
  309. );
  310. PMEMBERINFO
  311. AllocMemInfoAndLink(
  312. BUFALLOCINFO *pbufallocinfo,
  313. PMEMBERINFO pmeminfo
  314. );
  315. PFUNCINFO
  316. AllocFuncInfoAndLink(
  317. BUFALLOCINFO *pbufallocinfo,
  318. PFUNCINFO pfuncinfo
  319. );
  320. DWORD
  321. SizeOfMultiSz(
  322. char *c
  323. );
  324. BOOL
  325. CatMultiSz(
  326. char *dest,
  327. char *source,
  328. DWORD dwMaxSize
  329. );
  330. BOOL
  331. AppendToMultiSz(
  332. char *dest,
  333. char *source,
  334. DWORD dwMaxSize
  335. );
  336. BOOL IsInMultiSz(
  337. const char *multisz,
  338. const char *element
  339. );
  340. BOOL
  341. ConvertStringToGuid(
  342. const char *pString,
  343. GUID *pGuid
  344. );
  345. //
  346. // Inline code
  347. #define iswhitespace(c) ((c == ' ') || (c == '\t'))
  348. //
  349. // initialize BUFALLOCINFO structure
  350. _inline void BufAllocInit(BUFALLOCINFO *pbufallocinfo,
  351. BYTE *pb, DWORD dwSize, DWORD dwLen)
  352. {
  353. pbufallocinfo->pb = pb;
  354. pbufallocinfo->dwSize = dwSize;
  355. pbufallocinfo->dwLen = dwLen;
  356. }
  357. //
  358. // allocate memory from buffer
  359. _inline void *BufAllocate(BUFALLOCINFO *pbufallocinfo, DWORD dwLen)
  360. {
  361. void *pv = NULL;
  362. DWORD dwNewLen;
  363. // Pad to quadword alignment, like malloc does, so RISC builds don't
  364. // take alignment faults.
  365. dwLen = (dwLen+7) & ~7;
  366. dwNewLen = pbufallocinfo->dwLen + dwLen;
  367. if (dwNewLen < pbufallocinfo->dwSize)
  368. {
  369. pv = &pbufallocinfo->pb[pbufallocinfo->dwLen];
  370. pbufallocinfo->dwLen = dwNewLen;
  371. }
  372. return(pv);
  373. }
  374. //
  375. // determine if we could allocate from buffer pool
  376. _inline BOOL BufCanAllocate(BUFALLOCINFO *pbufallocinfo, DWORD dwLen)
  377. {
  378. return( (pbufallocinfo->dwLen + dwLen) < pbufallocinfo->dwSize);
  379. }
  380. //
  381. // get pointer to current free area
  382. _inline void *BufPointer(BUFALLOCINFO *pbufallocinfo)
  383. {
  384. return(&pbufallocinfo->pb[pbufallocinfo->dwLen]);
  385. }
  386. //
  387. // get remaining space in buffer
  388. _inline DWORD BufGetFreeSpace(BUFALLOCINFO *pbufallocinfo)
  389. {
  390. return pbufallocinfo->dwSize - pbufallocinfo->dwLen;
  391. }
  392. _inline char *SkipWhiteSpace(char *s)
  393. {
  394. while (iswhitespace(*s) && (*s != 0)) {
  395. s++;
  396. }
  397. return(s);
  398. }
  399. __inline void
  400. ConsumeToken(
  401. void
  402. )
  403. {
  404. if (Tokens[CurrentTokenIndex].TokenType != TK_EOS) {
  405. CurrentTokenIndex++;
  406. }
  407. }
  408. __inline PTOKEN
  409. CurrentToken(
  410. void
  411. )
  412. {
  413. return &Tokens[CurrentTokenIndex];
  414. }
  415. //
  416. // function prototypes
  417. char *SkipKeyWord(char *pSrc, char *pKeyWord);
  418. BOOL IsSeparator(char ch);
  419. BOOL IsTokenSeparator(void);
  420. size_t CopyToken(char *pDst, char *pSrc, size_t Size);
  421. char *GetNextToken(char *pSrc);
  422. void DumpKnownTypes(PKNOWNTYPES pKnownTypes, FILE *fp);
  423. void DumpTypesInfo(PTYPESINFO pTypesInfo, FILE *fp);
  424. void FreeTypesList(PRBTREE HeadList);
  425. void __cdecl ErrMsg(char *pch, ...);
  426. void __cdecl ExitErrMsg(BOOL bSysError, char *pch, ...);
  427. void __cdecl DbgPrintf(char *pch, ...);
  428. char *ReadEntireFile(HANDLE hFile, DWORD *pBytesRead);
  429. HANDLE CreateTempFile(VOID);
  430. BOOL
  431. ParseTypes(
  432. PRBTREE pTypesList,
  433. PTYPESINFO pTypesInfo,
  434. PKNOWNTYPES *ppKnownTypes
  435. );
  436. PFUNCINFO
  437. RelocateTypesInfo(
  438. char *dest,
  439. PTYPESINFO src
  440. );
  441. void ParseIndirection(
  442. DWORD *pIndLevel,
  443. DWORD *pdwSize,
  444. DWORD *pFlags,
  445. PTOKENTYPE tkPrePostMod,
  446. PTOKENTYPE tkPostMod
  447. );
  448. PKNOWNTYPES
  449. GetNameFromTypesList(
  450. PRBTREE pHeadList,
  451. char *pTypeName
  452. );
  453. PDEFBASICTYPES
  454. GetDefBasicType(
  455. char *pBasicType
  456. );
  457. PKNOWNTYPES
  458. AddToTypesList(
  459. PRBTREE pHeadList,
  460. PTYPESINFO pTypesInfo
  461. );
  462. BOOL
  463. AddOpenFile(
  464. char *FileName,
  465. FILE *fp,
  466. HANDLE hFile
  467. );
  468. void
  469. DelOpenFile(
  470. FILE *fp,
  471. HANDLE hFile
  472. );
  473. void
  474. CloseOpenFileList(
  475. BOOL DeleteFiles
  476. );
  477. BOOL
  478. ConsoleControlHandler(
  479. DWORD dwCtrlType
  480. );
  481. //
  482. // global vars
  483. extern char szVARGS[];
  484. extern char szNULL[];
  485. extern char szCONST[];
  486. extern char szVOLATILE[];
  487. extern char szREGISTER[];
  488. extern char szEXTERN[];
  489. extern char szCDECL[];
  490. extern char sz_CDECL[];
  491. extern char szSTDCALL[];
  492. extern char sz__FASTCALL[];
  493. extern char szUNALIGNED[];
  494. extern char szTYPEDEF[];
  495. extern char szCHAR[];
  496. extern char szINT[];
  497. extern char szLONG[];
  498. extern char szSHORT[];
  499. extern char szDOUBLE[];
  500. extern char szENUM[];
  501. extern char szFLOAT[];
  502. extern char szSTRUCT[];
  503. extern char szUNION[];
  504. extern char szVOID[];
  505. extern char szINT64[];
  506. extern char sz_INT64[];
  507. extern char szFUNC[];
  508. extern char szSIGNED[];
  509. extern char szUNSIGNED[];
  510. extern char szFUNCTIONS[];
  511. extern char szSTRUCTURES[];
  512. extern char szTYPEDEFS[];
  513. extern char szPragma[];
  514. extern char szPack[];
  515. extern char szPush[];
  516. extern char szPop[];
  517. extern char szSTATIC[];
  518. extern char szUNSIGNEDCHAR[];
  519. extern char szUNSIGNEDSHORT[];
  520. extern char szUNSIGNEDLONG[];
  521. extern CHAR szINOUT[];
  522. extern CHAR szIN[];
  523. extern CHAR szOUT[];
  524. extern CHAR szVTBL[];
  525. extern char szGUID[];
  526. extern BOOLEAN bDebug;
  527. extern BOOLEAN bExitClean;
  528. extern PVOID (*fpTypesListMalloc)(ULONG Len);
  529. PKNOWNTYPES GetBasicType(
  530. char *sTypeName,
  531. PRBTREE TypeDefsList,
  532. PRBTREE StructsList);
  533. void ReplaceInTypesList(PKNOWNTYPES pKnownTypes, PTYPESINFO pTypesInfo);
  534. HANDLE CreateAllocCvmHeap(ULONG_PTR uBaseAddress,
  535. ULONG_PTR uReserveSize,
  536. ULONG_PTR uRegionSize,
  537. ULONG_PTR uUncomitted,
  538. ULONG_PTR uUnReserved,
  539. ULONG_PTR uAvailable);
  540. PVOID GetCvmHeapBaseAddress(HANDLE hCvmHeap);
  541. PVOID
  542. AllocCvm(HANDLE hCvmHeap,
  543. ULONG_PTR Size
  544. );
  545. void DeleteAllocCvmHeap(HANDLE hCvmHeap);
  546. // This structure is the first thing allocated within the CvmHeap. It contains
  547. // the roots of all data stored within the heap.
  548. typedef struct _CvmHeapHeader {
  549. ULONG Version;
  550. ULONG_PTR BaseAddress;
  551. RBTREE FuncsList;
  552. RBTREE StructsList;
  553. RBTREE TypeDefsList;
  554. KNOWNTYPES NIL;
  555. } CVMHEAPHEADER, *PCVMHEAPHEADER;
  556. PVOID GetCvmHeapAvailable(HANDLE hCvmHeap);
  557. // from redblack.c:
  558. VOID
  559. RBInsert(
  560. PRBTREE proot,
  561. PKNOWNTYPES x
  562. );
  563. PKNOWNTYPES
  564. RBFind(
  565. PRBTREE proot,
  566. PVOID addr
  567. );
  568. PKNOWNTYPES
  569. RBDelete(
  570. PRBTREE proot,
  571. PKNOWNTYPES z
  572. );
  573. VOID
  574. RBInitTree(
  575. PRBTREE proot
  576. );
  577. extern PKNOWNTYPES NIL;
  578. //
  579. // Use these allocators instead of malloc/free
  580. //
  581. PVOID GenHeapAlloc(INT_PTR Len);
  582. void GenHeapFree(PVOID pv);
  583. BOOL
  584. IsDefinedPointerDependent(
  585. char *pName
  586. );
  587. PCHAR
  588. IsDefinedPtrToPtrDependent(
  589. IN char *pName
  590. );
  591. BOOL
  592. ClosePpmFile(
  593. BOOL bExitFailure
  594. );
  595. PCVMHEAPHEADER
  596. MapPpmFile(
  597. char *sPpmfile,
  598. BOOL bExitFailure
  599. );
  600. char *GetHostPointerName(BOOL bIsPtr64);
  601. char *GetHostBasicTypeName(PKNOWNTYPES pkt);
  602. char *GetHostTypeName(PKNOWNTYPES pkt, char *pBuffer);