diff options
Diffstat (limited to 'ipl/progs/lam.icn')
-rw-r--r-- | ipl/progs/lam.icn | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/ipl/progs/lam.icn b/ipl/progs/lam.icn new file mode 100644 index 0000000..4ed8125 --- /dev/null +++ b/ipl/progs/lam.icn @@ -0,0 +1,92 @@ +############################################################################ +# +# File: lam.icn +# +# Subject: Program to laminate files +# +# Author: Thomas R. Hicks +# +# Date: June 10, 1988 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# This program laminates files named on the command line onto +# the standard output, producing a concatenation of corresponding +# lines from each file named. If the files are different lengths, +# empty lines are substituted for missing lines in the shorter +# files. A command line argument of the form - s causes the string +# s to be inserted between the concatenated file lines. +# +# Each command line argument is placed in the output line at the +# point that it appears in the argument list. For example, lines +# from file1 and file2 can be laminated with a colon between each +# line from file1 and the corresponding line from file2 by the com- +# mand +# +# lam file1 -: file2 +# +# File names and strings may appear in any order in the argument +# list. If - is given for a file name, standard input is read at +# that point. If a file is named more than once, each of its lines +# will be duplicated on the output line, except that if standard +# input is named more than once, its lines will be read alter- +# nately. For example, each pair of lines from standard input can +# be joined onto one line with a space between them by the command +# +# lam - "- " - +# +# while the command +# +# lam file1 "- " file1 +# +# replicates each line from file1. +# +############################################################################ +# +# Links: usage +# +############################################################################ + +link usage + +global fndxs + +procedure main(a) + local bufs, i + bufs := list(*a) + fndxs := [] + if (*a = 0) | a[1] == "?" then Usage("lam file [file | -string]...") + every i := 1 to *a do { + if a[i] == "-" then { + a[i] := &input + put(fndxs,i) + } + else if match("-",a[i]) then { + bufs[i] := a[i][2:0] + a[i] := &null + } + else { + if not (a[i] := open(a[i])) then + stop("Can't open ",a[i]) + else put(fndxs,i) + } + } + if 0 ~= *fndxs then lamr(a,bufs) else Usage("lam file [file | -string]...") +end + +procedure lamr(args,bufs) + local i, j + every i := !fndxs do + bufs[i] := (read(args[i]) | &null) + while \bufs[!fndxs] do { + every j := 1 to *bufs do + writes(\bufs[j]) + write() + every i := !fndxs do + bufs[i] := (read(args[i]) | &null) + } +end |