home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
lam.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
3KB
|
93 lines
############################################################################
#
# 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