| 引数 | 解説 | 書式例 |
| ---- | 引数を取らない | %(func) |
| literal | 数値や文字列を直接与える | %(func 1234) %(func strings) |
| comp date addr |
メールヘッダの内容 | %(func {subject}) %(func {date}) %(func {from}) |
| expr | 関数の入れ子や判別文などの 結果を引数として与える | %(func (func2)) %(func (func2{comp})) %(func %<{reply-to}%|%{from}%>) |
| 関数名 | 戻り値 | 内容 | |
| msg | 整数 | そのメッセージの番号を返す | |
| cur | 整数 | そのメッセージがカレントである(=1)か否か(=0)を返す | |
| size | 整数 | そのメッセージのサイズを返す | |
| strlen | 整数 | str レジスタの長さ(bytes)を返す | |
| width | 整数 | 出力バッファのサイズ(bytes)を返す | |
| charleft | 整数 | 出力バッファの残りbytesを返す | |
| timenow | 整数 | UNIX epoch (1970年1月1日0:00(GMT))からの秒を返す | |
| me | 文字列 | ユーザのメールボックス名 (実質上はアカウント名) を返す |
| 関数名 | 戻り値 | 内容 |
| eq | 真偽 | num レジスタが arg と等しい (num == arg) |
| ne | 真偽 | num レジスタが arg と等しくない (num != arg) |
| gt | 真偽 | num レジスタが arg より大きい (num > arg) |
| match | 真偽 | str レジスタが arg を含む |
| amatch | 真偽 | str レジスタが arg で始まる |
| plus | 整数 | arg に num レジスタを加える |
| minus | 整数 | arg から num レジスタを減ずる |
| divide | 整数 | num レジスタを arg で割る |
| modulo | 整数 | num レジスタを arg で割った余り |
| num | 整数 | num レジスタに arg を入れる |
| lit | 文字列 | str レジスタに arg を入れる |
| getenv | 文字列 | str レジスタに arg の環境変数を入れる |
| profile | 文字列 | str レジスタに MH profile での指定値を入れる |
| 関数名 | 戻り値 | 内容 |
| nonzero | 真偽 | num レジスタが 0 でない |
| zero | 真偽 | num レジスタが 0 である |
| null | 真偽 | str レジスタが 空 である |
| nonnull | 真偽 | str レジスタが 空 でない |
| void | なし | str レジスタか num レジスタをセットする |
| trim | なし | str レジスタの後ろの空白を切り詰める |
| putstr | ---- | str レジスタを表示 |
| putstrf | ---- | str レジスタを固定幅で表示 |
| putnum | ---- | num レジスタを表示 |
| putnumf | ---- | num レジスタを固定幅で表示 |
引数が comp というのは、component、つまり「メールヘッダの中身」という
意味である。
| 関数名 | 戻り値 | 内容 |
| comp | 文字列 | str レジスタにメールヘッダの内容を入れる |
| compval | 整数 | num レジスタにメールヘッダの内容をアスキー整数化して入れる "atoi(comp)" |
これも上記した 引数が comp な組込関数の一種であるが、
date を表す文字列に限られるものである。
| 関数名 | 戻り値 | 内容 |
| sec | 整数 | 秒 [0〜59] |
| min | 整数 | 分 [0〜59] |
| hour | 整数 | 時 [0〜23] |
| wday | 整数 | 曜日 [0 (=日曜)〜6 (=土曜)] |
| day | 文字列 | 曜日 [Sun〜Sat] |
| weekday | 文字列 | 曜日 [Sunday〜Saturday] |
| sday | 整数 | day of the week known? (0=implicit,-1=unknown) ??? |
| mday | 整数 | 日 [1〜31] |
| yday | 整数 | 日 [1〜366] (←tw_yday。でも正常に機能してない!?) |
| mon | 整数 | 月 (1〜12) |
| month | 文字列 | 月 (Jan〜Dec) |
| lmonth | 文字列 | 月 (January〜December) |
| year | 整数 | 年 (西暦) |
| zone | 整数 | timezone(分) GMTとの差 日本なら 540 (=+9時間) |
| tzone | 文字列 | timezone名 日本なら JST (但し JP パッチをあてたもののみ) |
| szone | 整数 | timezone explicit? (0=implicit,-1=unknown) |
| date2local | なし | ローカルtimezone への変換 |
| date2gmt | なし | GMTへの変換 |
| dst | 整数 | 季節時間フラグ (in effect?) 採用月=正, 不採用月=0, 無効情報=負 (← tm_isdst) |
| clock | 整数 | UNIX epoch (1970年1月1日0:00(GMT))との差(秒) |
| rclock | 整数 | 現時刻との差(秒) |
| tws | 文字列 | RFC-822表記 の日付 (例「Sat, 15 Mar 1997 11:26:39 +0900」) |
| pretty | 文字列 | 日付 (例「Sat, 15 Mar 1997 11:26:39 JST」) |
| nodate | 整数 | date ヘッダが正しく年月日時間等に分解できない |
やはりこれも上記した 引数が comp な組込関数の一種であるが、
引数がアドレスを表す文字列(を含む文字列)に限られるものである。
| 関数名 | 戻り値 | 内容 |
| proper | 文字列 | RFC-822表記 |
| friendly | 文字列 | "user-friendly"表記 |
| addr | 文字列 | mbox@host もしくは host!mbox 表記* |
| pers | 文字列 | 個人名* |
| note | 文字列 | コメント部* |
| mbox | 文字列 | ローカル mailbox* |
| mymbox | 整数 | ユーザのアドレスか否か? (真=1/偽=0)← Alternate-Mailboxes |
| host | 文字列 | アドレスのホスト部(@以下) * |
| nohost | 整数 | ホスト名の有無 (無=0/有=1) * |
| type | 整数 | ホスト名表記形式から host type を返す * (0=local/1=network/-1=uucp/2=unknown) |
| path | 文字列 | any leading host route* |
| ingrp | 整数 | address was inside a group* |
| gname | 文字列 | name of group* |
RFC-822 に従うと、From: ヘッダは発信人のアドレスを示し、 このヘッダのフィールドが取り得る正しい形式は、
| アドレス表記例 | ||||
|---|---|---|---|---|
| 関数 | addr@ess | <addr@ess> | FullName <addr@ess> | addr@ess (comment) |
| proper | addr@ess | addr@ess | FullName <add@ress> | addr@ess (comment) |
| friendly | add@ress | add@ress | FullName | comment |
| addr | addr@ess | addr@ess | addr@ess | addr@ess |
| pers | ---- | ---- | FullName | ---- |
| note | ---- | ---- | ---- | (comment) |
| mbox | addr | addr | addr | addr |
| host | ess | ess | ess | ess |
引数が addr な組込関数に対して、これらの addr を操作する関数も用意
されている。
| 関数名 | 引数 | 内容 |
| formataddr | expr | 引数を「,」で分割し、アドレス一覧として str レジスタに入れる |
| putaddr | literal | str レジスタのアドレス一覧を 引数を optional ラベルとして出力。但し num レジスタから行幅情報を取得するので、 予め「%(void (width))」等でセットしておく必要がある |
これらの実際の使用例としては、
%(lit)%(formataddr{from})%(formataddr{cc})\
%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
これにより、From: ヘッダと Cc: ヘッダに記載されたアドレス全てを str レジスタ
に アドレス一覧として読み込み、それが空でない( %<(nonnull) )ならば、
putaddr 関数の引数である「cc」であるので、
width関数によって与えられた行幅に対して、
Cc: addr@ess, whois@hogehogeなどと言う形で出力される。
補足説明
目次へ・
第0章へ・
第1章へ・
第2章へ・
第3章へ
フレーム版メニューへ