CVINFO.H
/***    cvinfo.h - Generic CodeView information definitions 
 * 
 *      Structures, constants, etc. for accessing and interpreting 
 *      CodeView information. 
 * 
 */ 
 
 
/***    The master copy of this file resides in the CodeView project. 
 *      All Microsoft projects are required to use the master copy without 
 *      modification.  Modification of the master version or a copy 
 *      without consultation with all parties concerned is extremely 
 *      risky. 
 * 
 *      The projects known to use this version (4.00.00) are: 
 * 
 *          Codeview 
 *          Sequoia 
 *          C7.00 (all passes) 
 *          Cvpack 
 *          Cvdump 
 */ 
 
#ifndef _CV_INFO_INCLUDED 
#define _CV_INFO_INCLUDED 
 
#pragma pack(1) 
typedef unsigned long   CV_uoff32_t; 
typedef          long   CV_off32_t; 
typedef unsigned short  CV_uoff16_t; 
typedef          short  CV_off16_t; 
typedef unsigned short  CV_typ_t; 
 
 
 
#ifdef _REAL10 
typedef struct { 
    char b[10]; 
} REAL10; 
#endif 
 
#define CV_SIGNATURE_C6         0L /* Actual signature is >64K */ 
#define CV_SIGNATURE_C7         1L /* First explicit signature */ 
#define CV_SIGNATURE_RESERVED   2L /* All signatures from 2 to 64K are reserved */ 
 
#define CV_MAXOFFSET   0xffffffff 
 
/**     CodeView Symbol and Type OMF type information is broken up into two 
 *      ranges.  Type indices less than 0x1000 describe frequently used 
 *      type information that is frequently used.  Type indices above 
 *      0x1000 are used to describe more complex features such as function, 
 *      arrays and structures. 
 */ 
 
 
 
 
/**     Primitive types have predefined meaning that is encoded in the 
 *      values of the various bit fields in the value. 
 * 
 *      A CodeView primitive type is defined as: 
 * 
 *      1 1 
 *      1 089  7654  3  210 
 *      r mode type  r  sub 
 * 
 *      Where 
 *          mode is the pointer mode 
 *          type is a type indicator 
 *          sub  is a subtype enumeration 
 *          r    is a reserved field 
 * 
 *      See Microsoft Symbol and Type OMF (Version 4.0) for more 
 *      information. 
 */ 
 
 
#define CV_MMASK        0x700   /* mode mask */ 
#define CV_TMASK        0x0f0   /* type mask */ 
#define CV_SMASK        0x007   /* subtype mask */ 
 
#define CV_MSHIFT       8       /* primitive mode right shift count */ 
#define CV_TSHIFT       4       /* primitive type right shift count */ 
#define CV_SSHIFT       0       /* primitive subtype right shift count */ 
 
/* 
 *      macros to extract primitive mode, type and size 
 */ 
 
#define CV_MODE(typ)    (((typ) & CV_MMASK) >> CV_MSHIFT) 
#define CV_TYPE(typ)    (((typ) & CV_TMASK) >> CV_TSHIFT) 
#define CV_SUBT(typ)    (((typ) & CV_SMASK) >> CV_SSHIFT) 
 
/* 
 *      macros to insert new primitive mode, type and size 
 */ 
 
#define CV_NEWMODE(typ, nm)     (((typ) & ~CV_MMASK) | ((nm) << CV_MSHIFT)) 
#define CV_NEWTYPE(typ, nt)     (((typ) & ~CV_TMASK) | ((nt) << CV_TSHIFT)) 
#define CV_NEWSUBT(typ, ns)     (((typ) & ~CV_SMASK) | ((ns) << CV_SSHIFT)) 
 
/* 
 *      pointer mode enumeration values 
 */ 
 
typedef enum CV_prmode_e { 
    CV_TM_DIRECT = 0,           /* mode is not a pointer */ 
    CV_TM_NPTR   = 1,           /* mode is a near pointer */ 
    CV_TM_FPTR   = 2,           /* mode is a far pointer */ 
    CV_TM_HPTR   = 3,           /* mode is a huge pointer */ 
    CV_TM_NPTR32 = 4,           /* mode is a 32 bit near pointer */ 
    CV_TM_FPTR32 = 5,           /* mode is a 32 bit far pointer */ 
    CV_TM_NPTR64 = 6            /* mode is a 64 bit near pointer */ 
} CV_prmode_e; 
 
/* 
 *      type enumeration values 
 */ 
 
typedef enum CV_type_e { 
    CV_SPECIAL      = 0x00,     /* special type size values */ 
    CV_SIGNED       = 0x01,     /* signed integral size values */ 
    CV_UNSIGNED     = 0x02,     /* unsigned integral size values */ 
    CV_BOOLEAN      = 0x03,     /* Boolean size values */ 
    CV_REAL         = 0x04,     /* real number size values */ 
    CV_COMPLEX      = 0x05,     /* complex number size values */ 
    CV_SPECIAL2     = 0x06,     /* second set of special types */ 
    CV_INT          = 0x07,     /* integral (int) values */ 
    CV_CVRESERVED   = 0x0f 
} CV_type_e; 
 
/* 
 *      subtype enumeration values for CV_SPECIAL 
 */ 
 
typedef enum CV_special_e { 
    CV_SP_NOTYPE    = 0x00, 
    CV_SP_ABS       = 0x01, 
    CV_SP_SEGMENT   = 0x02, 
    CV_SP_VOID      = 0x03, 
    CV_SP_CURRENCY  = 0x04, 
    CV_SP_NBASICSTR = 0x05, 
    CV_SP_FBASICSTR = 0x06, 
    CV_SP_NOTTRANS  = 0x07 
} CV_special_e; 
 
/* 
 *      subtype enumeration values for CV_SPECIAL2 
 */ 
 
 
typedef enum CV_special2_e { 
    CV_S2_BIT       = 0x00, 
    CV_S2_PASCHAR   = 0x01      /* Pascal CHAR */ 
} CV_special2_e; 
 
/* 
 *      subtype enumeration values for CV_SIGNED, CV_UNSIGNED and CV_BOOLEAN 
 */ 
 
typedef enum CV_integral_e { 
    CV_IN_1BYTE     = 0x00, 
    CV_IN_2BYTE     = 0x01, 
    CV_IN_4BYTE     = 0x02, 
    CV_IN_8BYTE     = 0x03 
} CV_integral_e; 
 
/* 
 *      subtype enumeration values for CV_REAL and CV_COMPLEX 
 */ 
 
typedef enum CV_real_e { 
    CV_RC_REAL32    = 0x00, 
    CV_RC_REAL64    = 0x01, 
    CV_RC_REAL80    = 0x02, 
    CV_RC_REAL128   = 0x03, 
    CV_RC_REAL48    = 0x04 
} CV_real_e; 
 
/* 
 *      subtype enumeration values for CV_INT (really int) 
 */ 
 
typedef enum CV_int_e { 
    CV_RI_CHAR      = 0x00, 
    CV_RI_WCHAR     = 0x01, 
    CV_RI_INT2      = 0x02, 
    CV_RI_UINT2     = 0x03, 
    CV_RI_INT4      = 0x04, 
    CV_RI_UINT4     = 0x05, 
    CV_RI_INT8      = 0x06, 
    CV_RI_UINT8     = 0x07 
} CV_int_e; 
 
/* 
 *      macros to check the type of a primitive 
 */ 
 
#define CV_TYP_IS_DIRECT(typ)   (CV_MODE(typ) == CV_TM_DIRECT) 
#define CV_TYP_IS_PTR(typ)      (CV_MODE(typ) != CV_TM_DIRECT) 
#define CV_TYP_IS_NPTR(typ)     (CV_MODE(typ) == CV_TM_NPTR) 
#define CV_TYP_IS_FPTR(typ)     (CV_MODE(typ) == CV_TM_FPTR) 
#define CV_TYP_IS_HPTR(typ)     (CV_MODE(typ) == CV_TM_HPTR) 
#define CV_TYP_IS_NPTR32(typ)   (CV_MODE(typ) == CV_TM_NPTR32) 
#define CV_TYP_IS_FPTR32(typ)   (CV_MODE(typ) == CV_TM_FPTR32) 
 
#define CV_TYP_IS_SIGNED(typ)(((CV_TYPE(typ) == CV_SIGNED)  && \ 
                                        CV_TYP_IS_DIRECT(typ)) || \ 
                                        (typ == T_INT2)        || \ 
                                        (typ == T_INT4)        || \ 
                                        (typ == T_INT8)        || \ 
                                        (typ == T_RCHAR)) 
 
#define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && \ 
                                         CV_TYP_IS_DIRECT(typ)) || \ 
                                         (typ == T_UINT2)       || \ 
                                         (typ == T_UINT4)       || \ 
                                         (typ == T_UINT8)       || \ 
                                         (typ == T_RCHAR)) 
 
#define CV_TYP_IS_REAL(typ)     ((CV_TYPE(typ) == CV_REAL)  && CV_TYP_IS_DIRECT(typ)) 
 
#define CV_FIRST_NONPRIM 0x1000 
#define CV_IS_PRIMITIVE(typ)       ((typ) < CV_FIRST_NONPRIM) 
 
 
 
/* 
 *      selected values for type_index - for a more complete definition, see 
 *      Microsoft Symbol and Type OMF document 
 */ 
 
/* 
 *      Special Types 
 */ 
 
#define T_NOTYPE        0x0000  /* uncharacterized type (no type) */ 
#define T_ABS           0x0001  /* absolute symbol */ 
#define T_SEGMENT       0x0002  /* segment type */ 
#define T_VOID          0x0003  /* void */ 
#define T_PVOID         0x0103  /* near pointer to void */ 
#define T_PFVOID        0x0203  /* far pointer to void */ 
#define T_PHVOID        0x0303  /* huge pointer to void */ 
#define T_32PVOID       0x0403  /* 16:32 near pointer to void */ 
#define T_32PFVOID      0x0503  /* 16:32 far pointer to void */ 
#define T_CURRENCY      0x0004  /* BASIC 8 byte currency value */ 
#define T_NBASICSTR     0x0005  /* Near BASIC string */ 
#define T_FBASICSTR     0x0006  /* Far BASIC string */ 
#define T_NOTTRANS      0x0007  /* type not translated by cvpack */ 
#define T_BIT           0x0060  /* bit */ 
#define T_PASCHAR       0x0061  /* Pascal CHAR */ 
 
/* 
 *      Character types 
 */ 
 
#define T_CHAR          0x0010  /* 8 bit signed */ 
#define T_UCHAR         0x0020  /* 8 bit unsigned */ 
#define T_PCHAR         0x0110  /* near pointer to 8 bit signed */ 
#define T_PUCHAR        0x0120  /* near pointer to 8 bit unsigned */ 
#define T_PFCHAR        0x0210  /* far pointer to 8 bit signed */ 
#define T_PFUCHAR       0x0220  /* far pointer to 8 bit unsigned */ 
#define T_PHCHAR        0x0310  /* huge pointer to 8 bit signed */ 
#define T_PHUCHAR       0x0320  /* huge pointer to 8 bit unsigned */ 
#define T_32PCHAR       0x0410  /* 16:32 near pointer to 8 bit signed */ 
#define T_32PUCHAR      0x0420  /* 16:32 near pointer to 8 bit unsigned */ 
#define T_32PFCHAR      0x0510  /* 16:32 far pointer to 8 bit signed */ 
#define T_32PFUCHAR     0x0520  /* 16:32 far pointer to 8 bit unsigned */ 
 
/* 
 *      really a character types 
 */ 
 
#define T_RCHAR         0x0070  /* really a char */ 
#define T_PRCHAR        0x0170  /* 16:16 near pointer to a real char */ 
#define T_PFRCHAR       0x0270  /* 16:16 far pointer to a real char */ 
#define T_PHRCHAR       0x0370  /* 16:16 huge pointer to a real char */ 
#define T_32PRCHAR      0x0470  /* 16:32 near pointer to a real char */ 
#define T_32PFRCHAR     0x0570  /* 16:32 far pointer to a real char */ 
 
/* 
 *      really a wide character types (UNICODE) 
 */ 
 
#define T_WCHAR         0x0071  /* wide char */ 
#define T_PWCHAR        0x0171  /* 16:16 near pointer to a wide char */ 
#define T_PFWCHAR       0x0271  /* 16:16 far pointer to a wide char */ 
#define T_PHWCHAR       0x0371  /* 16:16 huge pointer to a wide char */ 
#define T_32PWCHAR      0x0471  /* 16:32 near pointer to a wide char */ 
#define T_32PFWCHAR     0x0571  /* 16:32 far pointer to a wide char */ 
 
/* 
 *      16 bit short types 
 */ 
 
#define T_SHORT         0x0011  /* 16 bit signed */ 
#define T_USHORT        0x0021  /* 16 bit unsigned */ 
#define T_PSHORT        0x0111  /* near pointer to 16 bit signed */ 
#define T_PUSHORT       0x0121  /* near pointer to 16 bit unsigned */ 
#define T_PFSHORT       0x0211  /* far pointer to 16 bit signed */ 
#define T_PFUSHORT      0x0221  /* far pointer to 16 bit unsigned */ 
#define T_PHSHORT       0x0311  /* huge pointer to 16 bit signed */ 
#define T_PHUSHORT      0x0321  /* huge pointer to 16 bit unsigned */ 
 
#define T_32PSHORT      0x0411  /* 16:32 near pointer to 16 bit signed */ 
#define T_32PUSHORT     0x0421  /* 16:32 near pointer to 16 bit unsigned */ 
#define T_32PFSHORT     0x0511  /* 16:32 far pointer to 16 bit signed */ 
#define T_32PFUSHORT    0x0521  /* 16:32 far pointer to 16 bit unsigned */ 
 
/* 
 *      16 bit int types 
 */ 
 
#define T_INT2          0x0072  /* 16 bit signed int */ 
#define T_UINT2         0x0073  /* 16 bit unsigned int */ 
#define T_PINT2         0x0172  /* near pointer to 16 bit signed int */ 
#define T_PUINT2        0x0173  /* near pointer to 16 bit unsigned int */ 
#define T_PFINT2        0x0272  /* far pointer to 16 bit signed int */ 
#define T_PFUINT2       0x0273  /* far pointer to 16 bit unsigned int */ 
#define T_PHINT2        0x0372  /* huge pointer to 16 bit signed int */ 
#define T_PHUINT2       0x0373  /* huge pointer to 16 bit unsigned int */ 
 
#define T_32PINT2       0x0472  /* 16:32 near pointer to 16 bit signed int */ 
#define T_32PUINT2      0x0473  /* 16:32 near pointer to 16 bit unsigned int */ 
#define T_32PFINT2      0x0572  /* 16:32 far pointer to 16 bit signed int */ 
#define T_32PFUINT2     0x0573  /* 16:32 far pointer to 16 bit unsigned int */ 
 
/* 
 *      32 bit long types 
 */ 
 
#define T_LONG          0x0012  /* 32 bit signed */ 
#define T_ULONG         0x0022  /* 32 bit unsigned */ 
#define T_PLONG         0x0112  /* near pointer to 32 bit signed */ 
#define T_PLONG         0x0112  /* near pointer to 32 bit signed */ 
#define T_PULONG        0x0122  /* near pointer to 32 bit unsigned */ 
#define T_PFLONG        0x0212  /* far pointer to 32 bit signed */ 
#define T_PFULONG       0x0222  /* far pointer to 32 bit unsigned */ 
#define T_PHLONG        0x0312  /* huge pointer to 32 bit signed */ 
#define T_PHULONG       0x0322  /* huge pointer to 32 bit unsigned */ 
 
#define T_32PLONG       0x0412  /* 16:32 near pointer to 32 bit signed */ 
#define T_32PULONG      0x0422  /* 16:32 near pointer to 32 bit unsigned */ 
#define T_32PFLONG      0x0512  /* 16:32 far pointer to 32 bit signed */ 
#define T_32PFULONG     0x0522  /* 16:32 far pointer to 32 bit unsigned */ 
 
/* 
 *      32 bit int types 
 */ 
 
#define T_INT4          0x0074  /* 32 bit signed int */ 
#define T_UINT4         0x0075  /* 32 bit unsigned int */ 
#define T_PINT4         0x0174  /* near pointer to 32 bit signed int */ 
#define T_PUINT4        0x0175  /* near pointer to 32 bit unsigned int */ 
#define T_PFINT4        0x0274  /* far pointer to 32 bit signed int */ 
#define T_PFUINT4       0x0275  /* far pointer to 32 bit unsigned int */ 
#define T_PHINT4        0x0374  /* huge pointer to 32 bit signed int */ 
#define T_PHUINT4       0x0375  /* huge pointer to 32 bit unsigned int */ 
 
#define T_32PINT4       0x0474  /* 16:32 near pointer to 32 bit signed int */ 
#define T_32PUINT4      0x0475  /* 16:32 near pointer to 32 bit unsigned int */ 
#define T_32PFINT4      0x0574  /* 16:32 far pointer to 32 bit signed int */ 
#define T_32PFUINT4     0x0575  /* 16:32 far pointer to 32 bit unsigned int */ 
 
/* 
 *      64 bit quad types 
 */ 
 
 
#define T_QUAD          0x0013  /* 64 bit signed */ 
#define T_UQUAD         0x0023  /* 64 bit unsigned */ 
#define T_PQUAD         0x0113  /* near pointer to 64 bit signed */ 
#define T_PUQUAD        0x0123  /* near pointer to 64 bit unsigned */ 
#define T_PFQUAD        0x0213  /* far pointer to 64 bit signed */ 
#define T_PFUQUAD       0x0223  /* far pointer to 64 bit unsigned */ 
#define T_PHQUAD        0x0313  /* huge pointer to 64 bit signed */ 
#define T_PHUQUAD       0x0323  /* huge pointer to 64 bit unsigned */ 
 
/* 
 *      64 bit int types 
 */ 
 
#define T_INT8          0x0076  /* 64 bit signed int */ 
#define T_UINT8         0x0077  /* 64 bit unsigned int */ 
#define T_PINT8         0x0176  /* near pointer to 64 bit signed int */ 
#define T_PUINT8        0x0177  /* near pointer to 64 bit unsigned int */ 
#define T_PFINT8        0x0276  /* far pointer to 64 bit signed int */ 
#define T_PFUINT8       0x0277  /* far pointer to 64 bit unsigned int */ 
#define T_PHINT8        0x0376  /* huge pointer to 64 bit signed int */ 
#define T_PHUINT8       0x0377  /* huge pointer to 64 bit unsigned int */ 
 
#define T_32PINT8       0x0476  /* 16:32 near pointer to 64 bit signed int */ 
#define T_32PUINT8      0x0477  /* 16:32 near pointer to 64 bit unsigned int */ 
#define T_32PFINT8      0x0576  /* 16:32 far pointer to 64 bit signed int */ 
#define T_32PFUINT8     0x0577  /* 16:32 far pointer to 64 bit unsigned int */ 
 
/* 
 *      32 bit real types 
 */ 
 
#define T_REAL32        0x0040  /* 32 bit real */ 
#define T_PREAL32       0x0140  /* near pointer to 32 bit real */ 
#define T_PFREAL32      0x0240  /* far pointer to 32 bit real */ 
#define T_PHREAL32      0x0340  /* huge pointer to 32 bit real */ 
#define T_32PREAL32     0x0440  /* 16:32 near pointer to 32 bit real */ 
#define T_32PFREAL32    0x0540  /* 16:32 far pointer to 32 bit real */ 
 
/* 
 *      48 bit real types 
 */ 
 
#define T_REAL48        0x0044  /* 48 bit real */ 
#define T_PREAL48       0x0144  /* near pointer to 48 bit real */ 
#define T_PFREAL48      0x0244  /* far pointer to 48 bit real */ 
#define T_PHREAL48      0x0344  /* huge pointer to 48 bit real */ 
#define T_32PREAL48     0x0444  /* 16:32 near pointer to 48 bit real */ 
#define T_32PFREAL48    0x0544  /* 16:32 far pointer to 48 bit real */ 
 
/* 
 *      64 bit real types 
 */ 
 
#define T_REAL64        0x0041  /* 64 bit real */ 
#define T_PREAL64       0x0141  /* near pointer to 64 bit real */ 
#define T_PFREAL64      0x0241  /* far pointer to 64 bit real */ 
#define T_PHREAL64      0x0341  /* huge pointer to 64 bit real */ 
#define T_32PREAL64     0x0441  /* 16:32 near pointer to 64 bit real */ 
#define T_32PFREAL64    0x0541  /* 16:32 far pointer to 64 bit real */ 
 
/* 
 *      80 bit real types 
 */ 
 
#define T_REAL80        0x0042  /* 80 bit real */ 
#define T_PREAL80       0x0142  /* near pointer to 80 bit real */ 
#define T_PFREAL80      0x0242  /* far pointer to 80 bit real */ 
#define T_PHREAL80      0x0342  /* huge pointer to 80 bit real */ 
#define T_32PREAL80     0x0442  /* 16:32 near pointer to 80 bit real */ 
#define T_32PFREAL80    0x0542  /* 16:32 far pointer to 80 bit real */ 
 
/* 
 *      128 bit real types 
 */ 
 
#define T_REAL128       0x0043  /* 128 bit real */ 
#define T_PREAL128      0x0143  /* near pointer to 128 bit real */ 
#define T_PFREAL128     0x0243  /* far pointer to 128 bit real */ 
#define T_PHREAL128     0x0343  /* huge pointer to 128 bit real */ 
#define T_32PREAL128    0x0443  /* 16:32 near pointer to 128 bit real */ 
#define T_32PFREAL128   0x0543  /* 16:32 far pointer to 128 bit real */ 
 
/* 
 *      32 bit complex types 
 */ 
 
#define T_CPLX32        0x0050  /* 32 bit complex */ 
#define T_PCPLX32       0x0150  /* near pointer to 32 bit complex */ 
#define T_PFCPLX32      0x0250  /* far pointer to 32 bit complex */ 
#define T_PHCPLX32      0x0350  /* huge pointer to 32 bit complex */ 
#define T_32PCPLX32     0x0450  /* 16:32 near pointer to 32 bit complex */ 
#define T_32PFCPLX32    0x0550  /* 16:32 far pointer to 32 bit complex */ 
 
/* 
 *      48 bit complex types 
 */ 
 
#define T_CPLX48        0x0054  /* 48 bit complex */ 
#define T_PCPLX48       0x0154  /* near pointer to 48 bit complex */ 
#define T_PFCPLX48      0x0254  /* far pointer to 48 bit complex */ 
#define T_PHCPLX48      0x0354  /* huge pointer to 48 bit complex */ 
#define T_32PCPLX48     0x0454  /* 16:32 near pointer to 48 bit complex */ 
#define T_32PFCPLX48    0x0554  /* 16:32 far pointer to 48 bit complex */ 
 
/* 
 *      64 bit complex types 
 */ 
 
#define T_CPLX64        0x0051  /* 64 bit complex */ 
#define T_PCPLX64       0x0151  /* near pointer to 64 bit complex */ 
#define T_PFCPLX64      0x0251  /* far pointer to 64 bit complex */ 
#define T_PHCPLX64      0x0351  /* huge pointer to 64 bit complex */ 
#define T_32PCPLX64     0x0451  /* 16:32 near pointer to 64 bit complex */ 
#define T_32PFCPLX64    0x0551  /* 16:32 far pointer to 64 bit complex */ 
 
/* 
 *      80 bit complex types 
 */ 
 
#define T_CPLX80        0x0052  /* 80 bit complex */ 
#define T_PCPLX80       0x0152  /* near pointer to 80 bit complex */ 
#define T_PFCPLX80      0x0252  /* far pointer to 80 bit complex */ 
#define T_PHCPLX80      0x0352  /* huge pointer to 80 bit complex */ 
#define T_32PCPLX80     0x0452  /* 16:32 near pointer to 80 bit complex */ 
#define T_32PFCPLX80    0x0552  /* 16:32 far pointer to 80 bit complex */ 
 
/* 
 *      128 bit complex types 
 */ 
 
#define T_CPLX128       0x0053  /* 128 bit complex */ 
#define T_PCPLX128      0x0153  /* near pointer to 128 bit complex */ 
#define T_PFCPLX128     0x0253  /* far pointer to 128 bit complex */ 
#define T_PHCPLX128     0x0353  /* huge pointer to 128 bit real */ 
#define T_32PCPLX128    0x0453  /* 16:32 near pointer to 128 bit complex */ 
#define T_32PFCPLX128   0x0553  /* 16:32 far pointer to 128 bit complex */ 
 
/* 
 *      boolean types 
 */ 
 
#define T_BOOL08        0x0030  /* 8 bit boolean */ 
#define T_BOOL16        0x0031  /* 16 bit boolean */ 
#define T_BOOL32        0x0032  /* 32 bit boolean */ 
#define T_PBOOL08       0x0130  /* near pointer to  8 bit boolean */ 
#define T_PBOOL16       0x0131  /* near pointer to 16 bit boolean */ 
#define T_PBOOL32       0x0132  /* near pointer to 32 bit boolean */ 
#define T_PFBOOL08      0x0230  /* far pointer to  8 bit boolean */ 
#define T_PFBOOL16      0x0231  /* far pointer to 16 bit boolean */ 
#define T_PFBOOL32      0x0232  /* far pointer to 32 bit boolean */ 
#define T_PHBOOL08      0x0330  /* huge pointer to  8 bit boolean */ 
#define T_PHBOOL16      0x0331  /* huge pointer to 16 bit boolean */ 
#define T_PHBOOL32      0x0332  /* huge pointer to 32 bit boolean */ 
 
#define T_32PBOOL08     0x0430  /* 16:32 near pointer to 8 bit boolean */ 
#define T_32PFBOOL08    0x0530  /* 16:32 far pointer to 8 bit boolean */ 
#define T_32PBOOL16     0x0431  /* 16:32 near pointer to 18 bit boolean */ 
#define T_32PFBOOL16    0x0531  /* 16:32 far pointer to 16 bit boolean */ 
#define T_32PBOOL32     0x0432  /* 16:32 near pointer to 32 bit boolean */ 
#define T_32PFBOOL32    0x0532  /* 16:32 far pointer to 32 bit boolean */ 
 
 
#define T_NCVPTR        0x01f0  /* CV Internal type for created near pointers */ 
#define T_FCVPTR        0x02f0  /* CV Internal type for created far pointers */ 
#define T_HCVPTR        0x03f0  /* CV Internal type for created huge pointers */ 
 
/**     No leaf index can have a value of 0x0000.  The leaf indices are 
 *      separated into ranges depending upon the use of the type record. 
 *      The second range is for the type records that are directly referenced 
 *      in symbols. The first range is for type records that are not 
 *      referenced by symbols but instead are referenced by other type 
 *      records.  All type records must have a starting leaf index in these 
 *      first two ranges.  The third range of leaf indices are used to build 
 *      up complex lists such as the field list of a class type record.  No 
 *      type record can begin with one of the leaf indices. The fourth ranges 
 *      of type indices are used to represent numeric data in a symbol or 
 *      type record. These leaf indices are greater than 0x8000.  At the 
 *      point that type or symbol processor is expecting a numeric field, the 
 *      next two bytes in the type record are examined.  If the value is less 
 *      than 0x8000, then the two bytes contain the numeric value.  If the 
 *      value is greater than 0x8000, then the data follows the leaf index in 
 *      a format specified by the leaf index. The final range of leaf indices 
 *      are used to force alignment of subfields within a complex type record.. 
 */ 
 
/* 
 *      leaf indices starting records but referenced from symbol records 
 */ 
 
#define LF_MODIFIER     0x0001 
#define LF_POINTER      0x0002 
#define LF_ARRAY        0x0003 
#define LF_CLASS        0x0004 
#define LF_STRUCTURE    0x0005 
#define LF_UNION        0x0006 
#define LF_ENUM         0x0007 
#define LF_PROCEDURE    0x0008 
#define LF_MFUNCTION    0x0009 
#define LF_VTSHAPE      0x000a 
#define LF_COBOL0       0x000b 
#define LF_COBOL1       0x000c 
#define LF_BARRAY       0x000d 
#define LF_LABEL        0x000e 
#define LF_NULL         0x000f 
#define LF_NOTTRAN      0x0010 
#define LF_DIMARRAY     0x0011 
#define LF_VFTPATH      0x0012 
#define LF_PRECOMP      0x0013  /* not refereced from symbol */ 
#define LF_ENDPRECOMP   0x0014  /* not refereced from symbol */ 
#define LF_OEM          0x0015 
#define LF_TYPESERVER   0x0016 
 
/* 
 * leaf indices starting records but referenced only from type records 
 */ 
 
#define LF_SKIP         0x0200 
#define LF_ARGLIST      0x0201 
#define LF_DEFARG       0x0202 
#define LF_LIST         0x0203 
#define LF_FIELDLIST    0x0204 
#define LF_DERIVED      0x0205 
#define LF_BITFIELD     0x0206 
#define LF_METHODLIST   0x0207 
#define LF_DIMCONU      0x0208 
#define LF_DIMCONLU     0x0209 
#define LF_DIMVARU      0x020a 
#define LF_DIMVARLU     0x020b 
#define LF_REFSYM       0x020c 
 
#define LF_BCLASS       0x0400 
#define LF_VBCLASS      0x0401 
#define LF_IVBCLASS     0x0402 
#define LF_ENUMERATE    0x0403 
#define LF_FRIENDFCN    0x0404 
#define LF_INDEX        0x0405 
#define LF_MEMBER       0x0406 
#define LF_STMEMBER     0x0407 
#define LF_METHOD       0x0408 
#define LF_NESTTYPE     0x0409 
#define LF_VFUNCTAB     0x040a 
#define LF_FRIENDCLS    0x040b 
 
#define LF_NUMERIC      0x8000 
#define LF_CHAR         0x8000 
#define LF_SHORT        0x8001 
#define LF_USHORT       0x8002 
#define LF_LONG         0x8003 
#define LF_ULONG        0x8004 
#define LF_REAL32       0x8005 
#define LF_REAL64       0x8006 
#define LF_REAL80       0x8007 
#define LF_REAL128      0x8008 
#define LF_QUADWORD     0x8009 
#define LF_UQUADWORD    0x800a 
#define LF_REAL48       0x800b 
 
#define LF_PAD0         0xf0 
#define LF_PAD1         0xf1 
#define LF_PAD2         0xf2 
#define LF_PAD3         0xf3 
#define LF_PAD4         0xf4 
#define LF_PAD5         0xf5 
#define LF_PAD6         0xf6 
#define LF_PAD7         0xf7 
#define LF_PAD8         0xf8 
#define LF_PAD9         0xf9 
#define LF_PAD10        0xfa 
#define LF_PAD11        0xfb 
#define LF_PAD12        0xfc 
#define LF_PAD13        0xfd 
#define LF_PAD14        0xfe 
#define LF_PAD15        0xff 
 
/* 
 * end of leaf indices 
 */ 
 
/* 
 *      Type enum for pointer records 
 *      Pointers can be one of the following types 
 */ 
 
typedef enum CV_ptrtype_e { 
    CV_PTR_NEAR         = 0x00, /* near pointer */ 
    CV_PTR_FAR          = 0x01, /* far pointer */ 
    CV_PTR_HUGE         = 0x02, /* huge pointer */ 
    CV_PTR_BASE_SEG     = 0x03, /* based on segment */ 
    CV_PTR_BASE_VAL     = 0x04, /* based on value of base */ 
    CV_PTR_BASE_SEGVAL  = 0x05, /* based on segment value of base */ 
    CV_PTR_BASE_ADDR    = 0x06, /* based on address of base */ 
    CV_PTR_BASE_SEGADDR = 0x07, /* based on segment address of base */ 
    CV_PTR_BASE_TYPE    = 0x08, /* based on type */ 
    CV_PTR_BASE_SELF    = 0x09, /* based on self */ 
    CV_PTR_NEAR32       = 0x0a, /* 16:32 near pointer */ 
    CV_PTR_FAR32        = 0x0b, /* 16:32 far pointer */ 
    CV_PTR_UNUSEDPTR    = 0x0c  /* first unused pointer type */ 
} CV_ptrtype_e; 
 
/* 
 *      Mode enum for pointers 
 *      Pointers can have one of the following modes 
 */ 
 
typedef enum CV_ptrmode_e { 
    CV_PTR_MODE_PTR     = 0x00, /* "normal" pointer */ 
    CV_PTR_MODE_REF     = 0x01, /* reference */ 
    CV_PTR_MODE_PMEM    = 0x02, /* pointer to data member */ 
    CV_PTR_MODE_PMFUNC  = 0x03, /* pointer to member function */ 
    CV_PTR_MODE_RESERVED= 0x04  /* first unused pointer mode */ 
} CV_ptrmode_e; 
 
/* 
 *      Enumeration for function call type 
 */ 
 
typedef enum CV_call_e { 
    CV_CALL_NEAR_C      = 0x00, /* near right to left push, caller pops stack */ 
    CV_CALL_FAR_C       = 0x01, /* far right to left push, caller pops stack */ 
    CV_CALL_NEAR_PASCAL = 0x02, /* near left to right push, callee pops stack */ 
    CV_CALL_FAR_PASCAL  = 0x03, /* far left to right push, callee pops stack */ 
    CV_CALL_NEAR_FAST   = 0x04, /* near left to right push with regs, callee pops stack */ 
    CV_CALL_FAR_FAST    = 0x05, /* far left to right push with regs, callee pops stack */ 
    CV_CALL_PCODE       = 0x06, /* pcode */ 
    CV_CALL_NEAR_STD    = 0x07, /* near standard call */ 
    CV_CALL_FAR_STD     = 0x08, /* far standard call */ 
    CV_CALL_NEAR_SYS    = 0x09, /* near sys call */ 
    CV_CALL_FAR_SYS     = 0x0a, /* far sys call */ 
    CV_CALL_THISCALL    = 0x0b, /* this call (this passed in register) */ 
    CV_CALL_MIPSCALL    = 0x0c, /* Mips call */ 
    CV_CALL_GENERIC     = 0x0d, // Generic call sequence 
CV_CALL_ALPHACALL= 0x0e, // Alpha call 
CV_CALL_RESERVED= 0x0f// first unused call enumeration 
 
} CV_call_e; 
 
/* 
 *      Values for the access protection of class attributes 
 */ 
 
typedef enum CV_access_e { 
    CV_private   = 1, 
    CV_protected = 2, 
    CV_public    = 3 
} CV_access_e; 
 
/* 
 *      enumeration for method properties 
 */ 
 
typedef enum CV_methodprop_e { 
    CV_MTvanilla        = 0x00, 
    CV_MTvirtual        = 0x01, 
    CV_MTstatic         = 0x02, 
    CV_MTfriend         = 0x03, 
    CV_MTintro          = 0x04, 
    CV_MTpurevirt       = 0x05, 
    CV_MTpureintro      = 0x06 
} CV_methodprop_e; 
 
/* 
 *      enumeration for virtual shape table entries 
 */ 
 
typedef enum CV_VTS_desc_e { 
    CV_VTS_near         = 0x00, 
    CV_VTS_far          = 0x01, 
    CV_VTS_thin         = 0x02, 
    CV_VTS_outer        = 0x03, 
    CV_VTS_meta         = 0x04, 
    CV_VTS_near32       = 0x05, 
    CV_VTS_far32        = 0x06, 
    CV_VTS_unused       = 0x07 
} CV_VTS_desc_e; 
 
/* 
 *      enumeration for LF_LABEL address modes 
 */ 
 
typedef enum CV_LABEL_TYPE_e { 
    CV_LABEL_NEAR = 0,          /* near return */ 
    CV_LABEL_FAR  = 4           /* far return */ 
} CV_LABEL_TYPE_e; 
 
/* 
 *      enumeration for LF_MODIFIER values 
 */ 
 
typedef struct CV_modifier_t { 
    unsigned short  MOD_const       :1; 
    unsigned short  MOD_volatile    :1; 
    unsigned short  MOD_unused      :14; 
} CV_modifier_t; 
 
/* 
 *  bit field structure describing class/struct/union/enum properties 
 */ 
 
typedef struct CV_prop_t { 
    unsigned short  packed      :1; /* structure is packed */ 
    unsigned short  ctor        :1; /* constructors or destructors present */ 
    unsigned short  ovlops      :1; /* overloaded operators present */ 
    unsigned short  isnested    :1; /* this is a nested class */ 
    unsigned short  cnested     :1; /* this class contains nested types */ 
    unsigned short  opassign    :1; /* overloaded assignment (=) */ 
    unsigned short  opcast      :1; /* casting methods */ 
    unsigned short  fwdref      :1; /* forward reference (incomplete defn) */ 
unsigned short  scoped      :1; /* scoped definition */ 
    unsigned short  reserved    :7; 
} CV_prop_t; 
 
/* 
 *  class field attribute 
 */ 
 
typedef struct CV_fldattr_t { 
    unsigned short  access      :2; /* access protection CV_access_t */ 
    unsigned short  mprop       :3; /* method properties CV_methodprop_t */ 
    unsigned short  pseudo      :1; /* compiler generated fcn and does not exist */ 
    unsigned short  noinherit   :1; /* true if class cannot be inherited */ 
    unsigned short  noconstruct :1; /* true if class cannot be constructed */ 
    unsigned short  unused      :8; /* unused */ 
} CV_fldattr_t; 
 
/* 
 *  Structures to access to the type records 
 */ 
 
typedef struct TYPTYPE { 
    unsigned short  len; 
    unsigned short  leaf; 
#ifdef CV 
    unsigned char   data[]; 
#else 
    unsigned char   data[1]; 
#endif 
} TYPTYPE;                      /* general types record */ 
 
typedef enum CV_PMEMBER { 
    CV_PDM16_NONVIRT    = 0x00, /* 16:16 data no virtual fcn or base (null = -1) */ 
    CV_PDM16_VFCN       = 0x01, /* 16:16 data with virtual functions null = 0 */ 
    CV_PDM16_VBASE      = 0x02, /* 16:16 data with virtual bases null = (,,-1) */ 
    CV_PDM32_NVVFCN     = 0x03, /* 16:32 data w/wo virtual functions null = 0x80000000 */ 
    CV_PDM32_VBASE      = 0x04, /* 16:32 data with virtual bases (,,-1L) */ 
 
    CV_PMF16_NEARNVSA   = 0x05, /* 16:16 near method nonvirtual single address point */ 
    CV_PMF16_NEARNVMA   = 0x06, /* 16:16 near method nonvirtual multiple address points */ 
    CV_PMF16_NEARVBASE  = 0x07, /* 16:16 near method virtual bases */ 
    CV_PMF16_FARNVSA    = 0x08, /* 16:16 far method nonvirtual single address point */ 
    CV_PMF16_FARNVMA    = 0x09, /* 16:16 far method nonvirtual multiple address points */ 
    CV_PMF16_FARVBASE   = 0x0a, /* 16:16 far method virtual bases */ 
 
    CV_PMF32_NVSA       = 0x0b, /* 16:32 method nonvirtual single address point */ 
    CV_PMF32_NVMA       = 0x0c, /* 16:32 method nonvirtual multiple address point */ 
    CV_PMF32_VBASE      = 0x0d  /* 16:32 method virtual bases */ 
} CV_PMEMBER; 
 
 
/* 
 *  memory representation of pointer to member.  These representations are 
 *  indexed by the enumeration above in the LF_POINTER record 
 */ 
 
/*  representation of a 16:16 pointer to data for a class with no 
 *  virtual functions or virtual bases 
 */ 
 
struct CV_PDMR16_NONVIRT { 
    CV_off16_t      mdisp;      /* displacement to data (NULL = -1) */ 
}; 
 
 
/* 
 *  representation of a 16:16 pointer to data for a class with virtual 
 *  functions 
 */ 
 
struct CV_PMDR16_VFCN { 
    CV_off16_t      mdisp;      /* displacement to data ( NULL = 0) */ 
}; 
 
/* 
 *  representation of a 16:16 pointer to data for a class with 
 *  virtual bases 
 */ 
 
struct CV_PDMR16_VBASE { 
    CV_off16_t      mdisp;      /* displacement to data */ 
    CV_off16_t      pdisp;      /* this pointer displacement to vbptr */ 
    CV_off16_t      vdisp;      /* displacement within vbase table */ 
}; 
 
/* 
 *  representation of a 16:32 near pointer to data for a class with 
 *  or without virtual functions and no virtual bases 
 */ 
 
struct CV_PDMR32_NVVFCN { 
    CV_off32_t      mdisp;      /* displacement to data (NULL = 0x80000000) */ 
}; 
 
 
/* 
 *  representation of a 16:32 near pointer to data for a class 
 *  with virtual bases 
 */ 
 
 
struct CV_PDMR32_VBASE { 
    CV_off32_t      mdisp;      /* displacement to data */ 
    CV_off32_t      pdisp;      /* this pointer displacement */ 
    CV_off32_t      vdisp;      /* vbase table displacement */ 
}; 
 
/* 
 *  representation of a 16:16 pointer to near member function for a 
 *  class with no virtual functions or bases and a single address point 
 */ 
 
struct CV_PMFR16_NEARNVSA { 
    CV_uoff16_t     off;        /* near address of function (NULL = 0) */ 
}; 
 
 
/* 
 *  representation of a 16:16 pointer to far member function for a 
 *  class with no virtual bases and a single address point 
 */ 
 
struct CV_PMFR16_FARNVSA { 
    CV_uoff16_t     off;        /* offset of function (NULL = 0:0) */ 
    unsigned short  seg;        /* segment of function */ 
}; 
 
 
 
/* 
 *  representation of a 16:16 near pointer to member functions of an 
 *  class with no virtual bases and multiple address points 
 */ 
 
struct CV_PMFR16_NEARNVMA { 
    CV_uoff16_t     off;        /* offset of function (NULL = 0,x) */ 
    signed short    disp; 
}; 
 
/* 
 *  representation of a 16:16 far pointer to member functions of a 
 *  class with no virtual bases and multiple address points 
 */ 
 
struct CV_PMFR16_FARNVMA { 
    CV_uoff16_t     off;        /* offset of function (NULL = 0:0,x) */ 
    unsigned short  seg; 
    signed short    disp; 
}; 
 
/* 
 *  representation of a 16:16 near pointer to member function of a 
 *  class with virtual bases 
 */ 
 
struct CV_PMFR16_NEARVBASE { 
    CV_uoff16_t     off;        /* offset of function (NULL = 0,x,x,x) */ 
    CV_off16_t      mdisp;      /* displacement to data */ 
    CV_off16_t      pdisp;      /* this pointer displacement */ 
    CV_off16_t      vdisp;      /* vbase table displacement */ 
}; 
 
/* 
 *  representation of a 16:16 far pointer to member function of a 
 *  class with virtual bases 
 */ 
 
struct CV_PMFR16_FARVBASE { 
    CV_uoff16_t     off;        /* offset of function (NULL = 0:0,x,x,x) */ 
    unsigned short  seg; 
    CV_off16_t      mdisp;      /* displacement to data */ 
    CV_off16_t      pdisp;      /* this pointer displacement */ 
    CV_off16_t      vdisp;      /* vbase table displacement */ 
 
}; 
 
/* 
 *  representation of a 16:32 near pointer to member function for a 
 *  class with no virtual bases and a single address point 
 */ 
 
struct CV_PMFR32_NVSA { 
    CV_uoff32_t      off;       /* near address of function (NULL = 0L) */ 
}; 
 
/* 
 *  representation of a 16:32 near pointer to member function for a 
 *  class with no virtual bases and multiple address points 
 */ 
 
struct CV_PMFR32_NVMA { 
    CV_uoff32_t     off;        /* near address of function (NULL = 0L,x) */ 
    CV_off32_t      disp; 
}; 
 
/* 
 *  representation of a 16:32 near pointer to member function for a 
 *  class with virtual bases 
 */ 
 
struct CV_PMFR32_VBASE { 
    CV_uoff32_t     off;        /* near address of function (NULL = 0L,x,x,x) */ 
    CV_off32_t      mdisp;      /* displacement to data */ 
    CV_off32_t      pdisp;      /* this pointer displacement */ 
    CV_off32_t      vdisp;      /* vbase table displacement */ 
}; 
 
/* 
 *  Easy leaf - used for generic casting to reference leaf field 
 *  of a subfield of a complex list 
 */ 
 
typedef struct lfEasy { 
    unsigned short  leaf;       /* LF_... */ 
} lfEasy; 
 
 
/*      The following type records are basically variant records of the 
 *      above structure.  The "unsigned short leaf" of the above structure and 
 *      the "unsigned short leaf" of the following type definitions are the 
 *      same symbol.  When the OMF record is locked via the MHOMFLock API 
 *      call, the address of the "unsigned short leaf" is returned 
 */ 
 
/* 
 *      Type record for LF_MODIFIER 
 */ 
 
typedef struct lfModifier { 
    unsigned short  leaf;       /* LF_MODIFIER */ 
    CV_modifier_t   attr;       /* modifier attribute modifier_t */ 
    CV_typ_t        type;       /* modified type */ 
} lfModifier; 
 
/* 
 *      type record for LF_POINTER 
 */ 
 
typedef struct lfPointer { 
    struct lfPointerBody { 
        unsigned short      leaf; /* LF_POINTER */ 
        struct { 
            unsigned char   ptrtype     :5; /* ordinal specifying pointer type (ptrtype-t) */ 
            unsigned char   ptrmode     :3; /* ordinal specifying pointer mode (ptrmode_t) */ 
            unsigned char   isflat32    :1; /* true if 0:32 pointer */ 
            unsigned char   isvolatile  :1; /* TRUE if volatile pointer */ 
            unsigned char   isconst     :1; /* TRUE if const pointer */ 
            unsigned char   unused      :5; 
        } attr; 
        CV_typ_t    utype;      /* type index of the underlying type */ 
    } u; 
    union  { 
        struct { 
            CV_typ_t        pmclass; /* index of containing class for pointer to member */ 
            unsigned short  pmenum; /* enumeration specifying pm format */ 
        } pm; 
        unsigned short      bseg; /* base segment if PTR_BASE_SEG */ 
        unsigned char       Sym[1]; /* copy of base symbol record (including length) */ 
        struct  { 
            unsigned short  index; /* type index if CV_PTR_BASE_TYPE */ 
            unsigned char   name[1]; /* name of base type */ 
        } btype; 
    } pbase; 
} lfPointer; 
 
/* 
 *      type record for LF_ARRAY 
 */ 
 
typedef struct lfArray { 
    unsigned short  leaf;       /* LF_ARRAY */ 
    CV_typ_t        elemtype;   /* type index of element type */ 
    CV_typ_t        idxtype;    /* type index of indexing type */ 
    unsigned char   data[];     /* variable length data specifying */ 
                                /* size in bytes and name */ 
} lfArray; 
 
/* 
 *      type record for LF_CLASS, LF_STRUCTURE 
 */ 
 
typedef struct lfClass { 
    unsigned short  leaf;       /* LF_CLASS, LF_STRUCT */ 
    unsigned short  count;      /* count of number of elements in class */ 
    CV_typ_t        field;      /* type index of LF_FIELD descriptor list */ 
    CV_prop_t       property;   /* property attribute field (prop_t) */ 
    CV_typ_t        derived;    /* type index of derived from list if not zero */ 
    CV_typ_t        vshape;     /* type index of vshape table for this class */ 
    unsigned char   data[];     /* data describing length of structure in */ 
                                /* bytes and name */ 
} lfClass; 
typedef lfClass lfStructure; 
 
/* 
 *      type record for LF_UNION 
 */ 
 
typedef struct lfUnion { 
    unsigned short  leaf;       /* LF_UNION */ 
    unsigned short  count;      /* count of number of elements in class */ 
    CV_typ_t        field;      /* type index of LF_FIELD descriptor list */ 
    CV_prop_t       property;   /* property attribute field */ 
    unsigned char   data[];     /* variable length data describing length of */ 
                                /* structure and name */ 
} lfUnion; 
 
/* 
 *      type record for LF_ENUM 
 */ 
 
typedef struct lfEnum { 
    unsigned short  leaf;       /* LF_ENUM */ 
    unsigned short  count;      /* count of number of elements in class */ 
    CV_typ_t        utype;      /* underlying type of the enum */ 
    CV_typ_t        field;      /* type index of LF_FIELD descriptor list */ 
    CV_prop_t       property;   /* property attribute field */ 
    unsigned char   Name[1];    /* length prefixed name of enum */ 
} lfEnum; 
 
/* 
 *      Type record for LF_PROCEDURE 
 */ 
 
typedef struct lfProc { 
    unsigned short  leaf;       /* LF_PROCEDURE */ 
    CV_typ_t        rvtype;     /* type index of return value */ 
    unsigned char   calltype;   /* calling convention (call_t) */ 
    unsigned char   reserved;   /* reserved for future use */ 
    unsigned short  parmcount;  /* number of parameters */ 
    CV_typ_t        arglist;    /* type index of argument list */ 
} lfProc; 
 
/* 
 *      Type record for member function 
 */ 
 
typedef struct lfMFunc { 
    unsigned short  leaf;       /* LF_MFUNCTION */ 
    CV_typ_t        rvtype;     /* type index of return value */ 
    CV_typ_t        classtype;  /* type index of containing class */ 
    CV_typ_t        thistype;   /* type index of this pointer (model specific) */ 
    unsigned char   calltype;   /* calling convention (call_t) */ 
    unsigned char   reserved;   /* reserved for future use */ 
    unsigned short  parmcount;  /* number of parameters */ 
    CV_typ_t        arglist;    /* type index of argument list */ 
    long            thisadjust; /* this adjuster (long because pad required anyway) */ 
} lfMFunc; 
 
/* 
 *     type record for virtual function table shape 
 */ 
 
typedef struct lfVTShape { 
    unsigned short  leaf;       /* LF_VTSHAPE */ 
    unsigned short  count;      /* number of entries in vfunctable */ 
    unsigned char   desc[];     /* variable number of 4 bit (VTS_desc) descriptors */ 
} lfVTShape; 
 
/* 
 *      type record for cobol0 
 */ 
 
typedef struct lfCobol0 { 
    unsigned short  leaf;       /* LF_COBOL0 */ 
    CV_typ_t        type; 
    unsigned char   data[]; 
} lfCobol0; 
 
/* 
 *      type record for cobol1 
 */ 
 
typedef struct lfCobol1 { 
    unsigned short  leaf;       /* LF_COBOL1 */ 
    unsigned char   data[]; 
} lfCobol1; 
 
/* 
 *      type record for basic array 
 */ 
 
typedef struct lfBArray { 
    unsigned short  leaf;       /* LF_BARRAY */ 
    CV_typ_t        utype;      /* type index of underlying type */ 
} lfBArray; 
 
/* 
 *      type record for assembler labels 
 */ 
 
typedef struct lfLabel { 
    unsigned short  leaf;       /* LF_LABEL */ 
    unsigned short  mode;       /* addressing mode of label */ 
} lfLabel; 
 
/* 
 *      type record for dimensioned arrays 
 */ 
 
typedef struct lfDimArray { 
    unsigned short  leaf;       /* LF_DIMARRAY */ 
    CV_typ_t        utype;      /* underlying type of the array */ 
    CV_typ_t        diminfo;    /* dimension information */ 
    char            name[1];    /* length prefixed name */ 
} lfDimArray; 
 
/* 
 *      type record describing path to virtual function table 
 */ 
 
 
typedef struct lfVFTPath { 
    unsigned short  leaf;       /* LF_VFTPATH */ 
    unsigned short  count;      /* count of number of bases in path */ 
    CV_typ_t        base[1];    /* bases from root to leaf */ 
} lfVFTPath; 
 
/* 
 *      type record describing inclusion of precompiled types 
 */ 
 
typedef struct lfPreComp { 
    unsigned short  leaf;       /* LF_PRECOMP */ 
    unsigned short  start;      /* starting type index included */ 
    unsigned short  count;      /* number of types in inclusion */ 
    unsigned long   signature;  /* signature */ 
    unsigned char   name[];     /* length prefixed name of included type file */ 
} lfPreComp; 
 
/* 
 *      type record describing end of precompiled types that will be 
 *      included by another file 
 */ 
 
typedef struct lfEndPreComp { 
    unsigned short  leaf;       /* LF_ENDPRECOMP */ 
    unsigned long   signature;  /* signature */ 
} lfEndPreComp; 
 
/* 
 *      description of type records that can be referenced from 
 *      type records referenced by symbols 
 */ 
 
/* 
 *      type record for skip record 
 */ 
 
typedef struct lfSkip { 
    unsigned short  leaf;       /* LF_SKIP */ 
    CV_typ_t        type;       /* next valid index */ 
    unsigned char   data[];     /* pad data */ 
} lfSkip; 
 
/* 
 *      argument list leaf 
 */ 
 
typedef struct lfArgList { 
    unsigned short  leaf;       /* LF_ARGLIST */ 
    unsigned short  count;      /* number of arguments */ 
    CV_typ_t        arg[];      /* number of arguments */ 
} lfArgList; 
 
/* 
 *      derived class list leaf 
 */ 
 
typedef struct lfDerived { 
    unsigned short  leaf;       /* LF_DERIVED */ 
    unsigned short  count;      /* number of arguments */ 
    CV_typ_t        drvdcls[];  /* type indices of derived classes */ 
} lfDerived; 
 
/* 
 *      leaf for default arguments 
 */ 
 
typedef struct lfDefArg { 
    unsigned short  leaf;       /* LF_DEFARG */ 
    CV_typ_t        type;       /* type of resulting expression */ 
    unsigned char   expr[];     /* length prefixed expression string */ 
} lfDefArg; 
 
/* 
 *      list leaf 
 *          This list should no longer be used because the utilities cannot 
 *          verify the contents of the list without knowing what type of list 
 *          it is.  New specific leaf indices should be used instead. 
 */ 
 
typedef struct lfList { 
    unsigned short  leaf;       /* LF_LIST */ 
    char            data[];     /* data format specified by indexing type */ 
} lfList; 
 
/* 
 *      field list leaf 
 *      This is the header leaf for a complex list of class and structure 
 *      subfields. 
 */ 
 
typedef struct lfFieldList { 
    unsigned short  leaf;       /* LF_FIELDLIST */ 
    char            data[];     /* field list sub lists */ 
} lfFieldList; 
 
/* 
 *  type record for non-static methods and friends in method list 
 */ 
 
typedef struct mlMethod { 
    CV_fldattr_t   attr;        /* method attribute */ 
    CV_typ_t       index;       /* index to type record for procedure */ 
#ifdef CV 
    unsigned long  vbaseoff[0]; /* offset in vfunctable if intro virtual */ 
#else 
//    unsigned long   vbaseoff[1]; 
#endif 
} mlMethod; 
 
typedef struct lfMethodList { 
    unsigned short leaf; 
    unsigned char  mList[];     /* really a mlMethod type */ 
} lfMethodList; 
 
/* 
 *      type record for LF_BITFIELD 
 */ 
 
typedef struct lfBitfield { 
    unsigned short  leaf;       /* LF_BITFIELD */ 
    unsigned char   length; 
    unsigned char   position; 
    CV_typ_t        type;       /* type of bitfield */ 
 
} lfBitfield; 
 
/* 
 *      type record for dimensioned array with constant bounds 
 */ 
 
typedef struct lfDimCon { 
    unsigned short  leaf;       /* LF_DIMCONU or LF_DIMCONLU */ 
    unsigned short  rank;       /* number of dimensions */ 
    CV_typ_t        typ;        /* type of index */ 
    unsigned char   dim[];      /* array of dimension information with */ 
                                /* either upper bounds or lower/upper bound */ 
} lfDimCon; 
 
/* 
 *      type record for dimensioned array with variable bounds 
 */ 
 
typedef struct lfDimVar { 
    unsigned short  leaf;       /* LF_DIMVARU or LF_DIMVARLU */ 
    unsigned short  rank;       /* number of dimensions */ 
    CV_typ_t        typ;        /* type of index */ 
    unsigned char   dim[];      /* array of type indices for either */ 
                                /* variable upper bound or variable */ 
                                /* lower/upper bound.  The referenced */ 
                                /* types must be LF_REFSYM or T_VOID */ 
} lfDimVar; 
 
/* 
 *      type record for referenced symbol 
 */ 
 
typedef struct lfRefSym { 
    unsigned short  leaf;       /* LF_REFSYM */ 
    unsigned char   Sym[1];     /* copy of referenced symbol record */ 
                                /* (including length) */ 
} lfRefSym; 
 
/**     the following are numeric leaves.  They are used to indicate the 
 *      size of the following variable length data.  When the numeric 
 *      data is a single byte less than 0x8000, then the data is output 
 *      directly.  If the data is more the 0x8000 or is a negative value, 
 *      then the data is preceeded by the proper index. 
 */ 
 
/*      signed character leaf */ 
 
typedef struct lfChar { 
    unsigned short  leaf;       /* LF_CHAR */ 
    signed char     val;        /* signed 8-bit value */ 
} lfChar; 
 
/*      signed short leaf */ 
 
typedef struct lfShort { 
    unsigned short  leaf;       /* LF_SHORT */ 
    short           val;        /* signed 16-bit value */ 
} lfShort; 
 
/*      unsigned short leaf */ 
 
typedef struct lfUShort { 
    unsigned short  leaf;       /* LF_unsigned short */ 
    unsigned short  val;        /* unsigned 16-bit value */ 
} lfUShort; 
 
/*      signed long leaf */ 
 
typedef struct lfLong { 
    unsigned short  leaf;       /* LF_LONG */ 
    long            val;        /* signed 32-bit value */ 
} lfLong; 
 
/*      unsigned long leaf */ 
 
typedef struct lfULong { 
    unsigned short  leaf;       /* LF_ULONG */ 
    unsigned long   val;        /* unsigned 32-bit value */ 
} lfULong; 
 
/*      real 32-bit leaf */ 
 
typedef struct lfReal32 { 
    unsigned short  leaf;       /* LF_REAL32 */ 
    float           val;        /* 32-bit real value */ 
} lfReal32; 
 
/*      real 48-bit leaf */ 
 
typedef struct lfReal48 { 
    unsigned short  leaf;       /* LF_REAL48 */ 
    unsigned char   val[6];     /* 48-bit real value */ 
} lfReal48; 
 
/*      real 64-bit leaf */ 
 
typedef struct lfReal64 { 
    unsigned short  leaf;       /* LF_REAL64 */ 
    double          val;        /* 64-bit real value */ 
} lfReal64; 
 
/*      real 80-bit leaf */ 
 
typedef struct lfReal80 { 
    unsigned short  leaf;       /* LF_REAL80 */ 
    REAL10          val;        /* real 80-bit value */ 
} lfReal80; 
 
/*      real 128-bit leaf */ 
 
typedef struct lfReal128 { 
    unsigned short  leaf;       /* LF_REAL128 */ 
    char            val[16];    /* real 128-bit value */ 
} lfReal128; 
 
/************************************************************************/ 
 
/*      index leaf - contains type index of another leaf */ 
/*      a major use of this leaf is to allow the compilers to emit a */ 
/*      long complex list (LF_FIELD) in smaller pieces. */ 
 
typedef struct lfIndex { 
    unsigned short  leaf;       /* LF_INDEX */ 
    CV_typ_t        index;      /* type index of referenced leaf */ 
} lfIndex; 
 
/*      subfield record for base class field */ 
 
typedef struct lfBClass { 
    unsigned short  leaf;       /* LF_BCLASS */ 
    CV_typ_t        index;      /* type index of base class */ 
    CV_fldattr_t    attr;       /* attribute */ 
    unsigned char   offset[];   /* variable length offset of base within class */ 
} lfBClass; 
 
/*      subfield record for direct and indirect virtual base class field */ 
 
typedef struct lfVBClass { 
    unsigned short  leaf;       /* LF_VBCLASS | LV_IVBCLASS */ 
    CV_typ_t        index;      /* type index of direct virtual base class */ 
    CV_typ_t        vbptr;      /* type index of virtual base pointer */ 
    CV_fldattr_t    attr;       /* attribute */ 
    unsigned char   vbpoff[];   /* virtual base pointer offset from address point */ 
                                /* followed by virtual base offset from vbtable */ 
} lfVBClass; 
 
/*      subfield record for friend class */ 
 
typedef struct lfFriendCls { 
    unsigned short  leaf;       /* LF_FRIENDCLS */ 
    CV_typ_t        index;      /* index to type record of friend class */ 
} lfFriendCls; 
 
/*      subfield record for friend function */ 
 
typedef struct lfFriendFcn { 
    unsigned short  leaf;       /* LF_FRIENDFCN */ 
    CV_typ_t        index;      /* index to type record of friend function */ 
    char            Name[1];    /* name of friend function */ 
} lfFriendFcn; 
 
/*      subfield record for non-static data members */ 
 
typedef struct lfMember { 
    unsigned short  leaf;       /* LF_MEMBER */ 
    CV_typ_t        index;      /* index of type record for field */ 
    CV_fldattr_t    attr;       /* attribute mask */ 
    unsigned char   offset[];   /* variable length offset of field followed */ 
                                /* by length prefixed name of field */ 
} lfMember; 
 
/*  type record for static data members */ 
 
typedef struct lfSTMember { 
    unsigned short  leaf;       /* LF_STMEMBER */ 
    CV_typ_t        index;      /* index of type record for field */ 
    CV_fldattr_t    attr;       /* attribute mask */ 
    char            Name[1];    /* length prefixed name of field */ 
} lfSTMember; 
 
/*      subfield record for virtual function table pointer */ 
 
typedef struct lfVFuncTab { 
    unsigned short  leaf;       /* LF_VFUNCTAB */ 
    CV_typ_t        type;       /* type index of pointer */ 
} lfVFuncTab; 
 
/*      subfield record for method and friend list */ 
 
typedef struct lfMethod { 
    unsigned short  leaf;       /* LF_METHOD */ 
    unsigned short  count;      /* number of occurances of function */ 
    CV_typ_t        mList;      /* index to LF_METHODLIST record */ 
    char            Name[1];    /* length prefixed name of method */ 
} lfMethod; 
 
/*      subfield record for enumerate */ 
 
typedef struct lfEnumerate { 
    unsigned short  leaf;       /* LF_ENUMERATE */ 
    CV_fldattr_t    attr;       /* access (ACC_...) */ 
    unsigned char   value[];    /* variable length value field followed */ 
                                /* by length prefixed name */ 
} lfEnumerate; 
 
/*  type record for nested (scoped) type definition */ 
 
typedef struct lfNestType { 
    unsigned short  leaf;       /* LF_NESTTYPE */ 
    CV_typ_t        index;      /* index of nested type definition */ 
    unsigned char   Name[1];    /* length prefixed type name */ 
} lfNestType; 
 
/*  type record for pad leaf */ 
 
typedef struct lfPad { 
    unsigned char   leaf; 
} SYM_PAD; 
 
/*  Symbol definitions */ 
 
typedef enum SYM_ENUM_e { 
    S_COMPILE    =  0x0001,     /* Compile flags symbol */ 
    S_REGISTER   =  0x0002,     /* Register variable */ 
    S_CONSTANT   =  0x0003,     /* constant symbol */ 
    S_UDT        =  0x0004,     /* User defined type */ 
    S_SSEARCH    =  0x0005,     /* Start Search */ 
    S_END        =  0x0006,     /* Block, procedure, "with" or thunk end */ 
    S_SKIP       =  0x0007,     /* Reserve symbol space in $$Symbols table */ 
    S_CVRESERVE  =  0x0008,     /* Reserve symbol for CV internal use */ 
    S_OBJNAME    =  0x0009,     /* path to object file name */ 
    S_ENDARG     =  0x000a,     /* end of argument list */ 
    S_COBOLUDT   =  0x000b,     /* special UDT for cobol -- not packed */ 
 
    S_BPREL16    =  0x0100,     /* BP-relative */ 
    S_LDATA16    =  0x0101,     /* Module-local symbol */ 
    S_GDATA16    =  0x0102,     /* Global data symbol */ 
    S_PUB16      =  0x0103,     /* a public symbol */ 
    S_LPROC16    =  0x0104,     /* Local procedure start */ 
    S_GPROC16    =  0x0105,     /* Global procedure start */ 
    S_THUNK16    =  0x0106,     /* Thunk Start */ 
    S_BLOCK16    =  0x0107,     /* block start */ 
    S_WITH16     =  0x0108,     /* with start */ 
    S_LABEL16    =  0x0109,     /* code label */ 
    S_CEXMODEL16 =  0x010a,     /* change execution model */ 
    S_VFTABLE16  =  0x010b,     /* address of virtual function table */ 
    S_REGREL16   =  0x010c,     /* register relative address */ 
 
    S_BPREL32    =  0x0200,     /* BP-relative */ 
    S_LDATA32    =  0x0201,     /* Module-local symbol */ 
    S_GDATA32    =  0x0202,     /* Global data symbol */ 
    S_PUB32      =  0x0203,     /* a public symbol (CV internal reserved) */ 
    S_LPROC32    =  0x0204,     /* Local procedure start */ 
    S_GPROC32    =  0x0205,     /* Global procedure start */ 
    S_THUNK32    =  0x0206,     /* Thunk Start */ 
    S_BLOCK32    =  0x0207,     /* block start */ 
    S_WITH32     =  0x0208,     /* with start */ 
    S_LABEL32    =  0x0209,     /* code label */ 
    S_CEXMODEL32 =  0x020a,     /* change execution model */ 
    S_VFTABLE32  =  0x020b,     /* address of virtual function table */ 
    S_REGREL32   =  0x020c,     /* register relative address */ 
    S_LTHREAD32  =  0x020d, 
    S_GTHREAD32  =  0x020e, 
 
    S_LPROCMIPS  =  0x0300,     /* Local procedure start */ 
    S_GPROCMIPS  =  0x0301,     /* Global procedure start */ 
 
    S_PROCREF    =  0x400,      /* Procedure reference */ 
    S_DATAREF    =  0x401,      /* Data reference */ 
    S_ALIGN      =  0x402       /* Page Alignment */ 
} SYM_ENUM_e; 
 
/*  enum describing the compile flag source language */ 
 
typedef enum { 
    CV_CFL_C        = 0x00, 
    CV_CFL_CXX      = 0x01, 
    CV_CFL_FORTRAN  = 0x02, 
    CV_CFL_MASM     = 0x03, 
    CV_CFL_PASCAL   = 0x04, 
    CV_CFL_BASIC    = 0x05, 
    CV_CFL_COBOL    = 0x06 
} CV_CFL_LANG; 
 
/*  enum describing target processor */ 
 
typedef enum CV_CPU_TYPE_e { 
    CV_CFL_8080         = 0x00, 
    CV_CFL_8086         = 0x01, 
    CV_CFL_80286        = 0x02, 
    CV_CFL_80386        = 0x03, 
    CV_CFL_80486        = 0x04, 
    CV_CFL_PENTIUM      = 0x05, 
    CV_CFL_MIPSR4000    = 0x10, 
    CV_CFL_M68000       = 0x20, 
    CV_CFL_M68010       = 0x21, 
    CV_CFL_M68020       = 0x22, 
    CV_CFL_M68030       = 0x23, 
    CV_CFL_M68040       = 0x24, 
    CV_CFL_ALPHA        = 0x30 
 
} CV_CPU_TYPE_e; 
 
/*  enum describing compile flag ambiant data model */ 
 
typedef enum { 
    CV_CFL_DNEAR    = 0x00, 
    CV_CFL_DFAR     = 0x01, 
    CV_CFL_DHUGE    = 0x02 
} CV_CFL_DATA; 
 
/*  enum describing compile flag ambiant code model */ 
 
typedef enum CV_CFL_CODE_e { 
    CV_CFL_CNEAR    = 0x00, 
    CV_CFL_CFAR     = 0x01, 
    CV_CFL_CHUGE    = 0x02 
} CV_CFL_CODE_e; 
 
/*  enum describing compile flag target floating point package */ 
 
typedef enum CV_CFL_FPKG_e { 
    CV_CFL_NDP      = 0x00, 
    CV_CFL_EMU      = 0x01, 
    CV_CFL_ALT      = 0x02 
} CV_CFL_FPKG_e; 
 
typedef struct SYMTYPE { 
    unsigned short      reclen; /* Record length */ 
    unsigned short      rectyp; /* Record type */ 
    char        data[]; 
} SYMTYPE; 
 
/* 
 *  cobol information --- 
 */ 
 
typedef enum CV_COBOL_e { 
    CV_COBOL_dontstop, 
    CV_COBOL_pfm, 
    CV_COBOL_false, 
    CV_COBOL_extcall 
} CV_COBOL_e; 
 
struct { 
    unsigned short subtype;     /* see CV_COBOL_e above */ 
    unsigned short flag; 
} cobol; 
 
 
/*      non-model specific symbol types */ 
 
typedef struct REGSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_REGISTER */ 
    unsigned short  typind;     /* Type index */ 
    unsigned short  reg;        /* register enumerate */ 
unsigned char   name[1];    /* Length-prefixed name */ 
} REGSYM; 
 
typedef struct CONSTSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_CONSTANT */ 
    CV_typ_t        typind;     /* Type index (containing enum if enumerate) */ 
    unsigned short  value;      /* numeric leaf containing value */ 
    unsigned char   name[];     /* Length-prefixed name */ 
} CONSTSYM; 
 
typedef struct UDTSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_UDT |S_COBOLUDT */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} UDTSYM; 
 
typedef struct SEARCHSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_SSEARCH */ 
    unsigned long   startsym;   /* offset of the procedure */ 
    unsigned short  seg;        /* segment of symbol */ 
} SEARCHSYM; 
 
typedef struct CFLAGSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_COMPILE */ 
    unsigned char   machine;    /* target processor */ 
    struct  { 
        unsigned char   language    :8; /* language index */ 
        unsigned char   pcode       :1; /* true if pcode present */ 
        unsigned char   floatprec   :2; /* floating precision */ 
        unsigned char   floatpkg    :2; /* float package */ 
        unsigned char   ambdata     :3; /* ambiant data model */ 
        unsigned char   ambcode     :3; /* ambiant code model */ 
        unsigned char   mode32      :1; /* true if compiled 32 bit mode */ 
        unsigned char   pad         :4; /* reserved */ 
    } flags; 
    unsigned char       ver[1]; /* Length-prefixed compiler version string */ 
} CFLAGSYM; 
 
typedef struct OBJNAMESYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_OBJNAME */ 
    unsigned long   signature;  /* signature */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} OBJNAMESYM; 
 
/*      symbol types for 16:16 memory model */ 
 
typedef struct BPRELSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_BPREL16 */ 
    CV_off16_t      off;        /* BP-relative offset */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} BPRELSYM16; 
 
typedef struct DATASYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_LDATA16 or S_GDATA16 or S_PUB16 */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} DATASYM16; 
typedef DATASYM16 PUBSYM16; 
 
typedef struct PROCSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_GPROC16 or S_LPROC16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
    unsigned short  len;        /* Proc length */ 
    unsigned short  DbgStart;   /* Debug start offset */ 
    unsigned short  DbgEnd;     /* Debug end offset */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    CV_typ_t        typind;     /* Type index */ 
    char            rtntyp;     /* Return type (NEAR/FAR) */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} PROCSYM16; 
 
typedef struct THUNKSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_THUNK16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    unsigned short  len;        /* length of thunk */ 
    unsigned char   ord;        /* ordinal specifying type of thunk */ 
    unsigned char   name[1];    /* name of thunk */ 
#ifdef CV 
    unsigned char   variant[0]; /* variant portion of thunk */ 
#else 
    unsigned char   variant[1]; /* variant portion of thunk */ 
#endif 
} THUNKSYM16; 
 
typedef enum { 
    THUNK_ORDINAL_NOTYPE, 
    THUNK_ORDINAL_ADJUSTOR, 
    THUNK_ORDINAL_VCALL 
} THUNK_ORDINAL; 
 
typedef struct LABELSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_LABEL16 */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    char            rtntyp;     /* Return type (NEAR/FAR) */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} LABELSYM16; 
 
typedef enum CV_RETURN_TYPE_e { 
    CV_RETURN_NEAR = 0,         /* near return */ 
    CV_RETURN_FAR  = 4          /* far return */ 
} CV_RETURN_TYPE_e; 
 
typedef struct BLOCKSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_BLOCK16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned short  len;        /* Block length */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} BLOCKSYM16; 
 
typedef struct WITHSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_WITH16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned short  len;        /* Block length */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} WITHSYM16; 
 
typedef enum CEXM_MODEL_e { 
    CEXM_MDL_table  = 0x00,     /* not executable */ 
    CEXM_MDL_native = 0x20,     /* native */ 
    CEXM_MDL_cobol  = 0x21,     /* cobol */ 
    CEXM_MDL_pcode  = 0x40      /* pcode */ 
} CEXM_MODEL_e; 
 
typedef struct CEXMSYM16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_CEXMODEL16 */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  seg;        /* segment of symbol */ 
    unsigned short  model;      /* execution model */ 
    union variant { 
        struct  { 
            CV_uoff16_t pcdtable; /* offset to pcode function table */ 
            CV_uoff16_t pcdspi; /* offset to segment pcode information */ 
        } pcode; 
    } u; 
} CEXMSYM16; 
 
typedef struct VPATHSYM16 { 
    unsigned short  reclen;     /* record length */ 
    unsigned short  rectyp;     /* S_VFTPATH16 */ 
    CV_uoff16_t     off;        /* offset of virtual function table */ 
    unsigned short  seg;        /* segment of virtual function table */ 
    CV_typ_t        root;       /* type index of the root of path */ 
    CV_typ_t        path;       /* type index of the path record */ 
} VPATHSYM16; 
 
typedef struct REGREL16 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_REGREL16 */ 
    CV_uoff16_t     off;        /* offset of symbol */ 
    unsigned short  reg;        /* register index */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} REGREL16; 
 
typedef struct BPRELSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_BPREL32 */ 
    CV_off32_t      off;        /* BP-relative offset */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} BPRELSYM32; 
 
typedef struct DATASYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_LDATA32, S_GDATA32, S_LTHREAD32, 
                                   S_GTHREAD32 or S_PUB32 */ 
    CV_uoff32_t     off; 
    unsigned short  seg; 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} DATASYM32; 
typedef DATASYM32 PUBSYM32; 
 
typedef struct PROCSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_GPROC32 or S_LPROC32 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
    unsigned long   len;        /* Proc length */ 
    unsigned long   DbgStart;   /* Debug start offset */ 
    unsigned long   DbgEnd;     /* Debug end offset */ 
    CV_uoff32_t     off; 
    unsigned short  seg; 
    CV_typ_t        typind;     /* Type index */ 
    char            rtntyp;     /* Return type (NEAR/FAR) */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} PROCSYM32; 
 
typedef struct THUNKSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_THUNK32 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
    CV_uoff32_t     off; 
    unsigned short  seg; 
    unsigned short  len;        /* length of thunk */ 
    unsigned char   ord;        /* ordinal specifying type of thunk */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
#ifdef CV 
    unsigned char   variant[0]; /* variant portion of thunk */ 
#else 
    unsigned char   variant[1]; /* variant portion of thunk */ 
#endif 
} THUNKSYM32; 
 
typedef struct LABELSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_LABEL32 */ 
    CV_uoff32_t     off; 
    unsigned short  seg; 
    char            rtntyp;     /* Return type (NEAR/FAR) */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} LABELSYM32; 
 
typedef struct BLOCKSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_BLOCK32 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   len;        /* Block length */ 
    CV_uoff32_t     off;        /* Offset in code segment */ 
    unsigned short  seg;        /* segment of label */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} BLOCKSYM32; 
 
typedef struct WITHSYM32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_WITH32 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   len;        /* Block length */ 
    CV_uoff32_t     off;        /* Offset in code segment */ 
    unsigned short  seg;        /* segment of label */ 
    unsigned char   name[1];    /* Length-prefixed expression string */ 
} WITHSYM32; 
 
typedef struct VPATHSYM32 { 
    unsigned short  reclen;     /* record length */ 
    unsigned short  rectyp;     /* S_VFTPATH32 */ 
    CV_uoff32_t     off;        /* offset of virtual function table */ 
    unsigned short  seg;        /* segment of virtual function table */ 
    CV_typ_t        root;       /* type index of the root of path */ 
    CV_typ_t        path;       /* type index of the path record */ 
} VPATHSYM32; 
 
typedef struct REGREL32 { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_REGREL32 */ 
    CV_uoff32_t     off;        /* offset of symbol */ 
    unsigned short  reg;        /* register index for symbol */ 
    CV_typ_t        typind;     /* Type index */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} REGREL32, * LPREGREL32; 
 
typedef struct PROCSYMMIPS { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_GPROCMIPS or S_LPROCMIPS */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
    unsigned long   len;        /* Proc length */ 
    unsigned long   DbgStart;   /* Debug start offset */ 
    unsigned long   DbgEnd;     /* Debug end offset */ 
    unsigned long   regSave;    /* int register save mask */ 
    unsigned long   fpSave;     /* fp register save mask */ 
    unsigned long   intOff;     /* int register save offset */ 
    unsigned long   fpOff;      /* fp register save offset */ 
    CV_uoff32_t     off;        /* Symbol offset */ 
    unsigned short  seg;        /* Symbol segment */ 
    CV_typ_t        typind;     /* Type index */ 
    char            retReg;     /* Register return value is in */ 
    char            frameReg;   /* Frame pointer register */ 
    unsigned char   name[1];    /* Length-prefixed name */ 
} PROCSYMMIPS, *PROCPTRMIPS; 
 
/*  generic block definition symbols */ 
/*  these are similar to the equivalent 16:16 or 16:32 symbols but */ 
/*  only define the length, type and linkage fields */ 
 
typedef struct PROCSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_GPROC16 or S_LPROC16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
} PROCSYM; 
 
typedef struct THUNKSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_THUNK */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
    unsigned long   pNext;      /* pointer to next symbol */ 
} THUNKSYM; 
 
typedef struct BLOCKSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_BLOCK16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
} BLOCKSYM; 
 
typedef struct WITHSYM { 
    unsigned short  reclen;     /* Record length */ 
    unsigned short  rectyp;     /* S_WITH16 */ 
    unsigned long   pParent;    /* pointer to the parent */ 
    unsigned long   pEnd;       /* pointer to this blocks end */ 
} WITHSYM; 
 
typedef enum CV_HREG_e { 
    /* 
     *  Register set for the Intel 80x86 and ix86 processor series 
     *  (plus PCODE registers) 
     */ 
 
    CV_REG_NONE  =   0, 
    CV_REG_AL    =   1, 
    CV_REG_CL    =   2, 
    CV_REG_DL    =   3, 
    CV_REG_BL    =   4, 
    CV_REG_AH    =   5, 
    CV_REG_CH    =   6, 
    CV_REG_DH    =   7, 
    CV_REG_BH    =   8, 
    CV_REG_AX    =   9, 
    CV_REG_CX    =  10, 
    CV_REG_DX    =  11, 
    CV_REG_BX    =  12, 
    CV_REG_SP    =  13, 
    CV_REG_BP    =  14, 
    CV_REG_SI    =  15, 
    CV_REG_DI    =  16, 
    CV_REG_EAX   =  17, 
    CV_REG_ECX   =  18, 
    CV_REG_EDX   =  19, 
    CV_REG_EBX   =  20, 
    CV_REG_ESP   =  21, 
    CV_REG_EBP   =  22, 
    CV_REG_ESI   =  23, 
    CV_REG_EDI   =  24, 
    CV_REG_ES    =  25, 
    CV_REG_CS    =  26, 
    CV_REG_SS    =  27, 
    CV_REG_DS    =  28, 
    CV_REG_FS    =  29, 
    CV_REG_GS    =  30, 
    CV_REG_IP    =  31, 
    CV_REG_FLAGS =  32, 
    CV_REG_EIP   =  33, 
    CV_REG_EFLAGS = 34, 
    CV_REG_TEMP  =  40,         /* PCODE Temp */ 
    CV_REG_TEMPH =  41,         /* PCODE TempH */ 
    CV_REG_QUOTE =  42,         /* PCODE Quote */ 
    CV_REG_PCDR3 =  43,         /* PCODE reserved */ 
    CV_REG_PCDR4 =  44,         /* PCODE reserved */ 
    CV_REG_PCDR5 =  45,         /* PCODE reserved */ 
    CV_REG_PCDR6 =  46,         /* PCODE reserved */ 
    CV_REG_PCDR7 =  47,         /* PCODE reserved */ 
    CV_REG_CR0   =  80,         /* CR0 -- control registers */ 
    CV_REG_CR1   =  81, 
    CV_REG_CR2   =  82, 
    CV_REG_CR3   =  83, 
    CV_REG_DR0   =  90,         /* Debug register */ 
    CV_REG_DR1   =  91, 
    CV_REG_DR2   =  92, 
    CV_REG_DR3   =  93, 
    CV_REG_DR4   =  94, 
    CV_REG_DR5   =  95, 
    CV_REG_DR6   =  96, 
    CV_REG_DR7   =  97, 
    CV_REG_ST0   =  128, 
    CV_REG_ST1   =  129, 
    CV_REG_ST2   =  130, 
    CV_REG_ST3   =  131, 
    CV_REG_ST4   =  132, 
    CV_REG_ST5   =  133, 
    CV_REG_ST6   =  134, 
    CV_REG_ST7   =  135, 
    CV_REG_CTRL  =  136, 
    CV_REG_STAT  =  137, 
    CV_REG_TAG   =  138, 
    CV_REG_FPIP  =  139, 
    CV_REG_FPCS  =  140, 
    CV_REG_FPDO  =  141, 
    CV_REG_FPDS  =  142, 
    CV_REG_ISEM  =  143, 
    CV_REG_FPEIP =  144, 
    CV_REG_FPEDO =  145, 
 
    /* 
     * registers for the 68K processors 
     */ 
 
    CV_R68_D0   =   0, 
    CV_R68_D1   =   1, 
    CV_R68_D2   =   2, 
    CV_R68_D3   =   3, 
    CV_R68_D4   =   4, 
    CV_R68_D5   =   5, 
    CV_R68_D6   =   6, 
    CV_R68_D7   =   7, 
    CV_R68_A0   =   8, 
    CV_R68_A1   =   9, 
    CV_R68_A2   =   10, 
    CV_R68_A3   =   11, 
    CV_R68_A4   =   12, 
    CV_R68_A5   =   13, 
    CV_R68_A6   =   14, 
    CV_R68_A7   =   15, 
    CV_R68_CCR  =   16, 
    CV_R68_SR   =   17, 
    CV_R68_USP  =   18, 
    CV_R68_MSP  =   19, 
    CV_R68_SFC  =   20, 
    CV_R68_DFC  =   21, 
    CV_R68_CACR =   22, 
    CV_R68_VBR  =   23, 
    CV_R68_CAAR =   24, 
    CV_R68_ISP  =   25, 
    CV_R68_PC   =   26, 
                                /* reserved  27 */ 
    CV_R68_FPCR =   28, 
    CV_R68_FPSR =   29, 
    CV_R68_FPIAR=   30, 
                                /* reserved  31 */ 
    CV_R68_FP0  =   32, 
    CV_R68_FP1  =   33, 
    CV_R68_FP2  =   34, 
    CV_R68_FP3  =   35, 
    CV_R68_FP4  =   36, 
    CV_R68_FP5  =   37, 
    CV_R68_FP6  =   38, 
    CV_R68_FP7  =   39, 
                                /* reserved  40-50 */ 
    CV_R68_PSR  =   51, 
    CV_R68_PCSR =   52, 
    CV_R68_VAL  =   53, 
    CV_R68_CRP  =   54, 
    CV_R68_SRP  =   55, 
    CV_R68_DRP  =   56, 
    CV_R68_TC   =   57, 
    CV_R68_AC   =   58, 
    CV_R68_SCC  =   59, 
    CV_R68_CAL  =   60, 
    CV_R68_TT0  =   61, 
    CV_R68_TT1  =   62, 
                                /* reserved  63 */ 
    CV_R68_BAD0 =   64, 
    CV_R68_BAD1 =   65, 
    CV_R68_BAD2 =   66, 
    CV_R68_BAD3 =   67, 
    CV_R68_BAD4 =   68, 
    CV_R68_BAD5 =   69, 
    CV_R68_BAD6 =   70, 
    CV_R68_BAD7 =   71, 
    CV_R68_BAC0 =   72, 
    CV_R68_BAC1 =   73, 
    CV_R68_BAC2 =   74, 
    CV_R68_BAC3 =   75, 
    CV_R68_BAC4 =   76, 
    CV_R68_BAC5 =   77, 
    CV_R68_BAC6 =   78, 
    CV_R68_BAC7 =   79, 
 
    /* 
     * Register set for the MIPS 4000 
     */ 
 
    CV_M4_NOREG    =   CV_REG_NONE, 
 
    CV_M4_IntZERO  =   10,      /* CPU REGISTER */ 
    CV_M4_IntAT    =   11, 
    CV_M4_IntV0    =   12, 
    CV_M4_IntV1    =   13, 
    CV_M4_IntA0    =   14, 
    CV_M4_IntA1    =   15, 
    CV_M4_IntA2    =   16, 
    CV_M4_IntA3    =   17, 
    CV_M4_IntT0    =   18, 
    CV_M4_IntT1    =   19, 
    CV_M4_IntT2    =   20, 
    CV_M4_IntT3    =   21, 
    CV_M4_IntT4    =   22, 
    CV_M4_IntT5    =   23, 
    CV_M4_IntT6    =   24, 
    CV_M4_IntT7    =   25, 
    CV_M4_IntS0    =   26, 
    CV_M4_IntS1    =   27, 
    CV_M4_IntS2    =   28, 
    CV_M4_IntS3    =   29, 
    CV_M4_IntS4    =   30, 
    CV_M4_IntS5    =   31, 
    CV_M4_IntS6    =   32, 
    CV_M4_IntS7    =   33, 
    CV_M4_IntT8    =   34, 
    CV_M4_IntT9    =   35, 
    CV_M4_IntKT0   =   36, 
    CV_M4_IntKT1   =   37, 
    CV_M4_IntGP    =   38, 
    CV_M4_IntSP    =   39, 
    CV_M4_IntS8    =   40, 
    CV_M4_IntRA    =   41, 
    CV_M4_IntLO    =   42, 
    CV_M4_IntHI    =   43, 
 
    CV_M4_Fir      =   50, 
    CV_M4_Psr      =   51, 
 
    CV_M4_FltF0    =   60,      /* Floating point registers */ 
    CV_M4_FltF1    =   61, 
    CV_M4_FltF2    =   62, 
    CV_M4_FltF3    =   63, 
    CV_M4_FltF4    =   64, 
    CV_M4_FltF5    =   65, 
    CV_M4_FltF6    =   66, 
    CV_M4_FltF7    =   67, 
    CV_M4_FltF8    =   68, 
    CV_M4_FltF9    =   69, 
    CV_M4_FltF10   =   70, 
    CV_M4_FltF11   =   71, 
    CV_M4_FltF12   =   72, 
    CV_M4_FltF13   =   73, 
    CV_M4_FltF14   =   74, 
    CV_M4_FltF15   =   75, 
    CV_M4_FltF16   =   76, 
    CV_M4_FltF17   =   77, 
    CV_M4_FltF18   =   78, 
    CV_M4_FltF19   =   79, 
    CV_M4_FltF20   =   80, 
    CV_M4_FltF21   =   81, 
    CV_M4_FltF22   =   82, 
    CV_M4_FltF23   =   83, 
    CV_M4_FltF24   =   84, 
    CV_M4_FltF25   =   85, 
    CV_M4_FltF26   =   86, 
    CV_M4_FltF27   =   87, 
    CV_M4_FltF28   =   88, 
    CV_M4_FltF29   =   89, 
    CV_M4_FltF30   =   90, 
    CV_M4_FltF31   =   92, 
    CV_M4_FltFsr   =   93, 
 
    /* 
     * Register set for the ALPHA AXP 
     */ 
 
    CV_ALPHA_NOREG    = CV_REG_NONE, 
 
CV_ALPHA_FltF0  =   10,  /* Floating point registers */ 
CV_ALPHA_FltF1, // 11 
CV_ALPHA_FltF2, // 12 
CV_ALPHA_FltF3, // 13 
CV_ALPHA_FltF4, // 14 
CV_ALPHA_FltF5, // 15 
CV_ALPHA_FltF6, // 16 
CV_ALPHA_FltF7, // 17 
CV_ALPHA_FltF8, // 18 
CV_ALPHA_FltF9, // 19 
CV_ALPHA_FltF10,// 20 
CV_ALPHA_FltF11,// 21 
CV_ALPHA_FltF12,// 22 
CV_ALPHA_FltF13,// 23 
CV_ALPHA_FltF14,// 24 
CV_ALPHA_FltF15,// 25 
CV_ALPHA_FltF16,// 26 
CV_ALPHA_FltF17,// 27 
CV_ALPHA_FltF18,// 28 
CV_ALPHA_FltF19,// 29 
CV_ALPHA_FltF20,// 30 
CV_ALPHA_FltF21,// 31 
CV_ALPHA_FltF22,// 32 
CV_ALPHA_FltF23,// 33 
CV_ALPHA_FltF24,// 34 
CV_ALPHA_FltF25,// 35 
CV_ALPHA_FltF26,// 36 
CV_ALPHA_FltF27,// 37 
CV_ALPHA_FltF28,// 38 
CV_ALPHA_FltF29,// 39 
CV_ALPHA_FltF30,// 30 
CV_ALPHA_FltF31,// 41 
 
CV_ALPHA_IntV0, // 42Integer registers 
CV_ALPHA_IntT0, // 43 
CV_ALPHA_IntT1, // 44 
CV_ALPHA_IntT2, // 45 
CV_ALPHA_IntT3, // 46 
CV_ALPHA_IntT4, // 47 
CV_ALPHA_IntT5, // 48 
CV_ALPHA_IntT6, // 49 
CV_ALPHA_IntT7, // 50 
CV_ALPHA_IntS0, // 51 
CV_ALPHA_IntS1, // 52 
CV_ALPHA_IntS2, // 53 
CV_ALPHA_IntS3, // 54 
CV_ALPHA_IntS4, // 55 
CV_ALPHA_IntS5, // 56 
CV_ALPHA_IntFP, // 57 
CV_ALPHA_IntA0, // 58 
CV_ALPHA_IntA1, // 59 
CV_ALPHA_IntA2, // 60 
CV_ALPHA_IntA3, // 61 
CV_ALPHA_IntA4, // 62 
CV_ALPHA_IntA5, // 63 
CV_ALPHA_IntT8, // 64 
CV_ALPHA_IntT9, // 65 
CV_ALPHA_IntT10,// 66 
CV_ALPHA_IntT11,// 67 
CV_ALPHA_IntRA, // 68 
CV_ALPHA_IntT12,// 69 
CV_ALPHA_IntAT, // 70 
CV_ALPHA_IntGP, // 71 
CV_ALPHA_IntSP, // 72 
CV_ALPHA_IntZERO,// 73 
 
 
CV_ALPHA_Fpcr,// 74Control registers 
CV_ALPHA_Fir,// 75 
CV_ALPHA_Psr,// 76 
CV_ALPHA_FltFsr // 77 
 
} CV_HREG_e; 
 
 
#pragma pack() 
 
#endif /* CV_INFO_INCLUDED */