! File MOUSE:MOCOMP %begin {MOCOMP - compare files specified in a file-file in the form {filename filestorename datestamp timestamp %externalroutinespec connectfile(%string(255)f,%integer m,%integername s,l) %recordformat f(%string(31)name,filestore,date,time, (%bytename b %or %integer start,size)) %record(f)file1,file2 %string(31)in,out %predicate equal(%bytename a,b,%integer n) %cycle %trueif n<=0; n = n-1 %falseunless a=b; a == a[1]; b == b[1] %repeat %end %on 9 %start %stop %finish out = ":" %and in = cliparam %unless cliparam -> in.("/").out openinput(1,in); selectinput(1) openoutput(1,out); selectoutput(1) file1 = 0 %cycle file2_size = 0 read(file2_name;file2_filestore;file2_date;file2_time) %if file1_name=file2_name %start printstring(file1_name;" : ") connectfile(file1_filestore."::".file1_name,0,file1_start,file1_size)- %if file1_size=0 printstring(file1_filestore); printsymbol('-') connectfile(file2_filestore."::".file2_name,0,file2_start,file2_size) printstring(file2_filestore) %if file1_size-file2_size=0 %start printstring("=0, files are ") %if equal(file1_b,file2_b,file1_size) %start printstring("equal") %else printstring("different") %finish %elseif file1_size-file2_size>0 printstring(">0, files are ") %if equal(file1_b,file2_b,file2_size) - %or equal(file1_b[file1_size-file2_size],file2_b,file2_size) - %then printstring("nearly equal") %else printstring("different") %else printstring("<0, files are ") %if equal(file1_b,file2_b,file1_size) - %or equal(file1_b,file2_b[file2_size-file1_size],file1_size) - %then printstring("nearly equal") %else printstring("different") %finish newline %finish dispose(file1_b) %unless file1_size=0 file1 = file2 %repeat %end