MKSTR(1)

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

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

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

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

    mkstr pistrings xx *.c

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

オプション

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

mkstr は、ソースファイル中の `error("' という文字列をもとにエラーメッセージを検索します。この文字列が出現すると、 ‘"’ から開始される文字列とヌル文字と改行コードがメッセージファイルに出力されます。 変更されたソースにおいて文字列であった部分はオフセットに置き換えられ lesek(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) {
    oops:
    			perror(efilname);
    			exit 1 ;
    		}
    	}
    	if (lseek(efil, (long) a1, 0)  read(efil, buf, 256) <= 0)
    		goto oops;
    	printf(buf, a2, a3, a4);
    }

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

歴史
mkstr は 3.0BSD で追加されました。

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