[PREVIOUS CHAPTER] [NEXT CHAPTER]
4 内部構造

%Procedure というのが内部で使っているコマンド定義のハッシュテーブルで
す。このハッシュを操作する手段が以下の配列やハッシュです。


4.1	MLで使えるコマンドを増やすor減らす
../remote_control 4.10

config.ph でコントロールできます。いくつかの変数がありますが、次のよう
に作動します

   1	@PermitProcedure が定義してあるなら
	@PermitProcedure で許しているコマンドだけを設定します。
	もし、定義されていなければデフォールトのすべてのコマンドが
	利用可能になります。
	これらの設定はグローバル変数の %Procedure に定義されます。

   2	%LocalProcedure が定義されているなら
	1 で定義された %Procedure を %LocalProcedure で上書きします。

   3	@DenyProcedure が定義されているなら
	@DenyProcedure のコマンドだけを使えなくする

Example:

	○ guide と summary のみを使用可能、それ以外はすべて使用不可

	@PermitProcedure = ('guide', 'summary');

	○デフォールトに加え自分で定義した hack コマンドも使える

	%LocalProcedure = ('hack', 'ProcHack');

	もちろんこの場合はどこかで sub ProcHack { ...; } があって
	この関数を用意しておく必要がある。

	○デフォールトの中で get 関係は使えなくする

	@DenyProcedure = ('get', 'send', 'mget', 'msend');

	○ メンバーリストなどを取れないようにする

	@DenyProcedure = ('member', 'active', 'members', 'actives', 'status', 'stat');

4.2	ハッシュ %Procedure の特殊なキー

ハッシュ %Procedure には特別な書き方があります。通常は

	ハッシュのキー	値
	----------------------------------------
	コマンド名	関数名

ですが、

	ハッシュのキー	値
	----------------------------------------

	key		Function Name (e.g. ProcHoeHoe)
	#key		file name
	r#key		1 or 0
	r2a#key		1 or 0
	l#key		the maximum request for key in one mail

○ #key はファイルを送り返す関数でのファイル名です。実はファイルを送り
返す関数は共通なので、これを利用すると好きなファイルを送り返す新しいコ
マンドがほいほい作れます。

例: "help" コマンドは $HELP_FILE ("#help"の値) を送り返す。

		    # help for usage of commands
		    'help',	'ProcFileSendBack',
		    '#help',	$HELP_FILE,


Example: add your new command "news" to send back "$DIR/news" file.
2.3

%LocalProcedure = ('news',	'ProcFileSendBack',
		   '#news',	"$DIR/news");

○ r#key はこのコマンドを実行したら実行のログをユーザーに送り返します。

例: "off" コマンドではログをユーザーに送り返す。

		    'off',    'ProcSetDeliveryMode',
		    'r#off', 1,

○ r2a#key はこのコマンドを実行したら実行のログを管理者に送り返します。
* If "r2a#key" is defined, FML sends the trace log of the command to
$MAINTAINER. 

例: "bye" や "unsubscribe" のコマンドの実行ログは管理者にも送る。

		    'bye',             'ProcSetMemberList',
		    'r#bye',           1,
		    'r2a#bye',         1,
		    'unsubscribe',     'ProcSetMemberList',
		    'r#unsubscribe',   1,
		    'r2a#unsubscribe', 1,

Ex 2: "chaddr" case.
		    'chaddr',         'ProcSetMemberList',
		    'r#chaddr', 1,

○ l#key

一通のメールの中のコマンド 'command' リクエストを最大でも
$Procedure{"l#command"} 個までに制限する。コマンドごとに制限は変えられ
る。$MAXNUM_COMMAND_INPUT は一つのメールの中のコマンドの合計への制限に
なっている(種別を問わず足し合わせた値)。

例: "get" は1メールで10個まで

	             'l#get',      10,

4.3	コマンドの # syntax 


コマンドはデフォールトで "# get 1" と "#get 1" は同じものとみなしてい
ます。# で始まるか否かだけで判定しています。--ctladdr で fml.pl を呼び
出している場合(例えば include-ctl を使っている場合)は # も必要ありませ
ん。

	$COMMAND_SYNTAX_EXTENSION = 1; (default 1)

がデフォールトです。



III コマンド各論


[PREVIOUS CHAPTER]
 [NEXT CHAPTER]