aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/lam
diff options
context:
space:
mode:
authorPhilippe Charnier <charnier@FreeBSD.org>1997-07-18 06:43:15 +0000
committerPhilippe Charnier <charnier@FreeBSD.org>1997-07-18 06:43:15 +0000
commitdf8996586cdd0b307634fabdd2ac5f4bbdd57f3e (patch)
treeafd6a9eb548ba93b846c47996bfc1cbcd4813ede /usr.bin/lam
parent517c663956da827562bfb1e5424cfc07711a4424 (diff)
downloadsrc-df8996586cdd0b307634fabdd2ac5f4bbdd57f3e.tar.gz
src-df8996586cdd0b307634fabdd2ac5f4bbdd57f3e.zip
Use err(3) instead of local redefintion. Add usage() as a separate
function. Rewrote man page in mdoc format.
Notes
Notes: svn path=/head/; revision=27497
Diffstat (limited to 'usr.bin/lam')
-rw-r--r--usr.bin/lam/lam.1111
-rw-r--r--usr.bin/lam/lam.c43
2 files changed, 75 insertions, 79 deletions
diff --git a/usr.bin/lam/lam.1 b/usr.bin/lam/lam.1
index 660e5dc9712d..7151952cec5d 100644
--- a/usr.bin/lam/lam.1
+++ b/usr.bin/lam/lam.1
@@ -31,97 +31,98 @@
.\"
.\" @(#)lam.1 8.1 (Berkeley) 6/6/93
.\"
-.TH LAM 1 "June 6, 1993"
-.UC 4
-.SH NAME
-lam \- laminate files
-.SH SYNOPSIS
-.B lam [ \-[fp]
-min.max
-.B ] [ \-s
-sepstring
-.B ] [ \-t
-c
-.B ]
-file ...
-.SH DESCRIPTION
-.I Lam
+.Dd June 6, 1993
+.Dt LAM 1
+.Os
+.Sh NAME
+.Nm lam
+.Nd laminate files
+.Sh SYNOPSIS
+.Nm
+.Op Fl f Ar min.max
+.Op Fl s Ar sepstring
+.Op Fl t Ar c
+.Ar file ...
+.Nm lam
+.Op Fl p Ar min.max
+.Op Fl s Ar sepstring
+.Op Fl t Ar c
+.Ar file ...
+.Sh DESCRIPTION
+.Nm Lam
copies the named files side by side onto the standard output.
The
-.IR n -th
+.Em n-th
input lines from the input
-.IR file s
+.Ar files
are considered fragments of the single long
-.IR n -th
+.Em n-th
output line into which they are assembled.
The name `\fB\-\fP' means the standard input, and may be repeated.
-.PP
+.Pp
Normally, each option affects only the
-.I file
+.Ar file
after it.
If the option letter is capitalized it affects all subsequent files
until it appears again uncapitalized.
The options are described below.
-.IP \fB\-f\fP\ min.max
+.Bl -tag -width indent
+.It Fl f Ar min.max
Print line fragments according to the format string
-.IR min.max ,
+.Ar min.max ,
where
-.I min
+.Ar min
is the minimum field width and
-.I max
+.Ar max
the maximum field width.
If
-.I min
+.Ar min
begins with a zero, zeros will be added to make up the field width,
and if it begins with a `\-', the fragment will be left-adjusted
within the field.
-.IP \fB\-p\fP\ min.max
-Like \fB\-f\fP,
+.It Fl p Ar min.max
+Like
+.Fl f ,
but pad this file's field when end-of-file is reached
and other files are still active.
-.IP \fB\-s\fP\ sepstring
+.It Fl s Ar sepstring
Print
-.I sepstring
+.Ar sepstring
before printing line fragments from the next file.
This option may appear after the last file.
-.IP \fB\-t\fP\ c
+.It Fl t Ar c
The input line terminator is
-.I c
+.Ar c
instead of a newline.
The newline normally appended to each output line is omitted.
-.PP
+.El
+.Pp
To print files simultaneously for easy viewing use
-.IR pr (1).
-.SH EXAMPLES
-.de IC
-.IP
-.ss 36
-.ft B
-..
-.de NC
-.br
-.ss 12
-.PP
-..
-.PP
+.Xr pr 1 .
+.Sh EXAMPLES
The command
-.IC
+.Bd -literal
lam file1 file2 file3 file4
-.NC
+.Ed
+
joins 4 files together along each line.
To merge the lines from four different files use
-.IC
+.Bd -literal
lam file1 \-S "\\
.br
" file2 file3 file4
-.NC
+.Ed
+
Every 2 lines of a file may be joined on one line with
-.IC
+.Bd -literal
lam \- \- < file
-.NC
+.Ed
+
and a form letter with substitutions keyed by `@' can be done with
-.IC
+.Bd -literal
lam \-t @ letter changes
-.NC
-.SH SEE ALSO
-join(1), pr(1), printf(3)
+.Ed
+.Sh SEE ALSO
+.Xr join 1 ,
+.Xr pr 1 ,
+.Xr printf 3
diff --git a/usr.bin/lam/lam.c b/usr.bin/lam/lam.c
index 07d6abb1f7f4..599337a71855 100644
--- a/usr.bin/lam/lam.c
+++ b/usr.bin/lam/lam.c
@@ -32,13 +32,17 @@
*/
#ifndef lint
-static char copyright[] =
+static const char copyright[] =
"@(#) Copyright (c) 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
+#if 0
static char sccsid[] = "@(#)lam.c 8.1 (Berkeley) 6/6/93";
+#endif
+static const char rcsid[] =
+ "$Id$";
#endif /* not lint */
/*
@@ -46,6 +50,7 @@ static char sccsid[] = "@(#)lam.c 8.1 (Berkeley) 6/6/93";
* Author: John Kunze, UCB
*/
+#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -67,10 +72,10 @@ int nofinalnl; /* normally append \n to each output line */
char line[BIGBUFSIZ];
char *linep;
-void error __P((char *, char *));
char *gatherline __P((struct openfile *));
void getargs __P((char *[]));
char *pad __P((struct openfile *));
+static void usage __P((void));
int
main(argc, argv)
@@ -81,7 +86,7 @@ main(argc, argv)
getargs(argv);
if (!morefiles)
- error("lam - laminate files", "");
+ usage();
for (;;) {
linep = line;
for (ip = input; ip->fp != NULL; ip++)
@@ -113,8 +118,7 @@ getargs(av)
if (*p == '-')
ip->fp = stdin;
else if ((ip->fp = fopen(p, "r")) == NULL) {
- perror(p);
- exit(1);
+ err(1, p);
}
ip->pad = P;
if (!ip->sepstring)
@@ -131,14 +135,14 @@ getargs(av)
if (*++p || (p = *++av))
ip->sepstring = p;
else
- error("Need string after -%s", c);
+ errx(1, "need string after -%s", c);
S = (*c == 'S' ? 1 : 0);
break;
case 't':
if (*++p || (p = *++av))
ip->eol = *p;
else
- error("Need character after -%s", c);
+ errx(1, "need character after -%s", c);
T = (*c == 'T' ? 1 : 0);
nofinalnl = 1;
break;
@@ -150,15 +154,15 @@ getargs(av)
if (*++p || (p = *++av)) {
fmtp += strlen(fmtp) + 1;
if (fmtp > fmtbuf + BUFSIZ)
- error("No more format space", "");
+ errx(1, "no more format space");
sprintf(fmtp, "%%%ss", p);
ip->format = fmtp;
}
else
- error("Need string after -%s", c);
+ errx(1, "need string after -%s", c);
break;
default:
- error("What do you mean by -%s?", c);
+ errx(1, "what do you mean by -%s?", c);
break;
}
}
@@ -214,20 +218,11 @@ gatherline(ip)
return (lp);
}
-void
-error(msg, s)
- char *msg, *s;
+static void
+usage()
{
- fprintf(stderr, "lam: ");
- fprintf(stderr, msg, s);
- fprintf(stderr,
-"\nUsage: lam [ -[fp] min.max ] [ -s sepstring ] [ -t c ] file ...\n");
- if (strncmp("lam - ", msg, 6) == 0)
- fprintf(stderr, "Options:\n\t%s\t%s\t%s\t%s\t%s",
- "-f min.max field widths for file fragments\n",
- "-p min.max like -f, but pad missing fragments\n",
- "-s sepstring fragment separator\n",
-"-t c input line terminator is c, no \\n after output lines\n",
- "Capitalized options affect more than one file.\n");
+ fprintf(stderr, "%s\n%s\n",
+"usage: lam [ -f min.max ] [ -s sepstring ] [ -t c ] file ...",
+" lam [ -p min.max ] [ -s sepstring ] [ -t c ] file ...");
exit(1);
}