NAME=Open LE cdogs.exe
FILE=bins/le/cdogs.exe
CMDS=<<EOF
iH
echo ---
ie:vaddr:quiet
echo ---
iS
echo ---
ir > $relocs
cat $relocs~?
cat $relocs~0x00010~?
cat $relocs~0x00011~?
cat $relocs~0x00012~?
cat $relocs~0x00013~?
cat $relocs~0x00014~?
cat $relocs~0x00015~?
cat $relocs~0x00016~?
cat $relocs~0x00017~?
cat $relocs~0x00018~?
cat $relocs~0x00019~?
cat $relocs~0x0001a~?
cat $relocs~0x0001b~?
cat $relocs~0x0001c~?
cat $relocs~0x0001d~?
cat $relocs~0x0001e~?
cat $relocs~0x0001f~?
cat $relocs~0x00020~?
cat $relocs~0x00021~?
cat $relocs~0x00022~?
cat $relocs~0x00023~?
cat $relocs~0x00024~?
cat $relocs~0x00025~?
cat $relocs~0x00026~?
cat $relocs~0x00027~?
cat $relocs~0x00028~?
cat $relocs~0x00029~?
cat $relocs~0x0002a~?
cat $relocs~0x0002b~?
cat $relocs~0x0002c~?
cat $relocs~0x0002d~?
cat $relocs~0x0002e~?
cat $relocs~0x0002f~?
cat $relocs~0x00030~?
cat $relocs~0x00031~?
cat $relocs~0x00032~?
cat $relocs~0x00033~?
cat $relocs~0x00034~?
cat $relocs~0x00035~?
cat $relocs~0x00036~?
cat $relocs~0x00037~?
cat $relocs~0x00038~?
cat $relocs~0x00039~?
cat $relocs~0x0003a~?
cat $relocs~0x0003b~?
cat $relocs~0x0003c~?
cat $relocs~0x0003d~?
cat $relocs~0x0003e~?
cat $relocs~0x0003f~?
cat $relocs~0x00040~?
cat $relocs~0x00041~?
cat $relocs~0x00042~?
cat $relocs~0x00043~?
cat $relocs~0x00044~?
cat $relocs~0x00045~?
cat $relocs~0x00046~?
cat $relocs~0x00047~?
cat $relocs~0x00048~?
cat $relocs~0x00049~?
cat $relocs~0x0004a~?
cat $relocs~0x0004b~?
cat $relocs~0x0004c~?
cat $relocs~0x0004d~?
cat $relocs~0x0004e~?
cat $relocs~0x0004f~?
echo ---
aac
# aaef
aflc
echo ---
s
echo ---
pi 1
EOF
EXPECT=<<EOF
le:
  signature: "LE"
  le_offset: 0x2d98
  byte_order: "little endian"
  word_order: "little endian"
  format_level: 0
  module_name: "cdogs"
  type: "Program module (EXE)"
  cpu: "80386"
  os: "OS/2"
  arch: "x86"
  version: 0
  mflags: 0x200
  flags:
    - "PMWINAPI"
    - "EXE"
  mpages: 61
  initial_eip_obj: 1
  initial_eip: 0x16058
  initial_stack_obj: 2
  initial_esp: 0x26030
  page_size: 0x1000
  last_page_size: 0xd8c
  fixup_size: 0xa14a
  fixup_checksum: 0x0
  loader_size: 0xa278
  loader_checksum: 0x0
  obj_table: 0xc4
  obj_count: 2
  obj_page_map: 0xf4
  obj_iter_data_map: 0x0
  resource_table: 0x1e8
  resource_count: 0
  resident_name_table: 0x1e8
  entry_table: 0x1f1
  directives_table: 0x0
  directives_count: 0
  fixup_page_table: 0x1f2
  fixup_record_table: 0x2ea
  import_module_name_table: 0xa33b
  import_module_name_count: 0
  import_procedure_name_table: 0xa33b
  per_page_checksum_table: 0x0
  enumerated_data_pages: 0xd200
  number_of_preload_pages: 0
  non_resident_names_table: 0x0
  size_non_resident_names: 0
  checksum_non_resident_names: 0x0
  autodata_obj: 2
  debug_info: 0x0
  debug_length: 0x0
  preload_pages: 0
  demand_pages: 0
  heap_size: 0x0
  stack_size: 0x0

---
0x00026058
---
     paddr    size      vaddr   vsize align perm name   type flags 
-------------------------------------------------------------------
0x0000d200 0x2d000 0x00010000 0x2d000   0x0 -r-x obj1_1      
0x0003a200  0xfd8c 0x00040000 0x26030   0x0 -rw- obj2_1      
---
5237
151
160
102
133
208
172
337
212
143
325
262
174
219
305
296
330
260
322
409
186
415
502
181
307
380
113
85
240
124
198
179
186
222
159
110
318
274
24
366
356
179
103
128
157
128
8
0
0
282
533
670
17
2
0
0
95
81
45
6
0
0
381
561
588
---
789
---
0x26058
---
jmp 0x260d0
EOF
RUN

NAME=Open LX GCC.EXE
FILE=bins/le/GCC.EXE
CMDS=<<EOF
iH
echo ---
ie:vaddr:quiet
echo ---
iS
echo ---
ir
echo ---
il
EOF
EXPECT=<<EOF
le:
  signature: "LX"
  le_offset: 0x600
  byte_order: "little endian"
  word_order: "little endian"
  format_level: 0
  module_name: "gcc"
  type: "Program module (EXE)"
  cpu: "80386"
  os: "OS/2"
  arch: "x86"
  version: 0
  mflags: 0x210
  flags:
    - "NOINTFIXUPS"
    - "PMWINAPI"
    - "EXE"
  mpages: 16
  initial_eip_obj: 1
  initial_eip: 0x0
  initial_stack_obj: 4
  initial_esp: 0x800000
  page_size: 0x1000
  page_shift: 0xc
  fixup_size: 0x9b
  fixup_checksum: 0x0
  loader_size: 0xe8
  loader_checksum: 0x0
  obj_table: 0xc4
  obj_count: 4
  obj_page_map: 0x124
  obj_iter_data_map: 0x0
  resource_table: 0x0
  resource_count: 0
  resident_name_table: 0x1a4
  entry_table: 0x1ab
  directives_table: 0x0
  directives_count: 0
  fixup_page_table: 0x1ac
  fixup_record_table: 0x1f0
  import_module_name_table: 0x239
  import_module_name_count: 2
  import_procedure_name_table: 0x246
  per_page_checksum_table: 0x0
  enumerated_data_pages: 0x1000
  number_of_preload_pages: 0
  non_resident_names_table: 0x0
  size_non_resident_names: 0
  checksum_non_resident_names: 0x0
  autodata_obj: 2
  debug_info: 0x0
  debug_length: 0x0
  preload_pages: 0
  demand_pages: 1
  heap_size: 0x0
  stack_size: 0x0

---
0x00010000
---
     paddr   size      vaddr     vsize align perm name   type flags 
--------------------------------------------------------------------
0x00001000 0xf000 0x00010000    0xf000   0x0 -r-x obj1_1      
0x00010000 0x1000 0x00020000    0x2804   0x0 -rw- obj2_1      
0x00000000    0x0 0x00030000 0x2000000   0x0 -rw- obj3_1      
0x00000000    0x0 0x02030000  0x800000   0x0 -rw- obj4_1      
---
     vaddr      paddr     target type   name         
-----------------------------------------------------
0x00010006 0x00001006 0x02832000 SET_32 emx_1
0x0001000d 0x0000100d 0x02832004 SET_32 emx_2
0x0001d210 0x0000e210 0x02832008 SET_32 doscalls_273
0x0001d234 0x0000e234 0x0283200c SET_32 doscalls_253
0x0001d266 0x0000e266 0x02832010 SET_32 doscalls_283
0x0001d282 0x0000e282 0x02832014 SET_32 doscalls_229
0x0001d2f2 0x0000e2f2 0x02832018 SET_32 doscalls_257
0x0001d389 0x0000e389 0x0283201c SET_32 doscalls_282
0x0001d39f 0x0000e39f 0x02832018 SET_32 doscalls_257
0x0001d3d9 0x0000e3d9 0x02832020 SET_32 doscalls_281
0x0001d3f4 0x0000e3f4 0x02832018 SET_32 doscalls_257
---
library  
---------
emx
doscalls
EOF
RUN

NAME=Open LX GNUGREP.DLL
FILE=bins/le/GNUGREP.DLL
CMDS=<<EOF
iH
echo ---
ie:vaddr:quiet
echo ---
is
echo ---
iS
echo ---
il
echo ---
ir > $relocs
cat $relocs~?
cat $relocs~GNUREGEX~?
cat $relocs~EMXLIBC~?
cat $relocs~emx~?
EOF
EXPECT=<<EOF
le:
  signature: "LX"
  le_offset: 0x80
  byte_order: "little endian"
  word_order: "little endian"
  format_level: 0
  module_name: "GNUGREP"
  type: "Library module (DLL)"
  cpu: "80386"
  os: "OS/2"
  arch: "x86"
  version: 131073
  mflags: 0x8002
  flags:
    - "DLL"
  mpages: 11
  initial_eip_obj: 1
  initial_eip: 0x0
  initial_stack_obj: 0
  initial_esp: 0x0
  page_size: 0x1000
  page_shift: 0x9
  fixup_size: 0x10be
  fixup_checksum: 0x0
  loader_size: 0xcd
  loader_checksum: 0x0
  obj_table: 0xc4
  obj_count: 4
  obj_page_map: 0x124
  obj_iter_data_map: 0x0
  resource_table: 0x0
  resource_count: 0
  resident_name_table: 0x17c
  entry_table: 0x187
  directives_table: 0x0
  directives_count: 0
  fixup_page_table: 0x191
  fixup_record_table: 0x1c1
  import_module_name_table: 0x123a
  import_module_name_count: 3
  import_procedure_name_table: 0x124f
  per_page_checksum_table: 0x0
  enumerated_data_pages: 0x1400
  number_of_preload_pages: 0
  non_resident_names_table: 0x9800
  size_non_resident_names: 38
  checksum_non_resident_names: 0x0
  autodata_obj: 4
  debug_info: 0x0
  debug_length: 0x0
  preload_pages: 0
  demand_pages: 1
  heap_size: 0x0
  stack_size: 0x0

---
0x00010000
0x00010ddc
---
nth      paddr      vaddr bind   type size lib name            
---------------------------------------------------------------
  1 0x000023dc 0x00010ddc GLOBAL UNK     0     grepmain
  2 0x00000000 0x00043000 GLOBAL UNK     0     imp.EMXLIBC_513
  3 0x00000000 0x00043004 GLOBAL UNK     0     imp.emx_2
  4 0x00000000 0x00043008 GLOBAL UNK     0     imp.EMXLIBC_770
  5 0x00000000 0x0004300c GLOBAL UNK     0     imp.EMXLIBC_712
  6 0x00000000 0x00043010 GLOBAL UNK     0     imp.EMXLIBC_521
  7 0x00000000 0x00043014 GLOBAL UNK     0     imp.EMXLIBC_205
  8 0x00000000 0x00043018 GLOBAL UNK     0     imp.EMXLIBC_402
  9 0x00000000 0x0004301c GLOBAL UNK     0     imp.EMXLIBC_595
 10 0x00000000 0x00043020 GLOBAL UNK     0     imp.EMXLIBC_403
 11 0x00000000 0x00043024 GLOBAL UNK     0     imp.EMXLIBC_534
 12 0x00000000 0x00043028 GLOBAL UNK     0     imp.EMXLIBC_214
 13 0x00000000 0x0004302c GLOBAL UNK     0     imp.EMXLIBC_218
 14 0x00000000 0x00043030 GLOBAL UNK     0     imp.EMXLIBC_219
 15 0x00000000 0x00043034 GLOBAL UNK     0     imp.EMXLIBC_221
 16 0x00000000 0x00043038 GLOBAL UNK     0     imp.EMXLIBC_545
 17 0x00000000 0x0004303c GLOBAL UNK     0     imp.EMXLIBC_801
 18 0x00000000 0x00043040 GLOBAL UNK     0     imp.EMXLIBC_546
 19 0x00000000 0x00043044 GLOBAL UNK     0     imp.EMXLIBC_548
 20 0x00000000 0x00043048 GLOBAL UNK     0     imp.EMXLIBC_228
 21 0x00000000 0x0004304c GLOBAL UNK     0     imp.EMXLIBC_557
 22 0x00000000 0x00043050 GLOBAL UNK     0     imp.EMXLIBC_817
 23 0x00000000 0x00043054 GLOBAL UNK     0     imp.EMXLIBC_705
 24 0x00000000 0x00043058 GLOBAL UNK     0     imp.EMXLIBC_520
 25 0x00000000 0x0004305c GLOBAL UNK     0     imp.EMXLIBC_716
 26 0x00000000 0x00043060 GLOBAL UNK     0     imp.EMXLIBC_525
 27 0x00000000 0x00043064 GLOBAL UNK     0     imp.EMXLIBC_400
 28 0x00000000 0x00043068 GLOBAL UNK     0     imp.EMXLIBC_215
 29 0x00000000 0x0004306c GLOBAL UNK     0     imp.EMXLIBC_541
 30 0x00000000 0x00043070 GLOBAL UNK     0     imp.EMXLIBC_223
 31 0x00000000 0x00043074 GLOBAL UNK     0     imp.EMXLIBC_504
 32 0x00000000 0x00043078 GLOBAL UNK     0     imp.EMXLIBC_700
 33 0x00000000 0x0004307c GLOBAL UNK     0     imp.EMXLIBC_509
 34 0x00000000 0x00043080 GLOBAL UNK     0     imp.EMXLIBC_761
 35 0x00000000 0x00043084 GLOBAL UNK     0     imp.EMXLIBC_315
 36 0x00000000 0x00043088 GLOBAL UNK     0     imp.EMXLIBC_401
 37 0x00000000 0x0004308c GLOBAL UNK     0     imp.EMXLIBC_213
 38 0x00000000 0x00043090 GLOBAL UNK     0     imp.GNUREGEX_4
 39 0x00000000 0x00043094 GLOBAL UNK     0     imp.GNUREGEX_6
 40 0x00000000 0x00043098 GLOBAL UNK     0     imp.GNUREGEX_9
 41 0x00000000 0x0004309c GLOBAL UNK     0     imp.GNUREGEX_12
 42 0x00000000 0x000430a0 GLOBAL UNK     0     imp.EMXLIBC_207
---
     paddr   size      vaddr  vsize align perm name   type flags 
-----------------------------------------------------------------
0x00001600 0x7e00 0x00010000 0x8000   0x0 -r-x obj1_1      
0x00009400  0x200 0x00020000 0x1000   0x0 -r-x obj2_1      
0x00009600  0x200 0x00030000 0x1000   0x0 -r-x obj3_1      
0x00001400  0x200 0x00040000 0x1000   0x0 -rw- obj4_1      
---
library  
---------
GNUREGEX
EMXLIBC
emx
---
1168
8
183
184
EOF
RUN

NAME=DOSEXT.EXE open extender binary
FILE=bins/le/DOSEXT.EXE
BROKEN=1
CMDS=iH
EXPECT=<<EOF
le:
  signature: "LE"
  le_offset: 0x3803c
  mz_offset: 0x352a4
  byte_order: "little endian"
  word_order: "little endian"
  format_level: 0
  module_name: "hello"
  type: "Program module (EXE)"
  cpu: "80386"
  os: "OS/2"
  arch: "x86"
  version: 0
  mflags: 0x200
  flags:
    - "PMWINAPI"
    - "EXE"
  mpages: 7
  initial_eip_obj: 1
  initial_eip: 0xc4
  initial_stack_obj: 2
  initial_esp: 0x1f30
  page_size: 0x1000
  last_page_size: 0x96e
  fixup_size: 0xfbe
  fixup_checksum: 0x0
  loader_size: 0x56
  loader_checksum: 0x0
  obj_table: 0xc4
  obj_count: 2
  obj_page_map: 0xf4
  obj_iter_data_map: 0x0
  resource_table: 0x110
  resource_count: 0
  resident_name_table: 0x110
  entry_table: 0x119
  directives_table: 0x0
  directives_count: 0
  fixup_page_table: 0x11a
  fixup_record_table: 0x13a
  import_module_name_table: 0x10d7
  import_module_name_count: 0
  import_procedure_name_table: 0x10d7
  per_page_checksum_table: 0x0
  enumerated_data_pages: 0x4000
  number_of_preload_pages: 0
  non_resident_names_table: 0x0
  size_non_resident_names: 0
  checksum_non_resident_names: 0x0
  autodata_obj: 2
  debug_info: 0x0
  debug_length: 0x0
  preload_pages: 0
  demand_pages: 0
  heap_size: 0x0
  stack_size: 0x1000

EOF
RUN

NAME=hellolx.dll unpack iterated page
FILE=bins/le/hellolx.dll
CMDS=p8 12 @ 0x20004
EXPECT=<<EOF
68656c6c6f206c7820646c6c
EOF
RUN

NAME=sdl.dll
FILE=bins/le/sdl.dll
CMDS=<<EOF
p8 8 @ 0x20000
echo ---
p8 6 @ 0x1000B
echo ---
p8 4 @ 0x202bd
echo ---
p8 4 @ 0x20b32
EOF
EXPECT=<<EOF
ccebfd9090909000
---
595005000200
---
3fad0500
---
69010600
EOF
RUN
