summaryrefslogtreecommitdiff
path: root/ipl/progs/diffu.icn
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
commit6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1 (patch)
tree926065cf45450116098db664e3c61dced9e1f21a /ipl/progs/diffu.icn
downloadicon-6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1.tar.gz
Initial upstream version 9.4.3upstream/9.4.3
Diffstat (limited to 'ipl/progs/diffu.icn')
-rw-r--r--ipl/progs/diffu.icn88
1 files changed, 88 insertions, 0 deletions
diff --git a/ipl/progs/diffu.icn b/ipl/progs/diffu.icn
new file mode 100644
index 0000000..48a5e2e
--- /dev/null
+++ b/ipl/progs/diffu.icn
@@ -0,0 +1,88 @@
+############################################################################
+#
+# File: diffu.icn
+#
+# Subject: Program to show differences in files
+#
+# Author: Rich Morin
+#
+# Date: January 3, 1993
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This program exercises the dif() procedure, making it act like the
+# UNIX diff(1) file difference command.
+#
+# Usage: diffu f1 f2
+#
+# 3d2
+# < c
+# 7,8c6,7
+# < g
+# < h
+# ---
+# > i
+# > j
+#
+############################################################################
+#
+# Links: dif
+#
+############################################################################
+
+link dif
+
+invocable all
+
+procedure main(arg)
+ local f1, f2, ldr, n1, p1, n2, p2, h
+
+ if *arg ~= 2 then
+ zot("usage: diffu f1 f2")
+
+ f1 := open(arg[1]) | zot("cannot open " || arg[1])
+ f2 := open(arg[2]) | zot("cannot open " || arg[2])
+
+ every ldr := dif([f1,f2]) do {
+ n1 := *ldr[1].diffs; p1 := ldr[1].pos
+ n2 := *ldr[2].diffs; p2 := ldr[2].pos
+
+ if n1 = 0 then { # add lines
+ h := p1-1 || "a" || p2
+ if n2 > 1 then
+ h ||:= "," || (p2 + n2 - 1)
+ write(h)
+ every write("> " || !ldr[2].diffs)
+ }
+ else if n2 = 0 then { # delete lines
+ h := p1
+ if n1 > 1 then
+ h ||:= "," || (p1 + n1 - 1)
+ h ||:= "d" || p2-1
+ write(h)
+ every write("< " || !ldr[1].diffs)
+ }
+ else { # change lines
+ h := p1
+ if n1 > 1 then
+ h ||:= "," || (p1 + n1 - 1)
+ h ||:= "c" || p2
+ if n2 > 1 then
+ h ||:= "," || (p2 + n2 - 1)
+ write(h)
+ every write("< " || !ldr[1].diffs)
+ write("---")
+ every write("> " || !ldr[2].diffs)
+ }
+ }
+end
+
+
+procedure zot(msg) # exit w/message
+ write(&errout, "diff: " || msg)
+ exit(1)
+end