引数 | 解説 | 書式例 |
---- | 引数を取らない | %(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などと言う形で出力される。
補足説明