MKSTR(1)

名称
mkstr - C 言語ソースファイルからエラーメッセージファイルを作成する

書式
mkstr [-] messagefile prefix file ...

解説
mkstr ユーティリティは、C 言語ソースファイルからエラーメッセージを抽出し、 これを格納するファイルを作成します。また作成され たエラーメッセージファイルを使用するように、そのソースファイルを修正し ます。mkstr は巨大なプログラムのサイズを減少させ、スワップを減らすこと を目的としています ( バグ の項を参照) 。

mkstr ユーティリティは、 コマンドラインで指定されたファイルを処理し、修正した入力ファイルを、 指定されたファイル名に、指定されたプレフィックスをつけた名前のファイル で出力します。以下の使用例は典型的なものです。

    mkstr pistrings xx *.c

mkstr は、カレントディレクトリにあるすべての C 言語ソースから集めた エラーメッセージを、ファイル pistrings に出力し、修正されたソースファイルを、ファイル名の先頭に xx をつけたファイルに出力します。

オプション

-   指定されたエラーメッセージファイルの最後に、エラーメッセージが置かれます。 これは、 mkstr で処理された巨大なプログラムの一部を再コンパイルするために使用します。

mkstr ユーティリティは、ソースファイル中の `error("' という文字列をもとにエラーメッセージを検索します。この文字列が出現すると、 ‘"’ から開始される文字列および その後にヌル文字と改行文字をメッセージファイルに出力します; 変更前のソースにおいて文字列であった部分は、 メッセージファイルのオフセットに置き換えられ lseek(2) によって対応するメッセージを取り出すことができます。 実際にメッセージを取り出す場合には、以下のようなコードを使用します。

    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)
    			err(1, "%s", efilname);
    	}
    	if (lseek(efil, (off_t)a1, SEEK_SET) < 0 ||
    	    read(efil, buf, 256) <= 0)
    		err(1, "%s", efilname);
    	printf(buf, a2, a3, a4);
    }

関連項目
xstr(1), lseek(2)

歴史
mkstr ユーティリティは 3.0BSD で登場しました。

バグ
mkstr ユーティリティは、 PDP 11 ファミリの制限されたアーキテクチャのために開発されました。 ごく一部のプログラムしか mkstr を使用していません。 mkstr の方法は効率的なものとはいえないので、 エラーメッセージはプログラムテキストのなかに埋め込まれているべきです ((訳注) 最近はメッセージの国際化等のために、プログラム中にメッセージを埋め込まない方法もよく用いられます) 。