m4(1)

名称
m4 - マクロプロセッサ

書式
m4 [ -Dname[=value]] [-Uname]

解説
m4 ユーティリティは、さまざまな言語 (たとえば C, ratfor, fortran, lex, yacc など) のフロントエンドとして 利用できるマクロプロセッサです。 m4 は、標準入力からテキストを読み込み、その処理結果を標準出力へ書き出します。

マクロの呼出しは、name(argument1[, argument2, ...,] argumentN) の 形式をとっています。

マクロ名とそれに続く開き括弧 `(' との間には、スペースがあってはいけません。 もしマクロ名の直後に開き括弧が続いていなければ、引数なしのマクロ呼出しとして 処理されます。

マクロ名には、先頭はアルファベットまたはアンダースコアが、2 文字目以降は 英数字またはアンダースコアが使えます。 よって、正しいマクロ名にマッチする正規表現は、[a-zA-Z_][a-zA-Z0-9_]* となります。

マクロの引数のうちで、先頭についている空白、タブ、改行文字はクォートされて いなければ無視されます。 文字列をクォートするためには、左、および右シングルクォートを使用して ください (例: ` this is a string with a leading space')。 組み込みマクロ changequote を使えば、クォート文字を変更することができます。

オプションは、以下の通りです:

-Dname[
    =value] シンボル name を、値 value (無指定時は NULL) と定義します。

-Uname
    シンボル name を未定義とします。

文法
m4 には、以下に示す組み込みマクロが実装されています。 これらのマクロも再定義可能であり、その場合には、もとの定義は失われます。 戻り値は、特に記述のない限り NULL です。

changecom
    コメントの開始文字列と終了文字列を変更します。 デフォルトでは、ポンド記号 `#' と改行文字です。 引数を指定しなかった場合、コメント機能がオフになります。 設定する文字列の長さは、最大 5 文字です。

changequote
    第 1、第 2 引数をクォートシンボルとして定義します。 シンボルの長さは 5 文字までです。 引数が与えられなかった場合には、デフォルトの左右シングルクォートに 設定されます。

decr
    引数の値を、1 デクリメントします。 引数は正しく数値を表現する文字列でなければなりません。

define
    第 1 引数で指定した名前の、新しいマクロを定義します。 定義内容は第 2 引数で与えます。 定義中での $n (n は 0 から 9 まで) は、それぞれそのマクロに与えられる 第 n 引数に置換されます。$0 はマクロ名そのものです。 指定されなかった引数については、NULL 文字列に置換されます。 また、$# は引数の数を表し、$* は全引数をコンマで区切って 列挙した文字列になります。 $@ は $* と同様に、全引数をコンマで区切って列挙したものですが、更なる 置換が行われないようにクォートされます。

defn
    各引数で指定されたマクロの定義内容を、クォートして返します。 これはマクロの名称変更 (組み込みマクロであっても) に利用できます。

divert
    m4 には、10 本の出力キューが用意されています (0 から 9 までの番号がついています)。 処理の最後に、全てのキューは番号順に連結され、最終的な出力を 生成するようになっています。 初期状態では、出力キューは 0 番に設定されています。 divert マクロを使えば、出力キューを変更することが出来ます (divert に不正な引数を与えると、以後再設定されるまでの出力が破棄されて しまいます)。

divnum
    現在の出力キューの番号を返します。

dnl 改行文字を含めた行末までの入力文字を破棄します。

dumpdef
    引数で指定したアイテムについて、その名前と定義を出力します。 引数が与えられなかった場合、全てのマクロについて出力します。

errprint
    第 1 引数を標準エラー出力ストリームへ出力します。

eval
    第 1 引数を計算式とみなして、 32-bit 幅の算術演算を用いて計算します。 演算子としては、標準の C で用いられるもの、すなわち 3 項演算子、 算術演算子、論理演算子、シフト演算子、関係演算子、ビット演算子、および括弧が 利用可能です。 また数値も、C と同様に 8 進、10 進、16 進で記述できます。 第 2 引数で (もしあれば) 演算結果の基数を指定でき、 第 3 引数で (もしあれば) 演算結果の最小桁数を指定できます。

expr
    eval の別名です。

ifdef
    第 1 引数で指定した名前のマクロが定義されていれば第 2 引数を返し、 定義されていなければ第 3 引数 を返します。 第 3 引数が省略されていた場合は、その値は NULL になります。 ちなみに、単語 `unix' があらかじめ定義されています。

ifelse
    第 1 引数が第 2 引数とマッチしたら、第 3 引数を返します。 マッチしなかった場合、その 3 個の引数は捨てられ、次の 3 引数を 用いて同様の検査を繰り返します。 この処理は、引数がなくなるか、あるいは 1 つだけ残るまで繰り返され、 どれにもマッチしなかった場合には、その最後に残った引数または NULL (引数がなくなった場合) が返されます。

include
    第 1 引数で指定されたファイルの内容を返します。 ファイルが読み込めなかった場合には、エラーメッセージを出力し、処理を 中断します。

incr
    引数を 1 インクリメントします。 引数は正しく数値を表現する文字列でなければいけません。

index
    第 2 引数が、第 1 引数の中で、何文字目に出現するかを返します (たとえば、index(the quick brown fox jumped, fox) では 16 が返ります)。 第 2 引数が、第 1 引数の中に含まれていなかった場合には、-1 を返します。

len 第 1 引数の文字数を返します。余分な引数は無視されます。

m4exit
    第 1 引数 (指定されなかった場合は 0) を終了コードとして、即座に終了します。

m4wrap
    入力が最後の EOF に達したときに、どのような動作を行うかを設定します。 一般には、種々の後始末を行うマクロを設定します (たとえば、m4wrap("cleanup(tempfile)") とすると、他の全ての処理が終了した 後に、マクロ cleanup が呼び出されます)。

maketemp
    第 1 引数の中の文字列 XXXXX を、現在のプロセス ID に置換します。 その他の部分はそのままです。 これは、ユニークなテンポラリファイル名の生成に利用できます。

paste
    第 1 引数で指定されたファイルの内容を、マクロ処理を一切施さずに include します。 もしファイルが読み込めない場合には、エラーメッセージを出力し、処理を 中断します。

popdef
    各引数へ、pushdef されている定義を戻します。

pushdef
    define と同様に引数をとり、マクロを定義しますが、元の定義をスタックへ 保存しておきます。 保存された定義は、後で popdef で戻すことができます。

shift
    第 1 引数を除いた、全ての引数を返します。 残りの引数はクォートされ、コンマで区切られます。 クォートすることによって、以降の処理で置換が行われないようにしています。

sinclude
    エラーが起きても無視される点を除けば、include と同じです。

spaste
    エラーが起きても無視される点を除けば、paste と同じです。

substr
    第 1 引数の文字列のうちの、第 2 引数の位置から、第 3 引数の文字数だけの 範囲の部分文字列を返します。 第 3 引数が省略された場合は、残りの文字列全てを返します。

syscmd
    第 1 引数をシェルに渡します。戻り値はありません。

sysval
    最後に実行した syscmd の、戻り値を返します。

translit
    第 1 引数の中の文字を、第 2 引数で指定された文字集合から、第 3 引数で 指定された文字集合へ書き直します。ただし、 tr(1) 式の省略指定を用いることはできません。

undefine
    第 1 引数で指定されたマクロを未定義とします。

undivert
    指定された出力キュー (引数がない場合は全てのキュー) の内容を掃き出します。

unix
    OS プラットフォームを調べるために、予め定義されているマクロです。

作者
Ozan Yigit <oz@sis.yorku.ca> and Richard A. O'Keefe (ok@cs.rmit.edu.au)