PROGRAM t;

 {Program to read a disk file using Pascal direct I/O }

CONST
   version = '1.0';

TYPE
   byte = 0..255;
   sector_array = PACKED ARRAY [1..128] OF byte;
   
   char12 = PACKED ARRAY [1..12] OF CHAR;

VAR
   infile   :FILE OF sector_array;
   infilename   :char12;

   s_recno     :INTEGER;
   s_buffer   :sector_array;

{----------------------------------------------------------}
{----------------------------------------------------------}

PROCEDURE dump_buffer (size :INTEGER) ;

VAR
   first   :INTEGER;
   nchars   :INTEGER;
   col     :INTEGER;
   i       :INTEGER;

BEGIN{PROCEDURE}
   first := 1;
   WHILE size > 0 DO BEGIN
      nchars := size;
      IF nchars > 78 THEN nchars := 78;
      FOR col := first TO first+nchars-1 DO BEGIN
         i := s_buffer[col];
         IF (i<32) OR (i>126) THEN i := ORD('?');
         WRITE ( CHR(i) );
      END{FOR};
      WRITELN; 
      first := first + nchars;
      size := size - nchars;
   END{WHILE};
END{PROCEDURE};


{-------------------------------------------------------------}

PROCEDURE open_file;  

BEGIN{PROCEDURE}
   WRITE('Enter the input filename: ');
   infilename := '            ';
   READLN(infilename);
   WRITELN(' Filename=',infilename);

   RESET(infilename,infile);
END{PROCEDURE};

{--------------------------------------------}
PROCEDURE pause;
 
VAR
   response   :CHAR; 

BEGIN{PROCEDURE}
   WRITELN('enter CR to continue');
   READLN(response);
END{PROCEDURE};

{--------------------------------------------------}
{--------------------------------------------------}

BEGIN{PROGRAM}
   WRITELN('FileDump  Version ',version);

   open_file; 

   s_recno := 0;
   WHILE NOT EOF(infile) DO BEGIN
      s_recno := s_recno + 1;
      READ (infile:0, s_buffer);

      WRITELN('Sector #', s_recno:4);

      dump_buffer (128);
  
      pause;

   END{WHILE};
END{PROGRAM}.

