⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvinfo.h

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 H
📖 第 1 页 / 共 5 页
字号:
/***    cvinfo.h - Generic CodeView information definitions
 *
 *      Structures, constants, etc. for accessing and interpreting
 *      CodeView information.
 *
 */

#ifndef _CV_INFO_INCLUDED
    #define _CV_INFO_INCLUDED

    #ifndef __INLINE
        #define __INLINE
    #endif 

    #ifdef __CCDL__
        #pragma pack(1)
    #endif 

    typedef unsigned long CV_uoff32_t;
    typedef long CV_off32_t;
    typedef unsigned short CV_uoff16_t;
    typedef short CV_off16_t;
    typedef unsigned int CV_typ_t;

    #if !defined (CV_ZEROLEN)
        #define CV_ZEROLEN 1 
    #endif 

    #if !defined (FLOAT10)
        //#if defined (_M_ALPHA) ||  \
        //    defined (_M_MRX000) || \
        //    ((_MSC_VER >= 800) &&  \
        //     defined(_M_IX86) &&   \
        //     (_M_IX86 >= 300))
        // above ifdef tests for 32-bit compiler and existence of long double support
        //typedef struct {
        //    char b[10];
        //} FLOAT10;

        //#else
        typedef long double FLOAT10;
        //#endif
        //typedef FLOAT10 REAL10;
    #endif 


    #define CV_SIGNATURE_C6         0L  // Actual signature is >64K
    #define CV_SIGNATURE_C7         1L  // First explicit signature
    #define CV_SIGNATURE_32BIT	2L  // 32 bit signature
    #define CV_SIGNATURE_RESERVED   3L  
        // 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 type information
     *      that is frequently used.  Type indices above 0x1000 are used to
     *      describe more complex features such as functions, 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

    #if CC_BIGINT
        // can we use the reserved bit ??
        #define CV_SMASK        0x008   // subtype mask
    #else 
        #define CV_SMASK        0x007   // subtype mask
    #endif 

    #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)     ((CV_typ_t)(((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
        #if CC_BIGINT
            , CV_TM_NPTR128 = 7  // mode is a 128 bit near pointer
        #endif 
    } 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_IMAGINARY = 0x08, // imaginary types DAL
        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 
        #if CC_BIGINT
            , CV_IN_16BYTE = 0x04 
        #endif 
    } 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_INT1 = 0x00, CV_RI_WCHAR = 0x01, CV_RI_UINT1 =
            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 
        #if CC_BIGINT
            , CV_RI_INT16 = 0x08, CV_RI_UINT16 = 0x09 
        #endif 
    } 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)

    #if CC_BIGINT
        #define CV_TYP_IS_SIGNED(typ)   (((CV_TYPE(typ) == CV_SIGNED)  &&
            CV_TYP_IS_DIRECT(typ)) || \
        (typ == T_INT1) || \
        (typ == T_INT2) || \
        (typ == T_INT4) || \
        (typ == T_INT8) || \
        (typ == T_INT16) || \
        (typ == T_RCHAR))
        #define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED)  && \
		CV_TYP_IS_DIRECT(typ)) || \
        (typ == T_UINT1) || \
        (typ == T_UINT2) || \
        (typ == T_UINT4) || \
        (typ == T_UINT8) || \
        (typ == T_UINT16))
    #else 
        #define CV_TYP_IS_SIGNED(typ)   (((CV_TYPE(typ) == CV_SIGNED)  && \
		CV_TYP_IS_DIRECT(typ)) || \
        (typ == T_INT1) || \
        (typ == T_INT2) || \
        (typ == T_INT4) || \
        (typ == T_RCHAR))

        #define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED)  && \
        CV_TYP_IS_DIRECT(typ)) || \
        (typ == T_UINT1) || \
        (typ == T_UINT2) || \
        (typ == T_UINT4))
    #endif 
    #define CV_TYP_IS_REAL(typ)     ((CV_TYPE(typ) == CV_REAL)  && \
        CV_TYP_IS_DIRECT(typ))
    #define CV_TYP_IS_IMAGINARY(typ) ((CV_TYPE(typ) == CV_IMAGINARY)  && \
        CV_TYP_IS_DIRECT(typ))

    #define CV_FIRST_NONPRIM 0x1000
    #define CV_IS_PRIMITIVE(typ)    ((typ) < CV_FIRST_NONPRIM)
    #define CV_TYP_IS_COMPLEX(typ)  ((CV_TYPE(typ) == CV_COMPLEX)   && \
        CV_TYP_IS_DIRECT(typ))



    // 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

    #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


    //      8 bit int types


    #define T_INT1          0x0068  // 8 bit signed int
    #define T_UINT1         0x0069  // 8 bit unsigned int
    #define T_PINT1         0x0168  // near pointer to 8 bit signed int
    #define T_PUINT1        0x0169  // near pointer to 8 bit unsigned int
    #define T_PFINT1        0x0268  // far pointer to 8 bit signed int
    #define T_PFUINT1       0x0269  // far pointer to 8 bit unsigned int
    #define T_PHINT1        0x0368  // huge pointer to 8 bit signed int
    #define T_PHUINT1       0x0369  // huge pointer to 8 bit unsigned int

    #define T_32PINT1       0x0468  // 16:32 near pointer to 8 bit signed int
    #define T_32PUINT1      0x0469  // 16:32 near pointer to 8 bit unsigned int
    #define T_32PFINT1      0x0568  // 16:32 far pointer to 8 bit signed int
    #define T_32PFUINT1     0x0569  // 16:32 far pointer to 8 bit unsigned int


    //      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_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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -