Jelajahi Sumber

+ exe386 merged into Exe

Tomas Hajny 25 tahun lalu
induk
melakukan
80d468b4fe
1 mengubah file dengan 231 tambahan dan 20 penghapusan
  1. 231 20
      rtl/os2/exe.pas

+ 231 - 20
rtl/os2/exe.pas

@@ -1,31 +1,242 @@
-unit exe;
+unit Exe;
 
   interface
 
     type
        exe = record
-          eid : WORD;
-          elast : WORD;
-          epagsiz : WORD;
-          erelcnt : WORD;
-          ehdrsiz : WORD;
-          eminfre : WORD;
-          emaxfre : WORD;
-          eiSS : WORD;
-          eiSP : WORD;
-          enegsum : WORD;
-          eiIP : WORD;
-          eiCS : WORD;
-          ereloff : WORD;
-          eovlnum : WORD;
-          ever : WORD;
-          dumy : WORD;
-          ebb : WORD;
-          dumy2 : array[0..7-1] of WORD;
+          eid : word;
+          elast : word;
+          epagsiz : word;
+          erelcnt : word;
+          ehdrsiz : word;
+          eminfre : word;
+          emaxfre : word;
+          eiSS : word;
+          eiSP : word;
+          enegsum : word;
+          eiIP : word;
+          eiCS : word;
+          ereloff : word;
+          eovlnum : word;
+          ever : word;
+          dumy : word;
+          ebb : word;
+          dumy2 : array[0..6] of word;
        end;
 
     const
-       EXEID = $5a4d;
+       EXEID = $5A4D;
+
+{ Declarations specific for LX-type executables follow }
+    const
+       BITPERword = 16;
+       BITPERBYTE = 8;
+       OBJPAGELEN = 4096;
+       E32MAGIC = $584C;
+       E32RESBYTES1 = 0;
+       E32RESBYTES2 = 0;
+       E32RESBYTES3 = 24;
+       E32LEBO = $00;
+       E32BEBO = $01;
+       E32LEWO = $00;
+       E32BEWO = $01;
+       E32LEVEL = 0;
+       E32CPU286 = $001;
+       E32CPU386 = $002;
+       E32CPU486 = $003;
+
+    type
+       e32_exe = record
+          e32_magic : array[0..1] of byte;
+          e32_border : byte;
+          e32_worder : byte;
+          e32_level : longint;
+          e32_cpu : word;
+          e32_os : word;
+          e32_ver : longint;
+          e32_mflags : longint;
+          e32_mpages : longint;
+          e32_startobj : longint;
+          e32_eip : longint;
+          e32_stackobj : longint;
+          e32_esp : longint;
+          e32_pagesize : longint;
+          e32_pageshift : longint;
+          e32_fixupsize : longint;
+          e32_fixupsum : longint;
+          e32_ldrsize : longint;
+          e32_ldrsum : longint;
+          e32_objtab : longint;
+          e32_objcnt : longint;
+          e32_objmap : longint;
+          e32_itermap : longint;
+          e32_rsrctab : longint;
+          e32_rsrccnt : longint;
+          e32_restab : longint;
+          e32_enttab : longint;
+          e32_dirtab : longint;
+          e32_dircnt : longint;
+          e32_fpagetab : longint;
+          e32_frectab : longint;
+          e32_impmod : longint;
+          e32_impmodcnt : longint;
+          e32_impproc : longint;
+          e32_pagesum : longint;
+          e32_datapage : longint;
+          e32_preload : longint;
+          e32_nrestab : longint;
+          e32_cbnrestab : longint;
+          e32_nressum : longint;
+          e32_autodata : longint;
+          e32_debuginfo : longint;
+          e32_debuglen : longint;
+          e32_instpreload : longint;
+          e32_instdemand : longint;
+          e32_heapsize : longint;
+          e32_res3 : array[0..E32RESBYTES3-1] of byte;
+       end;
+
+    const
+       E32NOTP = $8000;
+       E32NOLOAD = $2000;
+       E32PMAPI = $0300;
+       E32PMW = $0200;
+       E32NOPMW = $0100;
+       E32NOEXTFIX = $0020;
+       E32NOINTFIX = $0010;
+       E32LIBINIT = $0004;
+       E32LIBTERM = $40000000;
+       E32APPMASK = $0700;
+       E32PROTDLL = $10000;
+       E32DEVICE = $20000;
+       E32MODEXE = $00000;
+       E32MODDLL = $08000;
+       E32MODPROTDLL = $18000;
+       E32MODPDEV = $20000;
+       E32MODVDEV = $28000;
+       E32MODMASK = $38000;
+       RINTSIZE16 = 8;
+       RINTSIZE32 = 10;
+       RORDSIZE = 8;
+       RNAMSIZE16 = 8;
+       RNAMSIZE32 = 10;
+       RADDSIZE16 = 10;
+       RADDSIZE32 = 12;
+       NRSTYP = $0f;
+       NRSBYT = $00;
+       NRSSEG = $02;
+       NRSPTR = $03;
+       NRSOFF = $05;
+       NRPTR48 = $06;
+       NROFF32 = $07;
+       NRSOFF32 = $08;
+       NRSRCMASK = $0f;
+       NRALIAS = $10;
+       NRCHAIN = $20;
+       NRRTYP = $03;
+       NRRINT = $00;
+       NRRORD = $01;
+       NRRNAM = $02;
+       NRADD = $04;
+       NRRENT = $03;
+       NR32BITOFF = $10;
+       NR32BITADD = $20;
+       NR16OBJMOD = $40;
+       NR8BITORD = $80;
+       PAGEPERDIR = 62;
+       LG2DIR = 7;
+
+    type
+       OBJPAGEDIR = record
+          next : longint;
+          ht : array[0..PAGEPERDIR-1] of word;
+       end;
+
+       e32_obj = record
+          o32_size : longint;
+          o32_base : longint;
+          o32_flags : longint;
+          o32_pagemap : longint;
+          o32_mapsize : longint;
+          o32_reserved : longint;
+       end;
+
+    const
+       OBJREAD = $0001;
+       OBJWRITE = $0002;
+       OBJRSRC = $0008;
+       OBJINVALID = $0080;
+       LNKNONPERM = $0600;
+       OBJNONPERM = $0000;
+       OBJPERM = $0100;
+       OBJRESIDENT = $0200;
+       OBJCONTIG = $0300;
+       OBJDYNAMIC = $0400;
+       OBJTYPEMASK = $0700;
+       OBJALIAS16 = $1000;
+       OBJBIGDEF = $2000;
+       OBJIOPL = $8000;
+       NSDISCARD = $0010;
+       NSMOVE = NSDISCARD;
+       NSSHARED = $0020;
+       NSPRELOAD = $0040;
+       NSEXRD = $0004;
+       NSCONFORM = $4000;
+
+    type
+       o32_map = record
+          o32_pagedataoffset : longint;
+          o32_pagesize : word;
+          o32_pageflags : word;
+       end;
+
+    const
+       VALID = $0000;
+       ITERDATA = $0001;
+       INVALID = $0002;
+       ZEROED = $0003;
+       RANGE = $0004;
+       ITERDATA2 = $0005;
+
+    type
+       rsrc32 = record
+          _type : word;
+          name : word;
+          cb : longint;
+          obj : word;
+          offset : longint;
+       end;
+
+{$PACKRECORDS 1}
+
+       LX_Iter = record
+          LX_nIter : word;
+          LX_nBytes : word;
+          LX_Iterdata : byte;
+       end;
+
+       b32_bundle = record
+          b32_cnt : byte;
+          b32_type : byte;
+          b32_obj : word;
+       end;
+
+{$PACKRECORDS NORMAL}
+    const
+       FIXENT16 = 3;
+       FIXENT32 = 5;
+       GATEENT16 = 5;
+       FWDENT = 7;
+       EMPTY = $00;
+       ENTRY16 = $01;
+       GATE16 = $02;
+       ENTRY32 = $03;
+       ENTRYFWD = $04;
+       TYPEINFO = $80;
+       E32EXPORT = $01;
+       E32SHARED = $02;
+       E32PARAMS = $f8;
+       FWD_ORDINAL = $01;
 
   implementation