132 lines
3.7 KiB
Groff
132 lines
3.7 KiB
Groff
|
.\" $NetBSD: mkstr.1,v 1.12 2012/05/12 14:52:57 reed 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. 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 use 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 \*[Lt] 0) {
|
||
|
efil = open(efilname, 0);
|
||
|
if (efil \*[Lt] 0) {
|
||
|
oops:
|
||
|
perror(efilname);
|
||
|
exit 1 ;
|
||
|
}
|
||
|
}
|
||
|
if (lseek(efil, a1, 0) \*[Lt] 0 || read(efil, buf, 256) \*[Le] 0)
|
||
|
goto oops;
|
||
|
printf(buf, a2, a3, a4);
|
||
|
}
|
||
|
.Ed
|
||
|
.Sh SEE ALSO
|
||
|
.Xr xstr 1 ,
|
||
|
.Xr lseek 2
|
||
|
.Sh HISTORY
|
||
|
.Nm
|
||
|
appeared in
|
||
|
.Bx 1 .
|
||
|
.Sh BUGS
|
||
|
.Nm
|
||
|
was intended for the limited architecture of the PDP-11 family.
|
||
|
Very few programs actually use it.
|
||
|
It is not an efficient method, the error messages
|
||
|
should be stored in the program text.
|