1.\" Copyright (c) 1980, 1990, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the University nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" @(#)mkstr.1 8.1 (Berkeley) 6/6/93 29.\" $FreeBSD: src/usr.bin/mkstr/mkstr.1,v 1.7.2.3 2002/07/15 07:10:07 keramida Exp $ 30.\" 31.Dd June 6, 1993 32.Dt MKSTR 1 33.Os 34.Sh NAME 35.Nm mkstr 36.Nd create an error message file by massaging C source 37.Sh SYNOPSIS 38.Nm 39.Op Fl 40.Ar messagefile 41.Ar prefix Ar 42.Sh DESCRIPTION 43The 44.Nm 45utility creates files containing error messages extracted from C source, 46and restructures the same C source, to utilize the created error message 47file. 48The intent of 49.Nm 50was to reduce the size of large programs and 51reduce swapping (see 52.Sx BUGS 53section below). 54.Pp 55The 56.Nm 57utility processes each of the specified 58.Ar files , 59placing a restructured version of the input in a file whose name 60consists of the specified 61.Ar prefix 62and the original name. 63A typical usage of 64.Nm 65is 66.Bd -literal -offset indent 67mkstr pistrings xx *.c 68.Ed 69.Pp 70This command causes all the error messages from the C source 71files in the current directory to be placed in the file 72.Ar pistrings 73and restructured copies of the sources to be placed in 74files whose names are prefixed with 75.Ar \&xx . 76.Pp 77Options: 78.Bl -tag -width indent 79.It Fl 80Error messages are placed at the end of the specified 81message file for recompiling part of a large 82.Nm Ns ed 83program. 84.El 85.Pp 86The 87.Nm 88utility finds error messages in the source by 89searching for the string 90.Li \&`error("' 91in the input stream. 92Each time it occurs, the C string starting at the 93.Sq \&"\& 94is stored 95in the message file followed by a null character and a new-line character; 96The new source is restructured with 97.Xr lseek 2 98pointers into the error message file for retrieval. 99.Bd -literal -offset indent 100char efilname = "/usr/lib/pi_strings"; 101int efil = -1; 102 103error(a1, a2, a3, a4) 104\&{ 105 char buf[256]; 106 107 if (efil < 0) { 108 efil = open(efilname, 0); 109 if (efil < 0) 110 err(1, "%s", efilname); 111 } 112 if (lseek(efil, (off_t)a1, SEEK_SET) < 0 || 113 read(efil, buf, 256) <= 0) 114 err(1, "%s", efilname); 115 printf(buf, a2, a3, a4); 116} 117.Ed 118.Sh SEE ALSO 119.Xr xstr 1 , 120.Xr lseek 2 121.Sh HISTORY 122A 123.Nm 124utility appeared in 125.Bx 3.0 . 126.Sh BUGS 127The 128.Nm 129utility was intended for the limited architecture of the PDP 11 family. 130Very few programs actually use it. 131The Pascal interpreter, 132.Xr pi 1 133and the editor, 134.Xr ex 1 135are two programs that are built this way. 136It is not an efficient method, the error messages 137should be stored in the program text. 138