Contributor: AVONTURE CHRISTOPHE

{
                 =======================================

                       EXE-HEAD (c) AVC Software
                               Cardware

                  Display all  informations  containing
                  in the EXE DOS header.

                 =======================================

   Display all informations containing in the EXE DOS header.



               ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
               º                                        º°
               º          AVONTURE CHRISTOPHE           º°
               º              AVC SOFTWARE              º°
               º     BOULEVARD EDMOND MACHTENS 157/53   º°
               º           B-1080 BRUXELLES             º°
               º              BELGIQUE                  º°
               º                                        º°
               ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°
               °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°


}

Uses Crt;

Var Fich : File;
    Header : Array[0..27] of Byte;

Procedure Aide;

Begin

   Writeln ('');
   Writeln ('Please specify the name of executable file.');
   Writeln ('');
   Writeln ('For exemple :  EXE-HEAD.EXE  EXEMPLE.EXE');
   Writeln ('');

End;

Function Word2Hex(Number: Word) : String;

Const Hexa : Array [0..15] of Char = ('0','1','2','3','4','5','6','7','8',
                                      '9','A','B','C','D','E','F');

Var Ch1 , Ch2 : Byte;
    Ch3 , Ch4 : Byte;

Begin

  Ch1 := (Number Shr 8) shr (4);
  Ch2 := (Number Shr 8) - (Ch1 shl (4));
  Ch3 := (Number AND $FF) shr (4);
  Ch4 := (Number AND $FF)- (Ch3 shl (4));

  Word2Hex := Hexa[Ch1]+Hexa[Ch2]+Hexa[Ch3]+Hexa[Ch4];

End;



Begin

     If ((ParamCount = 0) or (ParamCount > 1)) then Aide
     Else Begin
          Assign (Fich, ParamStr(1));
          Reset (Fich, 1);
          BlockRead (Fich, Header, 28);
          Close (Fich);
          ClrScr;
          Writeln ('');
          Writeln ('þ AVC Software, Inc.                         (c) Octobre 1994');
          Writeln ('þ Exe-Head');
          WriteLn ('');
          If (Chr(Header[0]) = 'M') and (Chr(Header[1]) = 'Z') then Begin
            WriteLn ('Signature du fichier                        : ',Chr(Header[0]),Chr(Header[1]));
            WriteLn ('');
            WriteLn ('Taille de la derniŠre page                  : ' ,Word2Hex((Header[3] shl 8) + Header[2]),'h');
            WriteLn ('Nombres de pages                            : ' ,Word2Hex((Header[5] shl 8) + Header[4]),'h');
            WriteLn ('Entr‚es de la table de relocalisation       : ' ,Word2Hex((Header[7] shl 8) + Header[6]),'h');
            WriteLn ('Paragraphes de l''en-tˆte                    : ',Word2Hex((Header[9] shl 8) + Header[8]),'h');
            WriteLn ('MINALLOC                                    : ' ,Word2Hex((Header[11] shl 8) + Header[10]),'h');
            WriteLn ('MAXALLOC                                    : ' ,Word2Hex((Header[13] shl 8) + Header[12]),'h');
            WriteLn ('ss initial                                  : ' ,Word2Hex((Header[15] shl 8) + Header[14]),'h');
            WriteLn ('sp initial                                  : ' ,Word2Hex((Header[17] shl 8) + Header[16]),'h');
            WriteLn ('Total de contr“le                           : ' ,Word2Hex((Header[19] shl 8) + Header[18]),'h');
            WriteLn ('ip initial                                  : ' ,Word2Hex((Header[21] shl 8) + Header[20]),'h');
            WriteLn ('cs initial                                  : ' ,Word2Hex((Header[23] shl 8) + Header[22]),'h');
            WriteLn ('Offset de la table de relocalisation        : ' ,Word2Hex((Header[25] shl 8) + Header[24]),'h');
            WriteLn ('Nombre du segemnt de recouvrement           : ' ,Word2Hex((Header[27] shl 8) + Header[26]),'h');
          End
          Else WriteLn (ParamStr(1),' n''est pas un fichier de type .EXE');
          WriteLn ('');
     End;

End.