Annotation of os232sdk/toolkt20/c/os2h/exe386.h, revision 1.1

1.1     ! root        1: /*static char *SCCSID = "@(#)exe386.h  13.14 90/04/17";*/
        !             2: 
        !             3: /*
        !             4:  *  Title
        !             5:  *
        !             6:  *     exe386.h
        !             7:  *     (C) Copyright Microsoft Corp 1988
        !             8:  *
        !             9:  *  Description
        !            10:  *
        !            11:  *     Data structure definitions for the OS/2
        !            12:  *     executable file format (flat model).
        !            13:  *
        !            14:  */
        !            15: 
        !            16: 
        !            17: 
        !            18:     /*_________________________________________________________________*
        !            19:      |                                                                 |
        !            20:      |                                                                 |
        !            21:      | OS/2 .EXE FILE HEADER DEFINITION - 386 version 0:32            |
        !            22:      |                                                                 |
        !            23:      |_________________________________________________________________|
        !            24:      *                                                                 */
        !            25: 
        !            26: 
        !            27: #define BITPERWORD     16
        !            28: #define BITPERBYTE     8
        !            29: #define OBJPAGELEN     4096
        !            30: #define E32MAGIC1      'L'             /* New magic number  "LE" */
        !            31: #define E32MAGIC2      'E'             /* New magic number  "LE" */
        !            32: #define E32MAGIC        0x454c          /* New magic number  "LE" */
        !            33: #define E32RESBYTES1    0               /* First bytes reserved */
        !            34: #define E32RESBYTES2   0               /* Second bytes reserved */
        !            35: #define E32RESBYTES3   24              /* Third bytes reserved */
        !            36: #define E32LEBO        0x00            /* Little Endian Byte Order */
        !            37: #define E32BEBO        0x01            /* Big Endian Byte Order */
        !            38: #define E32LEWO        0x00            /* Little Endian Word Order */
        !            39: #define E32BEWO        0x01            /* Big Endian Word Order */
        !            40: #define E32LEVEL       0L              /* 32-bit EXE format level */
        !            41: #define E32CPU286      0x001           /* Intel 80286 or upwardly compatibile */
        !            42: #define E32CPU386      0x002           /* Intel 80386 or upwardly compatibile */
        !            43: #define E32CPU486      0x003           /* Intel 80486 or upwardly compatibile */
        !            44: 
        !            45: 
        !            46: 
        !            47: struct e32_exe                         /* New 32-bit .EXE header */
        !            48: {
        !            49:     unsigned char      e32_magic[2];   /* Magic number E32_MAGIC */
        !            50:     unsigned char      e32_border;     /* The byte ordering for the .EXE */
        !            51:     unsigned char      e32_worder;     /* The word ordering for the .EXE */
        !            52:     unsigned long      e32_level;      /* The EXE format level for now = 0 */
        !            53:     unsigned short     e32_cpu;        /* The CPU type */
        !            54:     unsigned short     e32_os;         /* The OS type */
        !            55:     unsigned long      e32_ver;        /* Module version */
        !            56:     unsigned long      e32_mflags;     /* Module flags */
        !            57:     unsigned long      e32_mpages;     /* Module # pages */
        !            58:     unsigned long      e32_startobj;   /* Object # for instruction pointer */
        !            59:     unsigned long      e32_eip;        /* Extended instruction pointer */
        !            60:     unsigned long      e32_stackobj;   /* Object # for stack pointer */
        !            61:     unsigned long      e32_esp;        /* Extended stack pointer */
        !            62:     unsigned long      e32_pagesize;   /* .EXE page size */
        !            63:     unsigned long       e32_lastpagesize;/* Last page size in .EXE */
        !            64:     unsigned long      e32_fixupsize;  /* Fixup section size */
        !            65:     unsigned long      e32_fixupsum;   /* Fixup section checksum */
        !            66:     unsigned long      e32_ldrsize;    /* Loader section size */
        !            67:     unsigned long      e32_ldrsum;     /* Loader section checksum */
        !            68:     unsigned long      e32_objtab;     /* Object table offset */
        !            69:     unsigned long      e32_objcnt;     /* Number of objects in module */
        !            70:     unsigned long      e32_objmap;     /* Object page map offset */
        !            71:     unsigned long      e32_itermap;    /* Object iterated data map offset */
        !            72:     unsigned long      e32_rsrctab;    /* Offset of Resource Table */
        !            73:     unsigned long      e32_rsrccnt;    /* Number of resource entries */
        !            74:     unsigned long      e32_restab;     /* Offset of resident name table */
        !            75:     unsigned long      e32_enttab;     /* Offset of Entry Table */
        !            76:     unsigned long      e32_dirtab;     /* Offset of Module Directive Table */
        !            77:     unsigned long      e32_dircnt;     /* Number of module directives */
        !            78:     unsigned long      e32_fpagetab;   /* Offset of Fixup Page Table */
        !            79:     unsigned long      e32_frectab;    /* Offset of Fixup Record Table */
        !            80:     unsigned long      e32_impmod;     /* Offset of Import Module Name Table */
        !            81:     unsigned long      e32_impmodcnt;  /* Number of entries in Import Module Name Table */
        !            82:     unsigned long      e32_impproc;    /* Offset of Import Procedure Name Table */
        !            83:     unsigned long      e32_pagesum;    /* Offset of Per-Page Checksum Table */
        !            84:     unsigned long      e32_datapage;   /* Offset of Enumerated Data Pages */
        !            85:     unsigned long      e32_preload;    /* Number of preload pages */
        !            86:     unsigned long      e32_nrestab;    /* Offset of Non-resident Names Table */
        !            87:     unsigned long      e32_cbnrestab;  /* Size of Non-resident Name Table */
        !            88:     unsigned long      e32_nressum;    /* Non-resident Name Table Checksum */
        !            89:     unsigned long      e32_autodata;   /* Object # for automatic data object */
        !            90:     unsigned long      e32_debuginfo;  /* Offset of the debugging information */
        !            91:     unsigned long      e32_debuglen;   /* The length of the debugging info. in bytes */
        !            92:     unsigned long      e32_instpreload;/* Number of instance pages in preload section of .EXE file */
        !            93:     unsigned long      e32_instdemand; /* Number of instance pages in demand load section of .EXE file */
        !            94:     unsigned long      e32_heapsize;   /* Size of heap - for 16-bit apps */
        !            95:     unsigned char      e32_res3[E32RESBYTES3];
        !            96:                                        /* Pad structure to 196 bytes */
        !            97:   };
        !            98: 
        !            99: 
        !           100: 
        !           101: #define E32_MAGIC1(x)      (x).e32_magic[0]
        !           102: #define E32_MAGIC2(x)      (x).e32_magic[1]
        !           103: #define E32_BORDER(x)      (x).e32_border
        !           104: #define E32_WORDER(x)      (x).e32_worder
        !           105: #define E32_LEVEL(x)       (x).e32_level
        !           106: #define E32_CPU(x)         (x).e32_cpu
        !           107: #define E32_OS(x)          (x).e32_os
        !           108: #define E32_VER(x)         (x).e32_ver
        !           109: #define E32_MFLAGS(x)      (x).e32_mflags
        !           110: #define E32_MPAGES(x)      (x).e32_mpages
        !           111: #define E32_STARTOBJ(x)     (x).e32_startobj
        !           112: #define E32_EIP(x)         (x).e32_eip
        !           113: #define E32_STACKOBJ(x)     (x).e32_stackobj
        !           114: #define E32_ESP(x)         (x).e32_esp
        !           115: #define E32_PAGESIZE(x)     (x).e32_pagesize
        !           116: #define E32_LASTPAGESIZE(x) (x).e32_lastpagesize
        !           117: #define E32_FIXUPSIZE(x)    (x).e32_fixupsize
        !           118: #define E32_FIXUPSUM(x)     (x).e32_fixupsum
        !           119: #define E32_LDRSIZE(x)     (x).e32_ldrsize
        !           120: #define E32_LDRSUM(x)      (x).e32_ldrsum
        !           121: #define E32_OBJTAB(x)      (x).e32_objtab
        !           122: #define E32_OBJCNT(x)      (x).e32_objcnt
        !           123: #define E32_OBJMAP(x)      (x).e32_objmap
        !           124: #define E32_ITERMAP(x)     (x).e32_itermap
        !           125: #define E32_RSRCTAB(x)     (x).e32_rsrctab
        !           126: #define E32_RSRCCNT(x)     (x).e32_rsrccnt
        !           127: #define E32_RESTAB(x)      (x).e32_restab
        !           128: #define E32_ENTTAB(x)      (x).e32_enttab
        !           129: #define E32_DIRTAB(x)      (x).e32_dirtab
        !           130: #define E32_DIRCNT(x)      (x).e32_dircnt
        !           131: #define E32_FPAGETAB(x)     (x).e32_fpagetab
        !           132: #define E32_FRECTAB(x)     (x).e32_frectab
        !           133: #define E32_IMPMOD(x)      (x).e32_impmod
        !           134: #define E32_IMPMODCNT(x)    (x).e32_impmodcnt
        !           135: #define E32_IMPPROC(x)     (x).e32_impproc
        !           136: #define E32_PAGESUM(x)     (x).e32_pagesum
        !           137: #define E32_DATAPAGE(x)     (x).e32_datapage
        !           138: #define E32_PRELOAD(x)     (x).e32_preload
        !           139: #define E32_NRESTAB(x)     (x).e32_nrestab
        !           140: #define E32_CBNRESTAB(x)    (x).e32_cbnrestab
        !           141: #define E32_NRESSUM(x)     (x).e32_nressum
        !           142: #define E32_AUTODATA(x)     (x).e32_autodata
        !           143: #define E32_DEBUGINFO(x)    (x).e32_debuginfo
        !           144: #define E32_DEBUGLEN(x)     (x).e32_debuglen
        !           145: #define E32_INSTPRELOAD(x)  (x).e32_instpreload
        !           146: #define E32_INSTDEMAND(x)   (x).e32_instdemand
        !           147: #define E32_HEAPSIZE(x)     (x).e32_heapsize
        !           148: 
        !           149: 
        !           150: 
        !           151: /*
        !           152:  *  Format of E32_MFLAGS(x):
        !           153:  *
        !           154:  *  Low word has the following format:
        !           155:  *
        !           156:  *  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  - bit no
        !           157:  *   |    |        | | |     | |   |
        !           158:  *   |    |        | | |     | |   +------- Per-Process Library Initialization
        !           159:  *   |    |        | | |     | +----------- No Internal Fixups for Module in .EXE
        !           160:  *   |    |        | | |     +------------- No External Fixups for Module in .EXE
        !           161:  *   |    |        | | +------------------- Incompatible with PM Windowing
        !           162:  *   |    |        | +--------------------- Compatible with PM Windowing
        !           163:  *   |    |        +----------------------- Uses PM Windowing API
        !           164:  *   |    +-------------------------------- Module not Loadable
        !           165:  *   +-------------------------------------- Library Module
        !           166:  */
        !           167: 
        !           168: 
        !           169: #define E32NOTP         0x8000L        /* Library Module - used as NENOTP */
        !           170: #define E32NOLOAD       0x2000L        /* Module not Loadable */
        !           171: #define E32PMAPI        0x0300L        /* Uses PM Windowing API */
        !           172: #define E32PMW          0x0200L        /* Compatible with PM Windowing */
        !           173: #define E32NOPMW        0x0100L        /* Incompatible with PM Windowing */
        !           174: #define E32NOEXTFIX     0x0020L        /* NO External Fixups in .EXE */
        !           175: #define E32NOINTFIX     0x0010L        /* NO Internal Fixups in .EXE */
        !           176: #define E32LIBINIT      0x0004L        /* Per-Process Library Initialization */
        !           177: #define E32APPMASK      0x0700L        /* Aplication Type Mask */
        !           178: 
        !           179: 
        !           180: /*
        !           181:  *  Format of E32_MFLAGS(x):
        !           182:  *
        !           183:  *  High word has the following format:
        !           184:  *
        !           185:  *  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  - bit no
        !           186:  *                                   | |
        !           187:  *                                   | +--- Protected memory library module
        !           188:  *                                   +----- Device driver
        !           189:  */
        !           190: 
        !           191: #define E32PROTDLL      0x10000L       // Protected memory library module
        !           192: #define E32DEVICE       0x20000L       // Device driver
        !           193: #define E32MODEXE       0x00000L       // .EXE module
        !           194: #define E32MODDLL       0x08000L       // .DLL module
        !           195: #define E32MODPROTDLL   0x18000L       // Protected memory library module
        !           196: #define E32MODPDEV      0x20000L       // Physical device driver
        !           197: #define E32MODVDEV      0x28000L       // Virtual device driver
        !           198: #define E32MODMASK      0x38000L       // Module type mask
        !           199: 
        !           200: /*
        !           201:  *  RELOCATION DEFINITIONS - RUN-TIME FIXUPS
        !           202:  */
        !           203: 
        !           204: 
        !           205: #pragma pack(1)                        /* This data must be packed */
        !           206: 
        !           207: 
        !           208: typedef union _offset
        !           209: {
        !           210:     unsigned short offset16;
        !           211:     unsigned long  offset32;
        !           212: }
        !           213:     offset;                            /* 16-bit or 32-bit offset */
        !           214: 
        !           215: 
        !           216: /***ET+        r32_rlc - Relocation item */
        !           217: 
        !           218: struct r32_rlc                         /* Relocation item */
        !           219: {
        !           220:     unsigned char      nr_stype;       /* Source type - field shared with new_rlc */
        !           221:     unsigned char      nr_flags;       /* Flag byte - field shared with new_rlc */
        !           222:     short              r32_soff;       /* Source offset */
        !           223:     unsigned short     r32_objmod;     /* Target object number or Module ordinal */
        !           224: 
        !           225:     union targetid
        !           226:     {
        !           227:        offset             intref;      /* Internal fixup */
        !           228: 
        !           229:        union extfixup
        !           230:        {
        !           231:            offset         proc;        /* Procedure name offset */
        !           232:            unsigned long  ord;         /* Procedure odrinal */
        !           233:        }
        !           234:                           extref;      /* External fixup */
        !           235: 
        !           236:        struct addfixup
        !           237:        {
        !           238:            unsigned short entry;       /* Entry ordinal */
        !           239:            offset         addval;      /* Value added to the address */
        !           240:        }
        !           241:                           addfix;      /* Additive fixup */
        !           242:     }
        !           243:                        r32_target;     /* Target data */
        !           244:     unsigned short     r32_srccount;   /* Number of chained fixup records */
        !           245:     unsigned short     r32_chain;      /* Chain head */
        !           246: };
        !           247: 
        !           248: 
        !           249: #pragma pack()                         /* Stop packing */
        !           250: 
        !           251: 
        !           252: /*
        !           253:  *  In 32-bit .EXE file run-time relocations are written as varying size
        !           254:  *  records, so we need many size definitions.
        !           255:  */
        !           256: 
        !           257: #define RINTSIZE16     8
        !           258: #define RINTSIZE32     10
        !           259: #define RORDSIZE       8
        !           260: #define RNAMSIZE16     8
        !           261: #define RNAMSIZE32     10
        !           262: #define RADDSIZE16     10
        !           263: #define RADDSIZE32     12
        !           264: 
        !           265: 
        !           266: 
        !           267: #if FALSE
        !           268: /*
        !           269:  *  Access macros defined in NEWEXE.H !!!
        !           270:  */
        !           271: #define NR_STYPE(x)     (x).nr_stype
        !           272: #define NR_FLAGS(x)     (x).nr_flags
        !           273: #endif
        !           274: 
        !           275: #define R32_SOFF(x)     (x).r32_soff
        !           276: #define R32_OBJNO(x)    (x).r32_objmod
        !           277: #define R32_MODORD(x)   (x).r32_objmod
        !           278: #define R32_OFFSET16(x)  (x).r32_target.intref.offset16
        !           279: #define R32_OFFSET32(x)  (x).r32_target.intref.offset32
        !           280: #define R32_PROCOFF16(x) (x).r32_target.extref.proc.offset16
        !           281: #define R32_PROCOFF32(x) (x).r32_target.extref.proc.offset32
        !           282: #define R32_PROCORD(x)  (x).r32_target.extref.ord
        !           283: #define R32_ENTRY(x)    (x).r32_target.addfix.entry
        !           284: #define R32_ADDVAL16(x)  (x).r32_target.addfix.addval.offset16
        !           285: #define R32_ADDVAL32(x)  (x).r32_target.addfix.addval.offset32
        !           286: #define R32_SRCCNT(x)   (x).r32_srccount
        !           287: #define R32_CHAIN(x)    (x).r32_chain
        !           288: 
        !           289: 
        !           290: 
        !           291: /*
        !           292:  *  Format of NR_STYPE(x)
        !           293:  *
        !           294:  *      7 6 5 4 3 2 1 0  - bit no
        !           295:  *          | | | | | |
        !           296:  *          | | +-+-+-+--- Source type
        !           297:  *          | +----------- Fixup to 16:16 alias
        !           298:  *          +------------- List of source offset follows fixup record
        !           299:  */
        !           300: 
        !           301: #if FALSE
        !           302: 
        !           303:            /* DEFINED in newexe.h !!! */
        !           304: 
        !           305: #define NRSTYP         0x0f            /* Source type mask */
        !           306: #define NRSBYT         0x00            /* lo byte (8-bits)*/
        !           307: #define NRSSEG         0x02            /* 16-bit segment (16-bits) */
        !           308: #define NRSPTR         0x03            /* 16:16 pointer (32-bits) */
        !           309: #define NRSOFF         0x05            /* 16-bit offset (16-bits) */
        !           310: #define NRPTR48        0x06            /* 16:32 pointer (48-bits) */
        !           311: #define NROFF32        0x07            /* 32-bit offset (32-bits) */
        !           312: #define NRSOFF32       0x08            /* 32-bit self-relative offset (32-bits) */
        !           313: #endif
        !           314: 
        !           315: 
        !           316: #define NRSRCMASK      0x0f            /* Source type mask */
        !           317: #define NRALIAS        0x10            /* Fixup to alias */
        !           318: #define NRCHAIN        0x20            /* List of source offset follows */
        !           319:                                        /* fixup record, source offset field */
        !           320:                                        /* in fixup record contains number */
        !           321:                                        /* of elements in list */
        !           322: 
        !           323: /*
        !           324:  *  Format of NR_FLAGS(x) and R32_FLAGS(x):
        !           325:  *
        !           326:  *      7 6 5 4 3 2 1 0  - bit no
        !           327:  *      | | | |   | | |
        !           328:  *      | | | |   | +-+--- Reference type
        !           329:  *      | | | |   +------- Additive fixup
        !           330:  *      | | | +----------- 32-bit Target Offset Flag (1 - 32-bit; 0 - 16-bit)
        !           331:  *      | | +------------- 32-bit Additive Flag (1 - 32-bit; 0 - 16-bit)
        !           332:  *      | +--------------- 16-bit Object/Module ordinal (1 - 16-bit; 0 - 8-bit)
        !           333:  *      +----------------- 8-bit import ordinal (1 - 8-bit;
        !           334:  *                                               0 - NR32BITOFF toggles
        !           335:  *                                                   between 16 and 32 bit
        !           336:  *                                                   ordinal)
        !           337:  */
        !           338: 
        !           339: #if FALSE
        !           340: 
        !           341:            /* DEFINED in newexe.h !!! */
        !           342: 
        !           343: #define NRADD          0x04            /* Additive fixup */
        !           344: #define NRRTYP         0x03            /* Reference type mask */
        !           345: #define NRRINT         0x00            /* Internal reference */
        !           346: #define NRRORD         0x01            /* Import by ordinal */
        !           347: #define NRRNAM         0x02            /* Import by name */
        !           348: #endif
        !           349: 
        !           350: #define NRRENT         0x03            /* Internal entry table fixup */
        !           351: 
        !           352: #define NR32BITOFF     0x10            /* 32-bit Target Offset */
        !           353: #define NR32BITADD     0x20            /* 32-bit Additive fixup */
        !           354: #define NR16OBJMOD     0x40            /* 16-bit Object/Module ordinal */
        !           355: #define NR8BITORD      0x80            /* 8-bit import ordinal */
        !           356: /*end*/
        !           357: 
        !           358: /*
        !           359:  *  Data structures for storing run-time fixups in linker virtual memory.
        !           360:  *
        !           361:  *  Each object has a list of Object Page Directories which specify
        !           362:  *  fixups for given page. Each page has its own hash table which is
        !           363:  *  used to detect fixups to the same target.
        !           364:  */
        !           365: 
        !           366: #define PAGEPERDIR     62
        !           367: #define LG2DIR         7
        !           368: 
        !           369: 
        !           370: typedef struct _OBJPAGEDIR
        !           371: {
        !           372:     DWORD   next;                      /* Virtual pointer to next dir on list */
        !           373:     WORD    ht[PAGEPERDIR];            /* Pointers to individual hash tables */
        !           374: }
        !           375:     OBJPAGEDIR;
        !           376: 
        !           377: 
        !           378: 
        !           379: /*
        !           380:  *  OBJECT TABLE
        !           381:  */
        !           382: 
        !           383: /***ET+        o32_obj Object Table Entry */
        !           384: 
        !           385: struct o32_obj                         /* Flat .EXE object table entry */
        !           386: {
        !           387:     unsigned long      o32_size;       /* Object virtual size */
        !           388:     unsigned long      o32_base;       /* Object base virtual address */
        !           389:     unsigned long      o32_flags;      /* Attribute flags */
        !           390:     unsigned long      o32_pagemap;    /* Object page map index */
        !           391:     unsigned long      o32_mapsize;    /* Number of entries in object page map */
        !           392:     unsigned long      o32_reserved;   /* Reserved */
        !           393: };
        !           394: 
        !           395: 
        !           396: #define O32_SIZE(x)    (x).o32_size
        !           397: #define O32_BASE(x)    (x).o32_base
        !           398: #define O32_FLAGS(x)   (x).o32_flags
        !           399: #define O32_PAGEMAP(x) (x).o32_pagemap
        !           400: #define O32_MAPSIZE(x) (x).o32_mapsize
        !           401: #define O32_RESERVED(x) (x).o32_reserved
        !           402: 
        !           403: 
        !           404: 
        !           405: /*
        !           406:  *  Format of O32_FLAGS(x)
        !           407:  *
        !           408:  *  High word of dword flag field is not used for now.
        !           409:  *  Low word has the following format:
        !           410:  *
        !           411:  *  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  - bit no
        !           412:  *   | |  |  |     | | | | | | | | | | |
        !           413:  *   | |  |  |     | | | | | | | | | | +--- Readable Object
        !           414:  *   | |  |  |     | | | | | | | | | +----- Writeable Object
        !           415:  *   | |  |  |     | | | | | | | | +------- Executable Object
        !           416:  *   | |  |  |     | | | | | | | +--------- Resource Object
        !           417:  *   | |  |  |     | | | | | | +----------- Object is Discardable
        !           418:  *   | |  |  |     | | | | | +------------- Object is Shared
        !           419:  *   | |  |  |     | | | | +--------------- Object has preload pages
        !           420:  *   | |  |  |     | | | +----------------- Object has invalid pages
        !           421:  *   | |  |  |     | | +------------------- Object is permanent and swappable
        !           422:  *   | |  |  |     | +--------------------- Object is permanent and resident
        !           423:  *   | |  |  |     +----------------------- Object is permanent and long lockable
        !           424:  *   | |  |  +----------------------------- 16:16 alias required (80x86 specific)
        !           425:  *   | |  +-------------------------------- Big/Default bit setting (80x86 specific)
        !           426:  *   | +----------------------------------- Object is conforming for code (80x86 specific)
        !           427:  *   +-------------------------------------- Object I/O privilege level (80x86 specific)
        !           428:  *
        !           429:  */
        !           430: 
        !           431: #define OBJREAD        0x0001L             /* Readable Object   */
        !           432: #define OBJWRITE       0x0002L             /* Writeable Object  */
        !           433: #define OBJRSRC        0x0008L             /* Resource Object   */
        !           434: #define OBJINVALID     0x0080L             /* Object has invalid pages  */
        !           435: #define OBJNONPERM     0x0000L             /* Object is nonpermanent */
        !           436: #define OBJPERM        0x0100L             /* Object is permanent and swappable */
        !           437: #define OBJRESIDENT    0x0200L             /* Object is permanent and resident */
        !           438: #define OBJCONTIG      0x0300L             /* Object is resident and contiguous */
        !           439: #define OBJDYNAMIC     0x0400L             /* Object is permanent and long locable */
        !           440: #define OBJTYPEMASK    0x0700L             /* Object type mask */
        !           441: #define OBJALIAS16     0x1000L             /* 16:16 alias required (80x86 specific)           */
        !           442: #define OBJBIGDEF      0x2000L             /* Big/Default bit setting (80x86 specific)        */
        !           443: #define OBJIOPL        0x8000L             /* Object I/O privilege level (80x86 specific)     */
        !           444: #if FOR_EXEHDR
        !           445: /*
        !           446:  *  Name these flags differently for EXEHDR.EXE - avoid conflicts with 286 version
        !           447:  */
        !           448: #define OBJDISCARD      0x0010L            /* Object is Discardable */
        !           449: #define OBJSHARED       0x0020L            /* Object is Shared */
        !           450: #define OBJPRELOAD      0x0040L            /* Object has preload pages  */
        !           451: #define OBJEXEC         0x0004L            /* Executable Object */
        !           452: #define OBJCONFORM      0x4000L            /* Object is conforming for code (80x86 specific)  */
        !           453: #else
        !           454: /*
        !           455:  *  Life will be easier, if we keep the same names for the following flags:
        !           456:  */
        !           457: #define NSDISCARD      0x0010L             /* Object is Discardable */
        !           458: #define NSMOVE         NSDISCARD           /* Moveable object is for sure Discardable */
        !           459: #define NSSHARED       0x0020L             /* Object is Shared */
        !           460: #define NSPRELOAD      0x0040L             /* Object has preload pages  */
        !           461: #define NSEXRD         0x0004L             /* Executable Object */
        !           462: #define NSCONFORM      0x4000L             /* Object is conforming for code (80x86 specific)  */
        !           463: #endif
        !           464: /*end*/
        !           465: 
        !           466: /***ET+        o32_map - Object Page Map entry */
        !           467: 
        !           468: struct o32_map                             /* Object Page Map entry */
        !           469: {
        !           470:     unsigned char   o32_pageidx[3];        /* 24-bit page # in .EXE file */
        !           471:     unsigned char   o32_pageflags;         /* Per-Page attributes */
        !           472: };
        !           473: 
        !           474: 
        !           475: #define GETPAGEIDX(x)  ((((unsigned long)((x).o32_pageidx[0])) << BITPERWORD) + \
        !           476:                         (((x).o32_pageidx[1]) << BITPERBYTE) + \
        !           477:                           (x).o32_pageidx[2])
        !           478: 
        !           479: #define PUTPAGEIDX(x,i) ((x).o32_pageidx[0] = (unsigned char) ((unsigned long)(i) >> BITPERWORD), \
        !           480:                         (x).o32_pageidx[1] = (unsigned char) ((i) >> BITPERBYTE), \
        !           481:                         (x).o32_pageidx[2] = (unsigned char) ((i) &  0xff))
        !           482: 
        !           483: #define PAGEFLAGS(x)   (x).o32_pageflags
        !           484: 
        !           485: 
        !           486: #define VALID          0x00                /* Valid Physical Page in .EXE */
        !           487: #define ITERDATA       0x01                /* Iterated Data Page */
        !           488: #define INVALID        0x02                /* Invalid Page */
        !           489: #define ZEROED         0x03                /* Zero Filled Page */
        !           490: #define RANGE          0x04                /* Range of pages */
        !           491: /*end*/
        !           492: 
        !           493: /*
        !           494:  *  RESOURCE TABLE
        !           495:  */
        !           496: 
        !           497: /***ET+        rsrc32 - Resource Table Entry */
        !           498: 
        !           499: struct rsrc32                              /* Resource Table Entry */
        !           500: {
        !           501:     unsigned short     type;               /* Resource type */
        !           502:     unsigned short     name;               /* Resource name */
        !           503:     unsigned long      cb;                 /* Resource size */
        !           504:     unsigned short     obj;                /* Object number */
        !           505:     unsigned long      offset;             /* Offset within object */
        !           506: };
        !           507: /*end*/
        !           508: 
        !           509: 
        !           510: #pragma pack(1)                        /* This data must be packed */
        !           511: 
        !           512: /*
        !           513:  *  ENTRY TABLE DEFINITIONS
        !           514:  */
        !           515: 
        !           516: /***ET+        b32_bundle - Entry Table */
        !           517: 
        !           518: struct b32_bundle
        !           519: {
        !           520:     unsigned char      b32_cnt;        /* Number of entries in this bundle */
        !           521:     unsigned char      b32_type;       /* Bundle type */
        !           522:     unsigned short     b32_obj;        /* Object number */
        !           523: };                                     /* Follows entry types */
        !           524: 
        !           525: struct e32_entry
        !           526: {
        !           527:     unsigned char      e32_flags;      /* Entry point flags */
        !           528:     union entrykind
        !           529:     {
        !           530:        offset          e32_offset;     /* 16-bit/32-bit offset entry */
        !           531:        struct callgate
        !           532:        {
        !           533:            unsigned short offset;      /* Offset in segment */
        !           534:            unsigned short callgate;    /* Callgate selector */
        !           535:        }
        !           536:                        e32_callgate;   /* 286 (16-bit) call gate */
        !           537:        struct fwd
        !           538:        {
        !           539:            unsigned short  modord;     /* Module ordinal number */
        !           540:            unsigned long   value;      /* Proc name offset or ordinal */
        !           541:        }
        !           542:                        e32_fwd;        /* Forwarder */
        !           543:     }
        !           544:                        e32_variant;    /* Entry variant */
        !           545: };
        !           546: 
        !           547: #pragma pack()                         /* Stop packing */
        !           548: 
        !           549: 
        !           550: #define B32_CNT(x)     (x).b32_cnt
        !           551: #define B32_TYPE(x)    (x).b32_type
        !           552: #define B32_OBJ(x)     (x).b32_obj
        !           553: 
        !           554: #define E32_EFLAGS(x)  (x).e32_flags
        !           555: #define E32_OFFSET16(x) (x).e32_variant.e32_offset.offset16
        !           556: #define E32_OFFSET32(x) (x).e32_variant.e32_offset.offset32
        !           557: #define E32_GATEOFF(x) (x).e32_variant.e32_callgate.offset
        !           558: #define E32_GATE(x)    (x).e32_variant.e32_callgate.callgate
        !           559: #define E32_MODORD(x)  (x).e32_variant.e32_fwd.modord
        !           560: #define E32_VALUE(x)   (x).e32_variant.e32_fwd.value
        !           561: 
        !           562: #define FIXENT16       3
        !           563: #define FIXENT32       5
        !           564: #define GATEENT16      5
        !           565: #define FWDENT         7
        !           566: 
        !           567: /*
        !           568:  *  BUNDLE TYPES
        !           569:  */
        !           570: 
        !           571: #define EMPTY       0x00               /* Empty bundle */
        !           572: #define ENTRY16      0x01              /* 16-bit offset entry point */
        !           573: #define GATE16      0x02               /* 286 call gate (16-bit IOPL) */
        !           574: #define ENTRY32      0x03              /* 32-bit offset entry point */
        !           575: #define ENTRYFWD     0x04              /* Forwarder entry point */
        !           576: #define TYPEINFO     0x80              /* Typing information present flag */
        !           577: 
        !           578: 
        !           579: /*
        !           580:  *  Format for E32_EFLAGS(x)
        !           581:  *
        !           582:  *      7 6 5 4 3 2 1 0  - bit no
        !           583:  *      | | | | | | | |
        !           584:  *      | | | | | | | +--- exported entry
        !           585:  *      | | | | | | +----- uses shared data
        !           586:  *      +-+-+-+-+-+------- parameter word count
        !           587:  */
        !           588: 
        !           589: #define E32EXPORT      0x01            /* Exported entry */
        !           590: #define E32SHARED      0x02            /* Uses shared data */
        !           591: #define E32PARAMS      0xf8            /* Parameter word count mask */
        !           592: 
        !           593: /*
        !           594:  *  Flags for forwarders only:
        !           595:  */
        !           596: 
        !           597: #define FWD_ORDINAL    0x01            /* Imported by ordinal */
        !           598: /*end*/

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.