.\" 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 .\" jpman %Id: mkstr.1,v 1.2 1997/03/29 06:22:47 horikawa Stab % .\" .Dd June 6, 1993 .Dt MKSTR 1 .Os .Sh 名称 .Nm mkstr .Nd C 言語ソースファイルからエラーメッセージファイルを作成する .Sh 書式 .Nm .Op Fl .Ar messagefile .Ar prefix file ... .Sh 解説 .Nm は C 言語ソースファイルからエラーメッセージを抽出し、 これを格納するファイルを作成します。また作成され たエラーメッセージファイルを使用するように、そのソースファイルを修正し ます。mkstr は巨大なプログラムのサイズを減少させ、スワップを減らすこと を目的としています ( .Sx バグ の項を参照) 。 .Pp .Nm はコマンドラインで指定されたファイルを処理し、修正した入力ファイ ルを、指定されたファイル名に、指定されたプレフィックスをつけた名前のファイル で出力します。以下の使用例は典型的なものです。 .Bd -literal -offset indent mkstr pistrings xx *.c .Ed .Pp .Nm は、カレントディレクトリにあるすべての C 言語ソースから集めた エラーメッセージを、ファイル .Ar pistrings に出力し、修正されたソースファイルを、ファイル名の先頭に .Ar \&xx をつけたファイルに出力します。 .Pp オプション .Bl -tag -width indent .It Fl 指定されたエラーメッセージファイルの最後に、エラーメッセージが置かれます。 これは、 .Nm で処理された巨大なプログラムの一部を再コンパイルするために使用します。 .El .Pp .Nm は、ソースファイル中の .Li \&`error("' という文字列をもとにエラーメッセージを検索します。この文字列が出現すると、 .Sq \&"\& から開始される文字列および その後にヌル文字と改行文字をメッセージファイルに出力します; 変更前のソースにおいて文字列であった部分は、 メッセージファイルのオフセットに置き換えられ .Xr lseek 2 によって対応するメッセージを取り出すことができます。 実際にメッセージを取り出す場合には、以下のようなコードを使用します。 .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 関連項目 .Xr xstr 1 , .Xr lseek 2 .Sh 歴史 .Nm は .Bx 3.0 で追加されました。 .Sh バグ .Nm は、PDP 11 ファミリーの制限されたアーキテクチャのために開発されました。 ごく一部のプログラムしか mkstr を使用していません。 Pascal インタプリタ .Xr \&pi 1 とエディタ .Xr \&ex 1 が .Nm により作成されています。 .Nm の方法は効率的なものとはいえないので、 エラーメッセージはプログラムテキストのなかに埋め込まれているべきです .Pq (訳注) 最近はメッセージの国際化等のために、プログラム中にメッセージを埋め込まない方法もよく用いられます 。 .\" 上記(訳注)は翻訳時からあったが、現状確かにそうなので残しました。 .\" 2.1.5-2.2-RELEASE 対象 .\" By horikawa@jp.freebsd.org (Mar 29 1997)