140 lines
4.0 KiB
Groff
140 lines
4.0 KiB
Groff
.\" $NetBSD: mkstr.1,v 1.4 1997/10/19 05:13:09 lukem Exp $
|
|
.\"
|
|
.\" Copyright (c) 1980, 1990, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)mkstr.1 8.1 (Berkeley) 6/6/93
|
|
.\"
|
|
.Dd June 6, 1993
|
|
.Dt MKSTR 1
|
|
.Os
|
|
.Sh NAME
|
|
.Nm mkstr
|
|
.Nd create an error message file by massaging C source
|
|
.Sh SYNOPSIS
|
|
.Nm
|
|
.Op Fl
|
|
.Ar messagefile
|
|
.Ar prefix file ...
|
|
.Sh DESCRIPTION
|
|
.Nm
|
|
creates files containing error messages extracted from C source,
|
|
and restructures the same C source, to utilize the created error message
|
|
file.
|
|
The intent of
|
|
.Nm
|
|
was to reduce the size of large programs and
|
|
reduce swapping (see
|
|
.Sx BUGS
|
|
section below).
|
|
.Pp
|
|
.Nm
|
|
processes each of the specified
|
|
.Ar files ,
|
|
placing a restructured version of the input in a file whose name
|
|
consists of the specified
|
|
.Ar prefix
|
|
and the original name.
|
|
A typical usage of
|
|
.Nm
|
|
is
|
|
.Bd -literal -offset indent
|
|
mkstr pistrings xx *.c
|
|
.Ed
|
|
.Pp
|
|
This command causes all the error messages from the C source
|
|
files in the current directory to be placed in the file
|
|
.Ar pistrings
|
|
and restructured copies of the sources to be placed in
|
|
files whose names are prefixed with
|
|
.Ar \&xx .
|
|
.Pp
|
|
Options:
|
|
.Bl -tag -width indent
|
|
.It Fl
|
|
Error messages are placed at the end of the specified
|
|
message file for recompiling part of a large
|
|
.Nm
|
|
ed
|
|
program.
|
|
.El
|
|
.Pp
|
|
.Nm
|
|
finds error messages in the source by
|
|
searching for the string
|
|
.Li \&`error("'
|
|
in the input stream.
|
|
Each time it occurs, the C string starting at the
|
|
.Sq \&"\&
|
|
is stored
|
|
in the message file followed by a null character and a new-line character;
|
|
The new source is restructured with
|
|
.Xr lseek 2
|
|
pointers into the error message file for retrieval.
|
|
.Bd -literal -offset indent
|
|
char efilname = "/usr/lib/pi_strings";
|
|
int efil = -1;
|
|
|
|
error(a1, a2, a3, a4)
|
|
\&{
|
|
char buf[256];
|
|
|
|
if (efil < 0) {
|
|
efil = open(efilname, 0);
|
|
if (efil < 0) {
|
|
oops:
|
|
perror(efilname);
|
|
exit 1 ;
|
|
}
|
|
}
|
|
if (lseek(efil, (long) a1, 0) \ read(efil, buf, 256) <= 0)
|
|
goto oops;
|
|
printf(buf, a2, a3, a4);
|
|
}
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr lseek 2 ,
|
|
.Xr xstr 1
|
|
.Sh HISTORY
|
|
.Nm
|
|
appeared in
|
|
.Bx 3.0 .
|
|
.Sh BUGS
|
|
.Nm
|
|
was intended for the limited architecture of the PDP 11 family.
|
|
Very few programs actually use it. The pascal interpreter,
|
|
.Xr \&pi 1
|
|
and the editor,
|
|
.Xr \&ex 1
|
|
are two programs that are built this way.
|
|
It is not an efficient method, the error messages
|
|
should be stored in the program text.
|