35 lines · 1.2 KB · Fortran
RawDownload
#! /usr/bin/env gforth\ Print percentage of difference between file1 and file2variable file1variable file2variable buf1variable buf2variable buf-lencreate   file-len 0 , 0 ,create   #diff 0 , 0 , : d!       swap over !  cell+ ! ;: d@       dup cell+ @ swap @ ; : set-len    file1 @ file-size throw  file2 @ file-size throw  dmin file-len d!             file-len d@ 8192. dmin d>s buf-len ! ;: set-bufs   here buf1 ! buf-len @ allot  here buf2 ! buf-len @ allot ;: set-files  1 arg r/o open-file throw file1 !             2 arg r/o open-file throw file2 ! ; : read       buf1 @ buf-len @ file1 @ read-file throw 0= if true exit then             buf2 @ buf-len @ file2 @ read-file throw 0= if true exit then false ;: #diff+     #diff d@ 1. d+ #diff d! ;: diff       read if true exit then             buf-len @ 0 do buf1 @ i + c@  buf2 @ i + c@ <> if #diff+ then loop false ;: file-diff  begin diff until ; : %.         <# [char] % hold #s #> type ;: summary    #diff d@ d>f file-len d@ d>f f/  100e0 f* f>d %. cr ; : usage      ." usage: pdiff file1 file2" cr bye ;: setup      argc @ 3 < if usage then set-files set-len set-bufs ;: zero-size? buf-len @ 0= ;: check      zero-size? if 100. %. cr bye then ; setup check file-diff summary bye