with Ada.Text_IO; use Ada.Text_IO; with Ada.Sequential_IO; with Ada.Command_Line; use Ada.Command_Line; procedure sillymachine is type Byte is mod 256; package Bin_IO is new Ada.Sequential_IO (Byte); type ByteArr is array (Integer range <>) of Byte; F : Bin_IO.File_Type; FileName : String (1 .. 255); FileNameLength : Integer := 0; ValidHeader : ByteArr (0 .. 15); Arr : ByteArr (0 .. 15); I : Integer := 0; Value : Byte; begin ValidHeader (0) := 6; ValidHeader (1) := 148; ValidHeader (2) := 32; ValidHeader (3) := 118; ValidHeader (4) := 101; ValidHeader (5) := 114; ValidHeader (6) := 121; ValidHeader (7) := 95; ValidHeader (8) := 115; ValidHeader (9) := 105; ValidHeader (10) := 108; ValidHeader (11) := 108; ValidHeader (12) := 121; ValidHeader (13) := 0; ValidHeader (14) := 0; ValidHeader (15) := 0; if Argument_Count = 0 then New_Line(1); Put_Line("Usage: sillymachine "); New_Line(1); goto THE_END; end if; FileNameLength := Argument (1)'Length; FileName(1 .. FileNameLength) := Argument (1); Bin_IO.Open(F, Bin_IO.In_File, FileName); while not Bin_IO.End_Of_File (F) loop Bin_IO.Read(F, Value); if ValidHeader (I) = Value then Value := Value; -- useless line so compiler does not complain else New_Line(1); Put_Line("Error: Please use a valid sm binary file"); New_Line(1); goto THE_END; end if; I := I + 1; end loop; Put_Line("Header passed"); << THE_END >> end sillymachine;