!BCOMPARE: print differences between two binary files
%include "INC:UTIL.IMP";  !for parameter acquisition
%begin
%recordformat INFO(%integer stream,ad,amount,%string(255) filename,
                   %bytearray store(1:32))
%owninteger ad=0
%record(info) a,b

%routine initialise
%ownstring(127) out=":T"
  define param("First file",a_filename,paminfile+pamnodefault)
  define param("Second file",b_filename,paminfile+pamnodefault)
  define param("Results",out,pamoutfile)
  process parameters(cliparam)
  a_stream = 1;  b_stream = 2
  selectoutput(1)
%end

%routine readin(%record(info)%name r)
%integer i
%on 9 %start
  %return
%finish
  select input(r_stream)
  r_amount = 0
  read symbol(r_store(i)) %and r_amount = r_amount+1 %for i = 1,1,32
%end

%predicate equal
%integer i
  %false %if a_amount # b_amount
  %for i = 1,1,a_amount %cycle
    %false %if a_store(i) # b_store(i)
  %repeat
  %true
%end

%routine show(%record(info)%name r)
%integer i
  printstring(r_filename." at ");  phex4(r_ad);  newline
  %for i = 1,1,32 %cycle
    space %if (i-1)&3 = 0
    phex2(r_store(i))
  %repeat
  newline
%end

  initialise
  a_ad = 0;  b_ad = 0
  %cycle
    readin(a)
    readin(b)
    %exit %if a_amount = 0 %and b_amount = 0
    %if %not equal %start
      show(a)
      show(b)
    %finish
    a_ad = a_ad+a_amount;  b_ad = b_ad+b_amount
  %repeat
%endofprogram
