PROGRAM COMPARE;(*$I+,S+  *)
(* THIS PROGRAM WILL DO A BYTE BY BYTE COMPARE
OF TWO FILES. UPON EXECUTION THE OPERATOR WILL
BE ASKED THE NAME OF THE TWO INPUT FILES TO BE
COMPARED AND THE NAME OF THE OUTPUT FILE THAT THE COMPARE INFO
IS TO BE DUMPED TO. *)
CONST
BLANK14='              ';
TYPE
BYTE=0..255;
STR4=STRING 4;
STR16=ARRAY[1..16] OF CHAR;
VAR
NOCOMPARE: BOOLEAN;
ABYTE1,ABYTE2: BYTE;
FVAR1,FVAR2: FILE OF BYTE;
FVAR3: TEXT;
HEXSTRING: STR16;
FNAME1,FNAME2,FNAME3: STRING 14;
K: INTEGER;
I: REAL;
(****************************************************************)
PROCEDURE CNVRTTOHEX(INT: INTEGER;VAR HEXVAL: STR4);
CONST
 HEX1000=4096;
VAR
 K,DIVISOR,J: INTEGER;
BEGIN
 HEXVAL:='    ';
 DIVISOR:=HEX1000;
 FOR K:=1 TO 4 DO
  BEGIN
   J:=INT DIV DIVISOR;
   INT:=INT MOD DIVISOR;
   HEXVAL[K]:=HEXSTRING[J+1];
   DIVISOR:=DIVISOR DIV 16;
  END;
END;
(****************************************************************)
PROCEDURE LOGDIFF;
 VAR
  T1:STR4;
  TEMPINT: INTEGER;
 BEGIN
  WRITE(FVAR3,I:5:0,'  ');
  TEMPINT:=ABYTE1;
  CNVRTTOHEX(TEMPINT,T1);
  WRITE(FVAR3,T1[3],T1[4],'  ');
  TEMPINT:=ABYTE2;
  CNVRTTOHEX(TEMPINT,T1);
  WRITELN(FVAR3,T1[3],T1[4]);
 END;
(****************************************************************)
BEGIN
HEXSTRING:='0123456789ABCDEF';
NOCOMPARE:=FALSE;
FNAME1:=BLANK14;
FNAME2:=BLANK14;
FNAME3:=BLANK14;
WRITE('ENTER COMPARE FILE NUMBER 1-- ');
READLN(FNAME1);
WRITE('ENTER COMPARE FILE NUMBER 2-- ');
READLN(FNAME2);
WRITE('ENTER OUTPUT LOG FILE-- ');
READLN(FNAME3);
RESET(FNAME1,FVAR1);
RESET(FNAME2,FVAR2);
REWRITE(FNAME3,FVAR3);
I:=1;
WRITELN(FVAR3,'COMPARING ',FNAME1,' WITH ',FNAME2);
WRITELN('COMPARING ',FNAME1,' WITH ',FNAME2);
WRITELN('VERSION 0.0 ,2/22/81 OF COMPARE PROGRAM');
WHILE ((NOT EOF(FVAR1)) AND (NOT EOF(FVAR2))) DO
 BEGIN
  READ(FVAR1,ABYTE1);
  READ(FVAR2,ABYTE2);
  IF ABYTE1<>ABYTE2
   THEN
    BEGIN
     LOGDIFF;
     NOCOMPARE:=TRUE;
    END;
  I:=I+1;
  END;
IF (EOF(FVAR1) AND (NOT EOF(FVAR2)))
 THEN
  BEGIN
   WRITELN(FVAR3,FNAME2,' IS LONGER THAN ',FNAME1);
   NOCOMPARE:=TRUE;
  END;
IF ((NOT EOF(FVAR1)) AND EOF(FVAR2))
 THEN
  BEGIN
   WRITELN(FVAR3,FNAME1,' IS LONGER THAN ',FNAME2);
   NOCOMPARE:=TRUE;
  END;
IF NOT NOCOMPARE
 THEN
  WRITELN(FVAR3,' BOTH FILES COMPARED COMPLETELY WITH EACH OTHER');
WRITELN(FVAR3,' THERE WERE ',(I-1):2:0,' CHARACTERS READ');
END.