Use err(3) instead of local redefintion. Add usage() as a separate
function. Rewrote man page in mdoc format.
This commit is contained in:
parent
517c663956
commit
df8996586c
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user