Annotation of os2sdk/include/newexe.h, revision 1.1

1.1     ! root        1: /*
        !             2:  *  Title
        !             3:  *
        !             4:  *      newexe.h
        !             5:  *      (C) Copyright Microsoft Corp 1984-1987
        !             6:  *      17 August 1984
        !             7:  *
        !             8:  *  Description
        !             9:  *
        !            10:  *      Data structure definitions for the DOS 4.0/Windows 2.0
        !            11:  *      executable file format.
        !            12:  *
        !            13:  *
        !            14:  */
        !            15: 
        !            16: #define EMAGIC          0x5A4D          /* Old magic number */
        !            17: #define ENEWEXE         sizeof(struct exe_hdr)
        !            18:                                         /* Value of E_LFARLC for new .EXEs */
        !            19: #define ENEWHDR         0x003C          /* Offset in old hdr. of ptr. to new */
        !            20: #define ERESWDS         0x0010          /* No. of reserved words (OLD) */
        !            21: #define ERES1WDS        0x0004          /* No. of reserved words in e_res */
        !            22: #define ERES2WDS        0x000A          /* No. of reserved words in e_res2 */
        !            23: #define ECP             0x0004          /* Offset in struct of E_CP */
        !            24: #define ECBLP           0x0002          /* Offset in struct of E_CBLP */
        !            25: #define EMINALLOC       0x000A          /* Offset in struct of E_MINALLOC */
        !            26: 
        !            27: struct exe_hdr                          /* DOS 1, 2, 3 .EXE header */
        !            28:   {
        !            29:     unsigned short      e_magic;        /* Magic number */
        !            30:     unsigned short      e_cblp;         /* Bytes on last page of file */
        !            31:     unsigned short      e_cp;           /* Pages in file */
        !            32:     unsigned short      e_crlc;         /* Relocations */
        !            33:     unsigned short      e_cparhdr;      /* Size of header in paragraphs */
        !            34:     unsigned short      e_minalloc;     /* Minimum extra paragraphs needed */
        !            35:     unsigned short      e_maxalloc;     /* Maximum extra paragraphs needed */
        !            36:     unsigned short      e_ss;           /* Initial (relative) SS value */
        !            37:     unsigned short      e_sp;           /* Initial SP value */
        !            38:     unsigned short      e_csum;         /* Checksum */
        !            39:     unsigned short      e_ip;           /* Initial IP value */
        !            40:     unsigned short      e_cs;           /* Initial (relative) CS value */
        !            41:     unsigned short      e_lfarlc;       /* File address of relocation table */
        !            42:     unsigned short      e_ovno;         /* Overlay number */
        !            43:     unsigned short      e_res[ERES1WDS];/* Reserved words */
        !            44:     unsigned short      e_oemid;        /* OEM identifier (for e_oeminfo) */
        !            45:     unsigned short      e_oeminfo;      /* OEM information; e_oemid specific */
        !            46:     unsigned short      e_res2[ERES2WDS];/* Reserved words */
        !            47:     long                e_lfanew;       /* File address of new exe header */
        !            48:   };
        !            49: 
        !            50: #define E_MAGIC(x)      (x).e_magic
        !            51: #define E_CBLP(x)       (x).e_cblp
        !            52: #define E_CP(x)         (x).e_cp
        !            53: #define E_CRLC(x)       (x).e_crlc
        !            54: #define E_CPARHDR(x)    (x).e_cparhdr
        !            55: #define E_MINALLOC(x)   (x).e_minalloc
        !            56: #define E_MAXALLOC(x)   (x).e_maxalloc
        !            57: #define E_SS(x)         (x).e_ss
        !            58: #define E_SP(x)         (x).e_sp
        !            59: #define E_CSUM(x)       (x).e_csum
        !            60: #define E_IP(x)         (x).e_ip
        !            61: #define E_CS(x)         (x).e_cs
        !            62: #define E_LFARLC(x)     (x).e_lfarlc
        !            63: #define E_OVNO(x)       (x).e_ovno
        !            64: #define E_RES(x)        (x).e_res
        !            65: #define E_OEMID(x)      (x).e_oemid
        !            66: #define E_OEMINFO(x)    (x).e_oeminfo
        !            67: #define E_RES2(x)       (x).e_res2
        !            68: #define E_LFANEW(x)     (x).e_lfanew
        !            69: 
        !            70: #define NEMAGIC         0x454E          /* New magic number */
        !            71: #define NERESBYTES      10              /* Ten bytes reserved (now) */
        !            72: #define NECRC           8               /* Offset into new header of NE_CRC */
        !            73: 
        !            74: struct new_exe                          /* New .EXE header */
        !            75:   {
        !            76:     unsigned short      ne_magic;       /* Magic number NE_MAGIC */
        !            77:     unsigned char       ne_ver;         /* Version number */
        !            78:     unsigned char       ne_rev;         /* Revision number */
        !            79:     unsigned short      ne_enttab;      /* Offset of Entry Table */
        !            80:     unsigned short      ne_cbenttab;    /* Number of bytes in Entry Table */
        !            81:     long                ne_crc;         /* Checksum of whole file */
        !            82:     unsigned short      ne_flags;       /* Flag word */
        !            83:     unsigned short      ne_autodata;    /* Automatic data segment number */
        !            84:     unsigned short      ne_heap;        /* Initial heap allocation */
        !            85:     unsigned short      ne_stack;       /* Initial stack allocation */
        !            86:     long                ne_csip;        /* Initial CS:IP setting */
        !            87:     long                ne_sssp;        /* Initial SS:SP setting */
        !            88:     unsigned short      ne_cseg;        /* Count of file segments */
        !            89:     unsigned short      ne_cmod;        /* Entries in Module Reference Table */
        !            90:     unsigned short      ne_cbnrestab;   /* Size of non-resident name table */
        !            91:     unsigned short      ne_segtab;      /* Offset of Segment Table */
        !            92:     unsigned short      ne_rsrctab;     /* Offset of Resource Table */
        !            93:     unsigned short      ne_restab;      /* Offset of resident name table */
        !            94:     unsigned short      ne_modtab;      /* Offset of Module Reference Table */
        !            95:     unsigned short      ne_imptab;      /* Offset of Imported Names Table */
        !            96:     long                ne_nrestab;     /* Offset of Non-resident Names Table */
        !            97:     unsigned short      ne_cmovent;     /* Count of movable entries */
        !            98:     unsigned short      ne_align;       /* Segment alignment shift count */
        !            99:     unsigned short      ne_cres;        /* Count of resource entries */
        !           100:     char                ne_res[NERESBYTES];
        !           101:                                         /* Pad structure to 64 bytes */
        !           102:   };
        !           103: 
        !           104: #define NE_MAGIC(x)     (x).ne_magic
        !           105: #define NE_VER(x)       (x).ne_ver
        !           106: #define NE_REV(x)       (x).ne_rev
        !           107: #define NE_ENTTAB(x)    (x).ne_enttab
        !           108: #define NE_CBENTTAB(x)  (x).ne_cbenttab
        !           109: #define NE_CRC(x)       (x).ne_crc
        !           110: #define NE_FLAGS(x)     (x).ne_flags
        !           111: #define NE_AUTODATA(x)  (x).ne_autodata
        !           112: #define NE_HEAP(x)      (x).ne_heap
        !           113: #define NE_STACK(x)     (x).ne_stack
        !           114: #define NE_CSIP(x)      (x).ne_csip
        !           115: #define NE_SSSP(x)      (x).ne_sssp
        !           116: #define NE_CSEG(x)      (x).ne_cseg
        !           117: #define NE_CMOD(x)      (x).ne_cmod
        !           118: #define NE_CBNRESTAB(x) (x).ne_cbnrestab
        !           119: #define NE_SEGTAB(x)    (x).ne_segtab
        !           120: #define NE_RSRCTAB(x)   (x).ne_rsrctab
        !           121: #define NE_RESTAB(x)    (x).ne_restab
        !           122: #define NE_MODTAB(x)    (x).ne_modtab
        !           123: #define NE_IMPTAB(x)    (x).ne_imptab
        !           124: #define NE_NRESTAB(x)   (x).ne_nrestab
        !           125: #define NE_CMOVENT(x)   (x).ne_cmovent
        !           126: #define NE_ALIGN(x)     (x).ne_align
        !           127: #define NE_CRES(x)      (x).ne_cres
        !           128: #define NE_RES(x)       (x).ne_res
        !           129: 
        !           130: #define NE_USAGE(x)     (WORD)*((WORD *)(x)+1)
        !           131: #define NE_PNEXTEXE(x)  (WORD)(x).ne_cbenttab
        !           132: #define NE_ONEWEXE(x)   (WORD)(x).ne_crc
        !           133: #define NE_PFILEINFO(x) (WORD)((DWORD)(x).ne_crc >> 16)
        !           134: 
        !           135: /*
        !           136:  *  Format of NE_FLAGS(x):
        !           137:  *
        !           138:  *  p                                   Not-a-process
        !           139:  *   x                                  Unused
        !           140:  *    e                                 Errors in image
        !           141:  *     xx                               Unused
        !           142:  *       ttt                            Application type
        !           143:  *          f                           Floating-point instructions
        !           144:  *           3                          386 instructions
        !           145:  *            2                         286 instructions
        !           146:  *             0                        8086 instructions
        !           147:  *              P                       Protected mode only
        !           148:  *               p                      Per-process library initialization
        !           149:  *                i                     Instance data
        !           150:  *                 s                    Solo data
        !           151:  */
        !           152: #define NENOTP          0x8000          /* Not a process */
        !           153: #define NEIERR          0x2000          /* Errors in image */
        !           154: #define NEAPPTYP        0x0700          /* Application type mask */
        !           155: #define NENOTWINCOMPAT  0x0100          /* Not compatible with P.M. Windowing */
        !           156: #define NEWINCOMPAT     0x0200          /* Compatible with P.M. Windowing */
        !           157: #define NEWINAPI        0x0300          /* Uses P.M. Windowing API */
        !           158: #define NEFLTP          0x0080          /* Floating-point instructions */
        !           159: #define NEI386          0x0040          /* 386 instructions */
        !           160: #define NEI286          0x0020          /* 286 instructions */
        !           161: #define NEI086          0x0010          /* 8086 instructions */
        !           162: #define NEPROT          0x0008          /* Runs in protected mode only */
        !           163: #define NEPPLI          0x0004          /* Per-Process Library Initialization */
        !           164: #define NEINST          0x0002          /* Instance data */
        !           165: #define NESOLO          0x0001          /* Solo data */
        !           166: 
        !           167: struct new_seg                          /* New .EXE segment table entry */
        !           168:   {
        !           169:     unsigned short      ns_sector;      /* File sector of start of segment */
        !           170:     unsigned short      ns_cbseg;       /* Number of bytes in file */
        !           171:     unsigned short      ns_flags;       /* Attribute flags */
        !           172:     unsigned short      ns_minalloc;    /* Minimum allocation in bytes */
        !           173:   };
        !           174: 
        !           175: #define NS_SECTOR(x)    (x).ns_sector
        !           176: #define NS_CBSEG(x)     (x).ns_cbseg
        !           177: #define NS_FLAGS(x)     (x).ns_flags
        !           178: #define NS_MINALLOC(x)  (x).ns_minalloc
        !           179: 
        !           180: /*
        !           181:  *  Format of NS_FLAGS(x):
        !           182:  *
        !           183:  *  x                           Unused
        !           184:  *   h                          Huge segment
        !           185:  *    c                         32-bit code segment
        !           186:  *     d                        Discardable segment
        !           187:  *      DD                      I/O privilege level (286 DPL bits)
        !           188:  *        c                     Conforming segment
        !           189:  *         r                    Segment has relocations
        !           190:  *          e                   Execute/read only
        !           191:  *           p                  Preload segment
        !           192:  *            P                 Pure segment
        !           193:  *             m                Movable segment
        !           194:  *              i               Iterated segment
        !           195:  *               ttt            Segment type
        !           196:  */
        !           197: #define NSTYPE          0x0007          /* Segment type mask */
        !           198: #define NSCODE          0x0000          /* Code segment */
        !           199: #define NSDATA          0x0001          /* Data segment */
        !           200: #define NSITER          0x0008          /* Iterated segment flag */
        !           201: #define NSMOVE          0x0010          /* Movable segment flag */
        !           202: #define NSSHARED        0x0020          /* Shared segment flag */
        !           203: #define NSPRELOAD       0x0040          /* Preload segment flag */
        !           204: #define NSEXRD          0x0080          /* Execute-only (code segment), or
        !           205:                                         *  read-only (data segment)
        !           206:                                         */
        !           207: #define NSRELOC         0x0100          /* Segment has relocations */
        !           208: #define NSCONFORM       0x0200          /* Conforming segment */
        !           209: #define NSDPL           0x0C00          /* I/O privilege level (286 DPL bits) */
        !           210: #define SHIFTDPL        10              /* Left shift count for SEGDPL field */
        !           211: #define NSDISCARD       0x1000          /* Segment is discardable */
        !           212: #define NS32BIT         0x2000          /* 32-bit code segment */
        !           213: #define NSHUGE          0x4000          /* Huge memory segment, length of
        !           214:                                          * segment and minimum allocation
        !           215:                                          * size are in segment sector units
        !           216:                                          */
        !           217: #define NSPURE          NSSHARED        /* For compatibility */
        !           218: 
        !           219: #define NSALIGN 9       /* Segment data aligned on 512 byte boundaries */
        !           220: 
        !           221: #define NSLOADED    0x0004      /* ns_sector field contains memory addr */
        !           222: 
        !           223: struct new_segdata                      /* Segment data */
        !           224:   {
        !           225:     union
        !           226:       {
        !           227:         struct
        !           228:           {
        !           229:             unsigned short      ns_niter;       /* number of iterations */
        !           230:             unsigned short      ns_nbytes;      /* number of bytes */
        !           231:             char                ns_iterdata;    /* iterated data bytes */
        !           232:           } ns_iter;
        !           233:         struct
        !           234:           {
        !           235:             char                ns_data;        /* data bytes */
        !           236:           } ns_noniter;
        !           237:       } ns_union;
        !           238:   };
        !           239: 
        !           240: struct new_rlcinfo                      /* Relocation info */
        !           241:   {
        !           242:     unsigned short      nr_nreloc;      /* number of relocation items that */
        !           243:   };                                    /* follow */
        !           244: 
        !           245: struct new_rlc                          /* Relocation item */
        !           246:   {
        !           247:     char                nr_stype;       /* Source type */
        !           248:     char                nr_flags;       /* Flag byte */
        !           249:     unsigned short      nr_soff;        /* Source offset */
        !           250:     union
        !           251:       {
        !           252:         struct
        !           253:           {
        !           254:             char        nr_segno;       /* Target segment number */
        !           255:             char        nr_res;         /* Reserved */
        !           256:             unsigned short nr_entry;    /* Target Entry Table offset */
        !           257:           }             nr_intref;      /* Internal reference */
        !           258:         struct
        !           259:           {
        !           260:             unsigned short nr_mod;      /* Index into Module Reference Table */
        !           261:             unsigned short nr_proc;     /* Procedure ordinal or name offset */
        !           262:           }             nr_import;      /* Import */
        !           263:         struct
        !           264:           {
        !           265:             unsigned short nr_ostype;   /* OSFIXUP type */
        !           266:             unsigned short nr_osres;    /* reserved */
        !           267:           }             nr_osfix;       /* Operating system fixup */
        !           268:       }                 nr_union;       /* Union */
        !           269:   };
        !           270: 
        !           271: #define NR_STYPE(x)     (x).nr_stype
        !           272: #define NR_FLAGS(x)     (x).nr_flags
        !           273: #define NR_SOFF(x)      (x).nr_soff
        !           274: #define NR_SEGNO(x)     (x).nr_union.nr_intref.nr_segno
        !           275: #define NR_RES(x)       (x).nr_union.nr_intref.nr_res
        !           276: #define NR_ENTRY(x)     (x).nr_union.nr_intref.nr_entry
        !           277: #define NR_MOD(x)       (x).nr_union.nr_import.nr_mod
        !           278: #define NR_PROC(x)      (x).nr_union.nr_import.nr_proc
        !           279: #define NR_OSTYPE(x)    (x).nr_union.nr_osfix.nr_ostype
        !           280: #define NR_OSRES(x)     (x).nr_union.nr_osfix.nr_osres
        !           281: 
        !           282: /*
        !           283:  *  Format of NR_STYPE(x):
        !           284:  *
        !           285:  *  xxxxx                               Unused
        !           286:  *       sss                            Source type
        !           287:  */
        !           288: #define NRSTYP          0x0f            /* Source type mask */
        !           289: #define NRSBYT          0x00            /* lo byte */
        !           290: #define NRSSEG          0x02            /* 16-bit segment */
        !           291: #define NRSPTR          0x03            /* 32-bit pointer */
        !           292: #define NRSOFF          0x05            /* 16-bit offset */
        !           293: #define NRSPTR48        0x0B            /* 48-bit pointer */
        !           294: #define NRSOFF32        0x0D            /* 32-bit offset */
        !           295: 
        !           296: /*
        !           297:  *  Format of NR_FLAGS(x):
        !           298:  *
        !           299:  *  xxxxx                               Unused
        !           300:  *       a                              Additive fixup
        !           301:  *        rr                            Reference type
        !           302:  */
        !           303: #define NRADD           0x04            /* Additive fixup */
        !           304: #define NRRTYP          0x03            /* Reference type mask */
        !           305: #define NRRINT          0x00            /* Internal reference */
        !           306: #define NRRORD          0x01            /* Import by ordinal */
        !           307: #define NRRNAM          0x02            /* Import by name */
        !           308: #define NRROSF          0x03            /* Operating system fixup */
        !           309: 
        !           310: 
        !           311: /* Resource type or name string */
        !           312: struct rsrc_string
        !           313:     {
        !           314:     char rs_len;            /* number of bytes in string */
        !           315:     char rs_string[ 1 ];    /* text of string */
        !           316:     };
        !           317: 
        !           318: #define RS_LEN( x )    (x).rs_len
        !           319: #define RS_STRING( x ) (x).rs_string
        !           320: 
        !           321: /* Resource type information block */
        !           322: struct rsrc_typeinfo
        !           323:     {
        !           324:     unsigned short rt_id;
        !           325:     unsigned short rt_nres;
        !           326:     long rt_proc;
        !           327:     };
        !           328: 
        !           329: #define RT_ID( x )   (x).rt_id
        !           330: #define RT_NRES( x ) (x).rt_nres
        !           331: #define RT_PROC( x ) (x).rt_proc
        !           332: 
        !           333: /* Resource name information block */
        !           334: struct rsrc_nameinfo
        !           335:     {
        !           336:     /* The following two fields must be shifted left by the value of  */
        !           337:     /* the rs_align field to compute their actual value.  This allows */
        !           338:     /* resources to be larger than 64k, but they do not need to be    */
        !           339:     /* aligned on 512 byte boundaries, the way segments are           */
        !           340:     unsigned short rn_offset;   /* file offset to resource data */
        !           341:     unsigned short rn_length;   /* length of resource data */
        !           342:     unsigned short rn_flags;    /* resource flags */
        !           343:     unsigned short rn_id;       /* resource name id */
        !           344:     unsigned short rn_handle;   /* If loaded, then global handle */
        !           345:     unsigned short rn_usage;    /* Initially zero.  Number of times */
        !           346:                                 /* the handle for this resource has */
        !           347:                                 /* been given out */
        !           348:     };
        !           349: 
        !           350: #define RN_OFFSET( x ) (x).rn_offset
        !           351: #define RN_LENGTH( x ) (x).rn_length
        !           352: #define RN_FLAGS( x )  (x).rn_flags
        !           353: #define RN_ID( x )     (x).rn_id
        !           354: #define RN_HANDLE( x ) (x).rn_handle
        !           355: #define RN_USAGE( x )  (x).rn_usage
        !           356: 
        !           357: #define RSORDID     0x8000      /* if high bit of ID set then integer id */
        !           358:                                 /* otherwise ID is offset of string from
        !           359:                                    the beginning of the resource table */
        !           360: 
        !           361:                                 /* Ideally these are the same as the */
        !           362:                                 /* corresponding segment flags */
        !           363: #define RNMOVE      0x0010      /* Moveable resource */
        !           364: #define RNPURE      0x0020      /* Pure (read-only) resource */
        !           365: #define RNPRELOAD   0x0040      /* Preloaded resource */
        !           366: #define RNDISCARD   0xF000      /* Discard priority level for resource */
        !           367: 
        !           368: /* Resource table */
        !           369: struct new_rsrc
        !           370:     {
        !           371:     unsigned short rs_align;    /* alignment shift count for resources */
        !           372:     struct rsrc_typeinfo rs_typeinfo;
        !           373:     };
        !           374: 
        !           375: #define RS_ALIGN( x ) (x).rs_align
        !           376: 

unix.superglobalmegacorp.com

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