新プログラムの作成
プログラムを作る(コマンドライン用)
まず FML::Process:: にモジュールを用意します。
最小構成の見本としては FML::Process::Scheduler 、
最大構成としては FML::Process::Distribute
を参考にすると良いでしょう。
用意しなければいけない関数(メソッド)は
FML::Process::Flow::ProcessStart()
を見ると分かります。
FML::Process::Flow::ProcessStart()
がプロセスを駆動しているからです。
2002/07 現在、これらのメソッドが必須です。
new()
prepare()
verify_request()
run()
finish()
ダミーでもよいので、これらのメソッドを適宜用意しておいて下さい。
各メソッドの具体例は、FML::Process を見て下さい。
メソッドの役割を知るためには最大構成の Distribute が一番適当かも知れません。
FML::Process::Kernel
| uses-a FML::Process::{Flow,Utils} FML::Parse ...
|
A
FML::Process::○○○
uses-a FML::ほえほえ
uses-a CPAN モジュール
uses-a …
FML::Process::○○○
を用意したら、
FML::Process::Switch
を編集します。
このモジュールでは、各プログラムごとに
『ロードするモジュール』
『コマンドラインオプション』
『ML名を必要とするか否か?』
を定義してください。
編集する場所は以下の private method です。
sub _module_specific_options
sub _ml_name_is_required
sub _module_we_use
この 2 つの準備だけで、新しいプログラムの準備は終りですです。
呼びたい名前のファイルを loader と link もしくは symlink することで
実行が可能になります。
例えば、標準のインストールでは、次のようになっています。
% ls -l /usr/local/libexec/fml
total 11
-rw-r--r-- 1 fml wheel 4044 Nov 20 00:19 Standalone.pm
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 command -> loader
drwxr-xr-x 3 root wheel 512 Nov 23 22:10 current-20011123
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 distribute -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fml.pl -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlconf -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmldoc -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlhtmlify -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlsch -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlsch.cgi -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlserv -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlthread -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 fmlthread.cgi -> loader
-rwxr-xr-x 1 fml wheel 4358 Nov 23 22:08 loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 makefml -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 makefml.cgi -> loader
lrwxr-xr-x 1 root wheel 6 Nov 23 22:10 mead -> loader
プログラムを作る( CGI 用)
CGI のプログラムは
FML::CGI::○○○
というモジュールです。
CGI 系列では次のような、オブジェクトの関係があります。
FML::Process::Kernel
|
A
FML::Process::CGI::Kernel uses-a CGI
|
A
FML::Process::CGI
|
A
FML::CGI::○○○
CGI のプログラムの書き方もコマンドラインプログラムと同様です。
名前空間で区別するために CGI スクリプトのモジュールは
FML::Process ではなく FML::CGI に配置されています。
既存の FML::CGI のモジュールを見本にして、
FML::CGI::○○○
を適宜用意して下さい。
FML::CGI::○○○ の注意点は、
用意するメソッドが
html_start()
html_end()
および
run_cgi_main()
run_cgi_title()
run_cgi_navigator()
run_cgi_menu()
run_cgi_command_help()
run_cgi_options()
になるという点です。
これらの組で一つの画面が構成されています。
これらは FML::Process::CGI の中の
verify_request() および run() から呼ばれた先のメソッドとなっています。
CGI プロセスは FML::Process::CGI で駆動され、run() メソッドは
$curproc->html_start($args);
画面を作るために run_cgi_xxx() メソッド郡を呼び出す。
$curproc->html_end($args);
の順に FML::CGI:: 以下のメソッド群を呼び出しています。
ちなみに FML::Process::CGI::Kernel 自身は、
2001/11 現在、プロセスは以下のメソッド
このため、多くの場合
FML::Process::Kernel
のメソッドは CGI::Kernel でオーバロードされており、
直接呼ばれることは稀です。
からなっています。
new()
prepare()
verify_request()
run()
finish()
特に、これらを編集する必要はないでしょう。
ちなみに FML::CGI:: は run() から呼ばれています。