The program is a Microsoft C6, large model program.  To make the
program, run "nmake -f showexe.mak".  The following files are 
included:

        readme.txt      This file.
        showexe.mak     Makefile for SHOWEXE.EXE.

        args.c          Command line argument processing module.
        args.h
        exe.h           WAS LEFT OUT OF ORIGINAL VERSION BY MISTAKE
        lx_exe.c        LX executable processing and printing.
        lx_exe.h
        mz_exe.c        MZ executable processing and printing.
        mz_exe.h
        ne_exe.c        NE executable processing and printing.
        ne_exe.h
        showexe.c       Main module and some utility functions.
        utils.c         A few other utility functions.
        utils.h
        types.h         Define some data types if neccessary.

        showexe.exe     The point of all this.

        rodley.ls1      C program listings from the article.
        rodley.ls2
        rodley.ls4
        rodley.ls5
        rodley.ls6
        rodley.ls7
        rodley.ls8

The program includes a recursive subdirectory search command line 
switch.  I added this so that one could easily get a reading on the
exe types included in new releases by simply going to the root 
and running "showexe -type -f *.exe" (or *.dll).  The one problem
there is that when the program is reporting only exe type it still
reads and deconstructs the whole file so it takes longer than it 
really needs to.
        
This program has one great vice; its reliance on fixed size arrays
for holding the deconstructed tables.  I did it that way originally
(in 1989) because that's the way I understood tables then; as C arrays.
If I had it to do over again, being a little more open-minded about the
definition of tables, I'd write the program as a 32-bit flat exe, rather 
than the large-model 16-bit exe it is now and I'd probably leave the 
exe tables in their original format.  The model that comes to mind is 
a C++ program that makes each table a class and incorporates the table
structure in the display methods.

I hope this proves useful.  Any comments about this program can be 
sent to me, John Rodley, via internet mail to john.rodley@channel1.com,
jrodley@bix.com (phasing that one out) or Compuserve 72607,3142.

Release 2:

1. exe.h was left out of Release 1 by mistake, now fixed
2. File handling:
   Release 1 file handling via the -f argument was miserably buggy.
   Only handled current directory correctly.
   Release 2 now handles:
      current drive/current directory
      specified drive/current directory
      specified or current drive/fully qualified directory
   Release 2 does not handle partially qualified pathnames of the sort:
      C:SUBDIR\FILENAME.EXE
3. Type 2 relocations in NE executables still not handled properly.
4. Relocation chain overflow in NE executables still happens.  You can
   increase MAX_RELOCATIONS in ne_exe.h to try to help this.

My apologies for the mistakes in Release 1.
      

John Rodley
