CVTYPES.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2. **                                                                      **
  3. **                          CVTYPES.H                                   **
  4. **                                                                      **
  5. **************************************************************************
  6. **                                                                      **
  7. **  This file contains a common set of base type declarations           **
  8. **  between multiple CodeView projects.  If you touch this in one       **
  9. **  project be sure to copy it to all other projects as well.           **
  10. **                                                                      **
  11. *************************************************************************/
  12. #ifndef CV_PROJECT_BASE_TYPES
  13. #define CV_PROJECT_BASE_TYPES
  14. #include "dbapiver.h"
  15. #ifndef _CV_INFO_INCLUDED
  16. #include "cvinfo.h"
  17. #endif
  18. #if !defined(OSDEBUG4)
  19. /*
  20. **  HDEP is a machine dependent size and passes as a general handle.
  21. **  HIND is a machine independent sized handle and is used for things
  22. **      which are passed between machines
  23. **
  24. */
  25. #ifdef QCWIN32
  26.     typedef HANDLE      HDEP;
  27.     typedef DWORD       HIND;
  28. #else
  29.     DECLARE_HANDLE(HDEP);
  30.     DECLARE_HANDLE(HIND);
  31. #endif // QCWIN32
  32. typedef HDEP FAR *      LPHDEP;
  33. typedef HIND FAR *      LPHIND;
  34. /* HMEM should be avoided (HDEP should be used instead), but for now we'll
  35. ** define it for backwards compatibility.
  36. */
  37. typedef HDEP            HMEM;
  38. typedef HMEM FAR *      LPHMEM;
  39. #endif // !OSDEBUG4
  40. /* These values are used in the SegType field of the Expression Evaluator's
  41. ** TI structure, and as the third parameter to the Symbol Handler's
  42. ** SHGetNearestHsym function.
  43. */
  44. #define EECODE          0x01
  45. #define EEDATA          0x02
  46. #define EEANYSEG        0xFFFF
  47. #if !defined(OSDEBUG4)
  48. /*
  49. **  HPID
  50. **  HTID
  51. **
  52. */
  53. DECLARE_HANDLE(HPID);
  54. DECLARE_HANDLE(HTID);
  55. typedef USHORT      SEGMENT;    // 32-bit compiler doesn't like "_segment"
  56. typedef ULONG       UOFF32;
  57. typedef USHORT      UOFF16;
  58. typedef LONG        OFF32;
  59. typedef SHORT       OFF16;
  60. #if defined (ADDR_16)
  61.     // we are operating as a 16:16 evaluator only
  62.     // the address packet will be defined as an offset and a 16 bit filler
  63.     typedef OFF16       OFFSET;
  64.     typedef UOFF16      UOFFSET;
  65. #else
  66.     typedef OFF32       OFFSET;
  67.     typedef UOFF32      UOFFSET;
  68. #endif // ADDR_16
  69. typedef UOFFSET FAR *LPUOFFSET;
  70. //  address definitions
  71. //  the address packet is always a 16:32 address.
  72. typedef struct {
  73.     UOFF32          off;
  74.     SEGMENT         seg;
  75. } address_t;
  76. #define SegAddrT(a)   ((a).seg)
  77. #define OffAddrT(a)   ((a).off)
  78. #define AddrTInit(paddrT,segSet,offSet)     
  79.         {                                   
  80.             SegAddrT(*(paddrT)) = segSet;   
  81.             OffAddrT(*(paddrT)) = offSet;   
  82.         }
  83. typedef struct {
  84.     BYTE    fFlat   :1;         // true if address is flat
  85.     BYTE    fOff32  :1;         // true if offset is 32 bits
  86.     BYTE    fIsLI   :1;         // true if segment is linker index
  87.     BYTE    fReal   :1;         // x86: is segment a real mode address
  88.     BYTE    unused  :4;         // unused
  89. } memmode_t;
  90. #define MODE_IS_FLAT(m)     ((m).fFlat)
  91. #define MODE_IS_OFF32(m)    ((m).fOff32)
  92. #define MODE_IS_LI(m)       ((m).fIsLI)
  93. #define MODE_IS_REAL(m)     ((m).fReal)
  94. #define ModeInit(pmode,fFlat,fOff32,fLi,fRealSet)   
  95.         {                                           
  96.             MODE_IS_FLAT(*(pmode))    = fFlat;      
  97.             MODE_IS_OFF32(*(pmode))   = fOff32;     
  98.             MODE_IS_LI(*(pmode))      = fLi;        
  99.             MODE_IS_REAL(*(pmode))    = fRealSet;   
  100.         }
  101. typedef HIND    HEMI;           // Executable Module Index
  102. typedef struct ADDR {
  103.     address_t       addr;
  104.     HEMI            emi;
  105.     memmode_t       mode;
  106. } ADDR;             //* An address specifier
  107. typedef ADDR FAR *  PADDR;      //* REVIEW: BUG: shouldn't be explicitly far
  108. typedef ADDR FAR *  LPADDR;
  109. #define addrAddr(a)     ((a).addr)
  110. #define emiAddr(a)      ((a).emi)
  111. #define modeAddr(a)     ((a).mode)
  112. #define AddrInit(paddr,emiSet,segSet,offSet,fFlat,fOff32,fLi,fRealSet)  
  113.         {                                                               
  114.             AddrTInit( &(addrAddr(*(paddr))), segSet, offSet );         
  115.             emiAddr(*(paddr)) = emiSet;                                 
  116.             ModeInit( &(modeAddr(*(paddr))),fFlat,fOff32,fLi,fRealSet); 
  117.         }
  118. #define ADDR_IS_FLAT(a)     (MODE_IS_FLAT(modeAddr(a)))
  119. #define ADDR_IS_OFF32(a)    (MODE_IS_OFF32(modeAddr(a)))
  120. #define ADDR_IS_LI(a)       (MODE_IS_LI(modeAddr(a)))
  121. #define ADDR_IS_REAL(a)     (MODE_IS_REAL(modeAddr(a)))
  122. #define ADDRSEG16(a)   { ADDR_IS_FLAT(a) = FALSE; ADDR_IS_OFF32(a) = FALSE; }
  123. #define ADDRSEG32(a)   { ADDR_IS_FLAT(a) = FALSE; ADDR_IS_OFF32(a) = TRUE;  }
  124. #define ADDRLIN32(a)   { ADDR_IS_FLAT(a) = TRUE;  ADDR_IS_OFF32(a) = TRUE;  }
  125. #define GetAddrSeg(a)   ((a).addr.seg)
  126. #define GetAddrOff(a)   ((a).addr.off)
  127. #define SetAddrSeg(a,s) ((a)->addr.seg=s)
  128. #define SetAddrOff(a,o) ((a)->addr.off=o)
  129. // Because an ADDR has some filler areas (in the mode and the address_t),
  130. // it's bad to use memcmp two ADDRs to see if they're equal.  Use this
  131. // macro instead.  (I deliberately left out the test for fAddr32(), because
  132. // I think it's probably not necessary when comparing.)
  133. #define FAddrsEq(a1, a2)                        
  134.     (                                           
  135.     GetAddrOff(a1) == GetAddrOff(a2) &&         
  136.     GetAddrSeg(a1) == GetAddrSeg(a2) &&         
  137.     ADDR_IS_LI(a1) == ADDR_IS_LI(a2) &&         
  138.     emiAddr(a1)    == emiAddr(a2)               
  139.     )
  140. //      address definitions
  141. //      the address packet is always a 16:32 address.
  142. #endif // !OSDEBUG4
  143. typedef struct FRAME {
  144.     SEGMENT         SS;
  145.     address_t       BP;
  146.     SEGMENT         DS;
  147.     memmode_t       mode;
  148.     HPID            PID;
  149.     HTID            TID;
  150.     address_t       SLP;    // Static link pointer
  151. } FRAME;
  152. typedef FRAME FAR *PFRAME;      //* REVIEW: BUG: shouldn't be explicitly far
  153. #define addrFrameSS(a)     ((a).SS)
  154. #define addrFrameBP(a)     ((a).BP)
  155. #define GetFrameBPOff(a)   ((a).BP.off)
  156. #define GetFrameBPSeg(a)   ((a).BP.seg)
  157. #define SetFrameBPOff(a,o) ((a).BP.off = o)
  158. #define SetFrameBPSeg(a,s) ((a).BP.seg = s)
  159. #define GetFrameSLPOff(a)   ((a).SLP.off)
  160. #define GetFrameSLPSeg(a)   ((a).SLP.seg)
  161. #define SetFrameSLPOff(a,o) ((a).SLP.off = o)
  162. #define SetFrameSLPSeg(a,s) ((a).SLP.seg = s)
  163. #define FRAMEMODE(a)       ((a).mode)
  164. #define FRAMEPID(a)        ((a).PID)
  165. #define FRAMETID(a)        ((a).TID)
  166. #define FrameFlat(a)       MODE_IS_FLAT((a).mode)
  167. #define FrameOff32(a)      MODE_IS_OFF32((a).mode)
  168. #define FrameReal(a)       MODE_IS_REAL((a).mode)
  169. #if !defined(OSDEBUG4)
  170. /*
  171. ** A few public types related to the linked list manager
  172. */
  173. typedef HDEP        HLLI;       //* A handle to a linked list
  174. typedef HIND        HLLE;       //* A handle to a linked list entry
  175. typedef void (FAR PASCAL * LPFNKILLNODE)( LPV );
  176. typedef int  (FAR PASCAL * LPFNFCMPNODE)( LPV, LPV, LONG );
  177. typedef USHORT      LLF;        //* Linked List Flags
  178. #define llfNull             (LLF)0x0
  179. #define llfAscending        (LLF)0x1
  180. #define llfDescending       (LLF)0x2
  181. #endif // !OSDEBUG4
  182. /*
  183. **  EXPCALL indicates that a function should use whatever calling
  184. **      convention is preferable for exported functions.  Under most
  185. **      operating systems, this is PASCAL, because the name will be
  186. **      left undecorated if it's PASCAL; but under NT and Win32s,
  187. **      PASCAL is #defined to __stdcall, but _cdecl will leave the
  188. **      name (mostly) undecorated.  (It will add an underscore, but
  189. **      that's desirable under Win32s and NT, because you can't
  190. **      export a name that *doesn't* have an underscore.)
  191. **
  192. **      Furthermore, we use _cdecl instead of CDECL because the current
  193. **      NT header files don't necessarily define CDECL to _cdecl.
  194. **
  195. **      EXPCALL does NOT do everything that may be necessary for an
  196. **      exported function (e.g. LOADDS, EXPORT, and FAR), because
  197. **      it's too hard at the moment to clean up all the uses of
  198. **      EXPCALL to use the same modifiers.  Someday.
  199. */
  200. #if HOST32
  201.     #define EXPCALL     __stdcall
  202. #else
  203.     #define EXPCALL     PASCAL
  204. #endif
  205. typedef struct _MEMINFO {
  206.     ADDR addr;
  207.     ADDR addrAllocBase;
  208.     UOFF32 uRegionSize;
  209.     DWORD dwProtect;
  210.     DWORD dwState;
  211.     DWORD dwType;
  212. } MEMINFO;
  213. typedef MEMINFO FAR * LPMEMINFO;
  214. /*
  215. **      Return values for mtrcEndian -- big or little endian -- which
  216. **      byte is [0] most or least significat byte
  217. */
  218. enum _END {
  219.     endBig,
  220.     endLittle
  221. };
  222. typedef DWORD END;
  223. enum _MPT {
  224.     mptix86,
  225.     mptm68k,
  226.     mptdaxp,
  227.     mptmips,
  228.     mptmppc,
  229.     mptUnknown
  230. };
  231. typedef DWORD MPT;
  232. #if !defined(OSDEBUG4)
  233. #include <dbgver.h>
  234. #endif // !OSDEBUG4
  235. #endif // CV_PROJECT_BASE_TYPES