home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # Name: diffn.icn
- #
- # Title: Show differences files
- #
- # Author: Robert J. Alexander
- #
- # Date: May 15, 1989
- #
- ############################################################################
- #
- # This program shows the differences between n files. Is is invoked as
- #
- # diffn file1 file2 ... filen
- #
- ############################################################################
- #
- # Links: dif
- #
- ############################################################################
-
- link dif
- global f1,f2
- record dfile(file,linenbr)
-
- procedure main(arg)
- local f, i, files, drec, status
-
- if *arg < 2 then stop("usage: diffn file file ...")
- f := list(*arg)
- every i := 1 to *arg do
- f[i] := dfile(open(arg[i]) | stop("Can't open ",arg[i]),0)
- files := list(*arg)
- every i := 1 to *arg do {
- write("File ",i,": ",arg[i])
- files[i] := diff_proc(myread,f[i])
- }
- every drec := dif(files) do {
- status := "diffs"
- write("==================================")
- every i := 1 to *drec do {
- write("---- File ",i,", ",
- (drec[i].pos > f[i].linenbr & "end of file") |
- "line " || drec[i].pos,
- " ---- (",arg[i],")")
- listrange(drec[i].diffs,drec[i].pos)
- }
- }
- if /status then write("==== Files match ====")
- return
- end
-
- procedure listrange(dlist,linenbr)
- local x
-
- every x := !dlist do {
- write(x); linenbr +:= 1
- }
- return
- end
-
- procedure myread(x)
- return x.linenbr <- x.linenbr + 1 & read(x.file)
- end
-