/* SCCSID = %W% %E% */ /* * Copyright Microsoft Corporation, 1983-1987 * * This Module contains Proprietary Information of Microsoft * Corporation and should be treated as Confidential. * * bndtrn.h: * * Constant definitions: */ /* * Aligment types */ #define ALGNNIL 0 /* Unaligned LSEG */ #define ALGNABS 0 /* Absolute LSEG */ #define ALGNBYT 1 /* Byte-aligned LSEG */ #define ALGNWRD 2 /* Word-aligned LSEG */ #define ALGNDBL 5 /* Double-word aligned LSEG */ #define ALGNPAR 3 /* Paragraph-aligned LSEG */ #define ALGNPAG 4 /* Page-aligned LSEG */ /* * Symbol attributes types */ #define ATTRNIL 0 /* Nil attribute */ #define ATTRPSN 1 /* Public segment attribute */ #define ATTRLSN 2 /* Local segment attribute */ #define ATTRPNM 3 /* Public name attribute */ #define ATTRLNM 4 /* Local name attribute */ #define ATTRFIL 5 /* File name attribute */ #define ATTRGRP 6 /* Group name attribute */ #define ATTRUND 7 /* Undefined symbol attribute */ #define ATTRSKIPLIB 8 /* Default library name to skip */ #define ATTRCOMDAT 9 /* Named data block - COMDAT */ #define ATTRALIAS 10 /* Alias name attribute */ #define ATTREXP 11 /* Exported name attribute */ #define ATTRIMP 12 /* Imported name attribute */ #define ATTRMAX 13 /* Highest attribute no. plus 1 */ /* * LINK limits */ #define BIGBIT 2 /* Big bit in ACBP byte */ #define BNDABS 0xFE /* Bundle of absolute entries */ #define BNDMAX 255 /* Maximum entries per bundle */ #define BNDMOV 0xFF /* Bundle of movable entries */ #define BNDNIL 0 /* Null bundle */ #define CBELMAX 0xffff /* Max COMDEF elem. length in bytes */ #if EXE386 #define CBMAXSEG32 (0xffffffffL) /* Maximum 32-bit segment size under OS/2 */ #else #define CBMAXSEG32 (1L< 0xca) #else #define IsBadRec(r) (r < 0x6E || r > 0xca || (r & 1) != 0) #endif #if _MSC_VER < 700 #define __cdecl _cdecl #endif /* * Version-specific constants */ #if OIAPX286 #define DFSTBIAS 0x3F /* Default bias of seg. table ref.s */ #endif #if LIBMSDOS #define sbPascalLib "\012PASCAL.LIB" /* Pascal library name as SBTYPE */ #endif #if LIBXENIX #define MAGICARCHIVE 0177545 /* Magic number for archive */ #define ARHEADLEN 26 /* Length of archive header */ #define ARDICTLEN (2 + ARHEADLEN) /* Length of archive dictionary */ #define ARDICTLOC (2 + ARDICTLEN) /* Offset of archive dictionary */ /* Note: Fields in the following struct definition are defined as * byte arrays for generality. On the DEC20, for instance, a byte, * and a word and a long all use 36 bits; on the 8086, the corresponding * numbers are 8, 16, and 32 bits. It is a shame to have to define * the record in such a fashion, but since there is no "standard," * that's the way it goes. */ typedef struct { BYTE arName[14]; /* Archive name */ BYTE arDate[4]; /* Archive date */ BYTE arUid; /* User I.D. */ BYTE arGid; /* Group I.D. */ BYTE arMode[2]; /* Mode */ BYTE arLen[4]; /* Length of archive */ } ARHEADTYPE; /* Archive header type */ #endif typedef BYTE ALIGNTYPE; typedef WORD AREATYPE; typedef BYTE ATTRTYPE; typedef BYTE FIXUTYPE; typedef BYTE FTYPE; typedef BYTE GRTYPE; typedef BYTE FAR *HTETYPE; typedef WORD IOVTYPE; typedef BYTE KINDTYPE; typedef WORD LNAMETYPE; /* LNAME index */ typedef void FAR *PROPTYPE; #if EXE386 OR OMF386 typedef DWORD RATYPE; #else typedef WORD RATYPE; #endif #if NEWSYM typedef BYTE FAR *RBTYPE; #else #if BIGSYM typedef long RBTYPE; #else typedef WORD RBTYPE; #endif #endif typedef WORD RECTTYPE; typedef WORD SATYPE; typedef WORD SEGTYPE; typedef WORD SNTYPE; typedef BYTE TYSNTYPE; #if MSGMOD typedef WORD MSGTYPE; #else typedef char *MSGTYPE; #endif typedef struct _SYMBOLUSELIST { int cEntries; /* # of entries on the list */ int cMaxEntries; /* max # of entries on the list */ RBTYPE *pEntries; } SYMBOLUSELIST; typedef struct _AHTETYPE /* Attribute hash table entry */ { RBTYPE rhteNext; /* Virt addr of next entry */ ATTRTYPE attr; /* Attribute */ RBTYPE rprop; /* Virt addr of property list */ WORD hashval; /* Hash value */ BYTE cch[1]; /* Length-prefixed symbol */ } AHTETYPE; typedef struct _APROPTYPE /* Property sheet */ { RBTYPE a_next; /* Link to next entry */ ATTRTYPE a_attr; /* Attribute */ BYTE a_rgb[1]; /* Rest of record */ } APROPTYPE; typedef struct _APROPEXPTYPE { RBTYPE ax_next; /* Next item in property list */ ATTRTYPE ax_attr; /* Property cell type */ RBTYPE ax_symdef; /* Pointer to PUBDEF or EXTDEF */ WORD ax_ord; /* Export ordinal */ SATYPE ax_sa; /* Segment number */ RATYPE ax_ra; /* Offset in segment */ BYTE ax_nameflags; /* Resident name/no name flag */ BYTE ax_flags; /* Flag byte information */ RBTYPE ax_NextOrd; /* Next item in export list */ } APROPEXPTYPE; /* Exported name type */ #if OSEGEXE /* * Format of ax_nameflags - flags used internaly by linker * * 7 6 5 4 3 2 1 0 - bit no * | | | | * | | | +-- resident name * | | +---- discard name after processing * | +------ forwarder * +-------- constant export */ #define RES_NAME 0x01 #define NO_NAME 0x02 #define FORWARDER_NAME 0x04 #define CONSTANT 0x08 #endif typedef struct _CONTRIBUTOR { struct _CONTRIBUTOR FAR *next; /* Next on list */ DWORD len; /* Size of contribution */ DWORD offset; /* Offset in logical segment */ RBTYPE file; /* OBJ file descriptor */ } CONTRIBUTOR; typedef struct _APROPSNTYPE { RBTYPE as_next; /* Next item in property list */ ATTRTYPE as_attr; /* Attribute */ #if OSEGEXE BYTE as_fExtra; /* Extra linker ONLY flags */ #endif DWORD as_cbMx; /* Size of segment */ DWORD as_cbPv; /* Size of previous segment */ SNTYPE as_gsn; /* Global SEGDEF number */ GRTYPE as_ggr; /* Global GRPDEF number */ #if OVERLAYS IOVTYPE as_iov; /* Segment's overlay number */ #endif RBTYPE as_rCla; /* Pointer to segment class symbol */ WORD as_key; /* Segment definition key */ #if OSEGEXE #if EXE386 DWORD as_flags; #else WORD as_flags; #endif #else BYTE as_flags; #endif BYTE as_tysn; /* Segment's combine-type */ CONTRIBUTOR FAR *as_CHead; /* Head of contributing .OBJ files list */ CONTRIBUTOR FAR *as_CTail; /* Tail of contributing .OBJ files list */ RBTYPE as_ComDat; /* Head of list of COMDATs allocated in this segment */ RBTYPE as_ComDatLast; /* Tail of list of COMDATs allocated in this segment */ } APROPSNTYPE; /* SEGDEF property cell */ #if OSEGEXE /* * Format of as_fExtra - flags used internaly by linker * * 7 6 5 4 3 2 1 0 - bit no * | | | | * | | | +-- segment defined in the .DEF file * | | +---- mixing use16 and use32 allowed * | +------ don't pad this segment for /INCREMENTAL * +-------- COMDAT_SEGx created by the linker */ #define FROM_DEF_FILE 0x01 #define MIXED1632 0x02 #define NOPAD 0x04 #define COMDAT_SEG 0x08 #endif typedef struct _APROPNAMETYPE { RBTYPE an_next; ATTRTYPE an_attr; RBTYPE an_sameMod; // Next PUBDEF from the same obj file WORD an_CVtype; // CodeView type index // Have to be in the order as in // struct _APROPUNDEFTYPE GRTYPE an_ggr; #if NEWLIST RBTYPE an_rbNxt; #endif SNTYPE an_gsn; RATYPE an_ra; #if OVERLAYS RATYPE an_thunk; // Thunk offset - used by /DYNAMIC or EXE386 #endif #if OSEGEXE #if EXE386 RBTYPE an_nextImp; /* Next import on the list */ DWORD an_thunk; /* Address of the thunk */ DWORD an_name; /* Imported procedure name offset */ DWORD an_entry; /* Entry name offset or ordinal */ DWORD an_iatEntry; /* Value stored in the Import Address Table */ WORD an_module; /* Module directory entry index */ WORD an_flags; /* Flags */ #else WORD an_entry; /* Entry name offset or ordinal */ WORD an_module; /* Module name offset */ BYTE an_flags; /* Flags for various attributes */ #endif /* also used for imod if !(an_flags&FIMPORT) */ #endif } APROPNAMETYPE; /* * Format of an_flags * * NOTE: 16-bit version is used only by link386 * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no. * | | | | | | | | | | | * | | | | | | | | | | +-- public is an import * | | | | | | | | | +---- import by ordinal * | | | | | | | | +------ public identifier is printable * | | | | | +-+-+-------- floating-point special symbol type * | | | | +-------------- secondary floating-point special symbol * | | | +---------------- unreferenced public symbol * | | +------------------ 16-bit reference to imported symbol * | +-------------------- 32-bit reference to imported symbol * +---------------------- importing DATA symbol */ #define FIMPORT 0x01 /* Set if the public is an import */ #define FIMPORD 0x02 /* Set if the import ib by ordinal */ #define FPRINT 0x04 /* Set if public is printable */ #define FUNREF 0x80 /* Set if public is not referenced */ #define FFPMASK 0x38 /* Floating-point symbol mask */ #define FFPSHIFT 3 /* Shift constant to get to FFPMASK */ #define FFP2ND 0x40 /* Secondary f.p. symbol (FJxRQQ) */ #if EXE386 #define REF16 0x100 // 16-bit reference to imported symbol #define REF32 0x200 // 32-bit reference to imported symbol #define IMPDATA 0x400 // importing DATA symbol #endif typedef struct _APROPIMPTYPE { RBTYPE am_next; /* Next property cell on list */ ATTRTYPE am_attr; /* Property cell type */ #if EXE386 DWORD am_offset; /* Offset in imported names table */ #else WORD am_offset; /* Offset in imported names table */ #endif WORD am_mod; /* Index into Module Reference Table */ #if SYMDEB APROPNAMETYPE FAR *am_public; /* Pointer to matching public symbol */ #endif } APROPIMPTYPE; /* Imported name record */ typedef struct _APROPCOMDAT { RBTYPE ac_next; /* Next property cell on list */ ATTRTYPE ac_attr; /* Property cell type */ GRTYPE ac_ggr; /* Global group index */ SNTYPE ac_gsn; /* Global segment index */ RATYPE ac_ra; /* Offset relative from COMDAT symbol */ DWORD ac_size; /* Size of data block */ WORD ac_flags; /* Low byte - COMDAT flags */ /* High byte - linker exclusive flags */ #if OVERLAYS IOVTYPE ac_iOvl; /* Overlay number where comdat has to be allocated */ #endif BYTE ac_selAlloc; /* Selection/Allocation criteria */ BYTE ac_align; /* COMDAT aligment if different from segment aligment */ DWORD ac_data; /* Data block check sum */ RBTYPE ac_obj; /* Object file */ long ac_objLfa; /* Offset in the object file */ RBTYPE ac_concat; /* Concatenation data blocks */ RBTYPE ac_sameSeg; /* Next COMDAT in the same segment */ RBTYPE ac_sameFile; /* Next COMDAT from the same object file */ RBTYPE ac_order; /* Next COMDAT on the ordered list */ RBTYPE ac_pubSym; /* PUBDEF for this COMDAT */ #if TCE SYMBOLUSELIST ac_uses; /* List of referenced functions */ int ac_fAlive; /* The result of TCE, TRUE if this COMDAT is needed /* in the final memory image */ #endif } APROPCOMDAT; /* * Format of ac_flags: * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no * | | | | | | | | | | * | | | | | | | | | +-- continuation bit * | | | | | | | | +---- iterated data bit * | | | | | | | +------ COMDAT symbol has local scope * | | | | | | +-------- allocate in the root when doing overlays * | | | | | +------------------ COMDAT for ordered procedure * | | | | +-------------------- definition of ordered COMDAT found among .OBJ files * | | | +---------------------- anonymus allocation completed * | | +------------------------- referenced COMDAT * | +---------------------------- selected copy of COMDAT * +------------------------------- skip continuation records */ #define CONCAT_BIT 0x01 #define ITER_BIT 0x02 #define LOCAL_BIT 0x04 #define VTABLE_BIT 0x08 #define ORDER_BIT 0x10 #define DEFINED_BIT 0x20 #define ALLOCATED_BIT 0x40 #define REFERENCED_BIT 0x80 #define SELECTED_BIT 0x100 #define SKIP_BIT 0x200 /* * Format of ac_selAlloc: * * 7 6 5 4 3 2 1 0 - bit no * | | | | | | | | * | | | | +-+-+-+-- allocation criteria * +-+-+-+---------- selection criteria */ #define SELECTION_MASK 0xf0 #define ALLOCATION_MASK 0x0f #define ONLY_ONCE 0x00 #define PICK_FIRST 0x10 #define SAME_SIZE 0x20 #define EXACT 0x30 #define EXPLICIT 0x00 #define CODE16 0x01 #define DATA16 0x02 #define CODE32 0x03 #define DATA32 0x04 #define ALLOC_UNKNOWN 0x05 typedef struct _APROPALIAS { RBTYPE al_next; // Next property cell on list ATTRTYPE al_attr; // Property cell type RBTYPE al_sameMod; // Next ALIAS/PUBDEF from the same obj file RBTYPE al_sym; // Substitute symbol } APROPALIAS; #if SYMDEB typedef struct _CVCODE { struct _CVCODE FAR *next; // Next code segment RATYPE cb; // Length of code segment SEGTYPE seg; // Logical segment index RATYPE ra; // Offset in the logical code segment } CVCODE; // Code segment descriptor for CV typedef struct _CVINFO { DWORD cv_cbTyp; // Length of $$TYPES BYTE FAR *cv_typ; // $$TYPES DWORD cv_cbSym; // Length of $$SYMBOLS BYTE FAR *cv_sym; // $$SYMBOLS } CVINFO; #endif typedef struct _APROPFILETYPE { RBTYPE af_next; /* Next in chain */ ATTRTYPE af_attr; /* Attribute number */ IOVTYPE af_iov; /* Overlay number */ RBTYPE af_FNxt; /* Next file in list */ long af_lfa; /* Starting address in file */ RBTYPE af_rMod; /* Pointer to module name symbol */ BYTE af_flags; /* Info about module */ #if SYMDEB CVINFO FAR *af_cvInfo; // CodeView information WORD af_cCodeSeg; // Number of code segments struct _CVCODE FAR *af_Code; // List of code segments struct _CVCODE FAR *af_CodeLast; // Tail of the list of code segments RBTYPE af_publics; // List of public symbols struct _CVSRC FAR *af_Src; // List of source lines struct _CVSRC FAR *af_SrcLast; // Tail of the list of source lines #endif RBTYPE af_ComDat; /* First COMDAT picked from this object module */ RBTYPE af_ComDatLast; /* Last on the list */ #if ILINK WORD af_cont; /* count of contributions */ WORD af_ientOnt; /* first index of ENTONTTYPEs */ WORD af_imod; /* module index */ #define IMODNIL ((WORD) 0) #endif char af_ifh; /* Library number */ #if NEWIO char af_fh; /* File handle */ #endif } APROPFILETYPE; /* File property cell */ #if SYMDEB typedef struct _GSNINFO { SNTYPE gsn; // Global contribution index RATYPE comdatRa; // COMDAT offset DWORD comdatSize; // COMDAT size WORD comdatAlign; // COMDAT alignment WORD fComdat; // TRUE if COMDAT gsn } GSNINFO; #if FALSE typedef struct _CVIMP { WORD iMod; /* Index to Module Reference Table */ #if EXE386 DWORD iName; /* Index to Imported Name Table */ #else WORD iName; /* Index to Imported Name Table */ #endif char far *address; /* Address of import */ } CVIMP; /* Import descriptor for CV */ #endif #endif typedef struct _APROPGROUPTYPE { RBTYPE ag_next; /* Next in chain */ ATTRTYPE ag_attr; /* Attribute */ BYTE ag_ggr; /* Global GRPDEF number */ } APROPGROUPTYPE; /* GRPDEF property cell */ typedef struct _PLTYPE /* Property list type */ { struct _PLTYPE FAR *pl_next; /* Link to next in chain */ RBTYPE pl_rprop; /* Symbol table pointer */ } PLTYPE; typedef struct _APROPUNDEFTYPE { RBTYPE au_next; /* Next in chain */ ATTRTYPE au_attr; /* Attribute */ RBTYPE au_sameMod; // Next COMDEF from the same obj file WORD au_CVtype; // CodeView type index // Have to be in the same order as in // struct _APROPNAMETYPE ATTRTYPE au_flags; /* Flags */ RBTYPE au_Default; /* Default resolution for weak externs */ union { /* The union of these fields assumes that au_fFil is only used * for a list of references to an unresolved external. Au_module * is used for COMDEFs, which are always resolved. */ WORD au_module; /* Module index */ PLTYPE FAR *au_rFil; /* List of file references */ } u; long au_len; /* Length of object */ WORD au_cbEl; /* Size of an element in bytes */ #if TCE int au_fAlive; /* Set is referenced from non-COMDAT record */ #endif } APROPUNDEFTYPE; /* Undefined symbol property cell */ /* * Format of au_flags * * 7 6 5 4 3 2 1 0 - bit no * | | | | | | * | | | | | +--- C communal * | | | | +----- weak external - au_Default valid * | | | +------- undecided yet * | | +--------- strong external - au_Default invalid * | +----------- aliased external - au_Default point to ALIAS record * +------------- search library for aliased external */ #define COMMUNAL 0x01 /* C communal */ #define WEAKEXT 0x02 /* Weak external - use default resolution */ #define UNDECIDED 0x04 /* Undecided yet but don't throw away default resolution */ #define STRONGEXT 0x08 /* Strong external - don't use default resolution */ #define SUBSTITUTE 0x10 /* Aliased external - use au_Dafault to find ALIAS */ #define SEARCH_LIB 0x20 /* Search library for aliased external */ typedef struct _EPTYPE /* Entry point type */ { struct _EPTYPE FAR *ep_next; /* Link to next in chain */ WORD ep_sa; /* Segment containing entry point */ DWORD ep_ra; /* Offset of entry point */ WORD ep_ord; /* Entry Table ordinal */ } EPTYPE; #define CBHTE (sizeof(AHTETYPE)) #define CBPROPSN (sizeof(APROPSNTYPE)) #define CBPROPNAME (sizeof(APROPNAMETYPE)) #define CBPROPFILE (sizeof(APROPFILETYPE)) #define CBPROPGROUP (sizeof(APROPGROUPTYPE)) #define CBPROPUNDEF (sizeof(APROPUNDEFTYPE)) #define CBPROPEXP (sizeof(APROPEXPTYPE)) #define CBPROPIMP (sizeof(APROPIMPTYPE)) #define CBPROPCOMDAT (sizeof(APROPCOMDAT)) #define CBPROPALIAS (sizeof(APROPALIAS)) #define UPPER(b) (b >= 'a' && b <= 'z'? b - 'a' + 'A': b) /* Upper casing macro */ #if OSMSDOS #define sbDotDef "\004.def" /* Definitions file extension */ #define sbDotCom "\004.com" /* COM file extension */ #define sbDotExe "\004.exe" /* EXE file extension */ #define sbDotLib "\004.lib" /* Library file extension */ #define sbDotMap "\004.map" /* Map file extension */ #define sbDotObj "\004.obj" /* Object file extension */ #define sbDotDll "\004.dll" /* Dynlink file extension */ #define sbDotQlb "\004.qlb" /* Quick library extension */ #define sbDotDbg "\004.dbg" /* Cv info for .COM */ #if EXE386 #define sbFlat "\004FLAT" /* Pseudo-group name */ #endif #endif #if OSXENIX #define sbDotDef "\004.def" /* Definitions file extension */ #define sbDotExe "\004.exe" /* EXE file extension */ #define sbDotCom "\004.com" /* COM file extension */ #define sbDotLib "\004.lib" /* Library file extension */ #define sbDotMap "\004.map" /* Map file extension */ #define sbDotObj "\004.obj" /* Object file extension */ #define sbDotDll "\004.dll" /* Dynlink file extension */ #define sbDotQlb "\004.qlb" /* Quick library extension */ #endif #if M_WORDSWAP AND NOT M_BYTESWAP #define CBEXEHDR sizeof(struct exe_hdr) #define CBLONG sizeof(long) #define CBNEWEXE sizeof(struct new_exe) #define CBNEWRLC sizeof(struct new_rlc) #define CBNEWSEG sizeof(struct new_seg) #define CBWORD sizeof(WORD) #else #define CBEXEHDR _cbexehdr #define CBLONG _cblong #define CBNEWEXE _cbnewexe #define CBNEWRLC _cbnewrlc #define CBNEWSEG _cbnewseg #define CBWORD _cbword extern char _cbexehdr[]; extern char _cblong[]; extern char _cbnewexe[]; extern char _cbnewrlc[]; extern char _cbnewseg[]; extern char _cbword[]; #endif /* * Structure to represent floating-point symbols, i.e. FIxRQQ, FJxRQQ * pairs. */ struct fpsym { BYTE *sb; /* Primary symbol, length-prefixed */ BYTE *sb2; /* Secondary symbol, length-prefixed */ }; #if ECS extern BYTE fLeadByte[0x80]; #define IsLeadByte(b) ((unsigned char)(b) >= 0x80 && \ fLeadByte[(unsigned char)(b)-0x80]) #endif #ifdef _MBCS #define IsLeadByte(b) _ismbblead(b) #endif #if OSEGEXE #if EXE386 #define RELOCATION struct le_rlc typedef struct le_rlc *RLCPTR; #define IsIOPL(f) (FALSE) /* Check if IOPL bit set */ #define Is32BIT(f) (TRUE) /* Check if 32-bit segment */ #define Is16BIT(f) (!Is32BIT(f)) /* Check if 16-bit segment */ #define IsDataFlg(f) (((f) & OBJ_CODE) == 0) #define IsCodeFlg(f) (((f) & OBJ_CODE) != 0) #define RoundTo64k(x) (((x) + 0xffffL) & ~0xffffL) #else #define RELOCATION struct new_rlc typedef struct new_rlc FAR *RLCPTR; #define IsIOPL(f) (((f) & NSDPL) == (2 << SHIFTDPL)) /* Check if IOPL bit set */ #define Is32BIT(f) (((f) & NS32BIT) != 0) /* Check if 32-bit code segment */ #define IsDataFlg(x) (((x) & NSTYPE) == NSDATA) #define IsCodeFlg(x) (((x) & NSTYPE) == NSCODE) #define IsConforming(x) (((x) & NSCONFORM) != 0) #define NonConfIOPL(x) (!IsConforming(x) && IsIOPL(x)) #endif #define HASH_SIZE 128 #define BUCKET_DEF 4 typedef struct _RLCBUCKET { WORD count; // Number of relocations in the bucket WORD countMax; // Allocated size RLCPTR rgRlc; // Run-time relocations } RLCBUCKET; typedef struct _RLCHASH // Hash vector for run-time relocations { WORD count; // Number of relocations RLCBUCKET FAR *hash[HASH_SIZE]; // Hash vector } RLCHASH; # if ODOS3EXE extern FTYPE fNewExe; # else #define fNewExe TRUE # endif # endif #if NOT OSEGEXE #define fNewExe FALSE #define dfData 0 #define dfCode FCODE #define IsCodeFlg(x) ((x & FCODE) != 0) #define IsDataFlg(x) ((x & FCODE) == 0) #endif /* NOT OSEGEXE */ /* * TYPEOF = macro to get basic record type of records which may have * a 386 extension. Used for LEDATA, LIDATA, and FIXUPP. */ #if OMF386 #define TYPEOF(r) (r&~1) #else #define TYPEOF(r) r #endif typedef AHTETYPE FAR *AHTEPTR; typedef APROPTYPE FAR *APROPPTR; typedef APROPEXPTYPE FAR *APROPEXPPTR; typedef APROPSNTYPE FAR *APROPSNPTR; typedef APROPNAMETYPE FAR *APROPNAMEPTR; typedef APROPIMPTYPE FAR *APROPIMPPTR; typedef APROPFILETYPE FAR *APROPFILEPTR; typedef APROPGROUPTYPE FAR *APROPGROUPPTR; typedef APROPUNDEFTYPE FAR *APROPUNDEFPTR; typedef APROPCOMDAT FAR *APROPCOMDATPTR; typedef APROPALIAS FAR *APROPALIASPTR; #ifdef O68K #define MAC_NONE 0 /* Not a Macintosh exe */ #define MAC_NOSWAP 1 /* Not a swappable Macintosh exe */ #define MAC_SWAP 2 /* Swappable Macintosh exe */ #endif