新プログラムの作成
プログラムを作る(コマンドライン用)
まず FML::Process:: クラス以下にモジュールを用意します。
最小構成の見本としては FML::Process::Calender 、
最大構成としては FML::Process::Distribute (記事配送プログラムの本体)
を参考にすると良いでしょう。
各 FML::Process::○○○ モジュールが用意しなければいけない関数(メソッド)は
FML::Process::Flow::ProcessStart()
を見ると分かります。
FML::Process::Flow::ProcessStart()
がプロセスを駆動していますので、その中身を辿ってみて下さい。
2002/07 現在、これらのメソッドが必須です。
new()
prepare()
verify_request()
run()
finish()
help()
ダミーでもよいので、これらのメソッドを適宜用意しておいて下さい。各メソッ
ドの具体例は、FML::Process 以下のモジュールを見て下さい。メソッドの役
割を知るためには最大構成の 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::○○○
を用意したら、
etc/modules
にプログラムとクラスの関係を定義して下さい。
これはプログラム名からロードするべきモジュールを定義するファイルです。
また、
etc/command_line_options
にオプションとML名の有無などを定義してください。
名前の通り、可能なオプションについて指定するファイルです。
これらのファイルフォーマットは、これらの中身を見て推測して下さい。
Unix 伝統のスペース区切りなので、すぐ分かります。
これら3つを準備すれば、新しいプログラムの実行の準備が出来ました。
最後に、呼びたい名前のファイルを loader と link もしくは symlink する
ことで実行が可能になります。
たとえば、標準のインストールでは、次のようになっています。
% ls -l /usr/local/libexec/fml
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 command@ -> loader
drwxr-xr-x 2 root wheel 512 Apr 14 18:25 current-20030414/
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 digest@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 distribute@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 error@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fml@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fml.pl@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmladdr@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmlalias@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmlconf@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmldoc@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmlhtmlify@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmlsch@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 fmlserv@ -> loader
-rwxr-xr-x 1 root wheel 6863 Apr 14 18:24 loader*
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 makefml@ -> loader
lrwxr-xr-x 1 root wheel 6 Apr 14 18:25 mead@ -> loader
デフォルトのプログラムについては、インストーラがこれらの symlink 処理
をしてくれています。インストーラに symlink (後述)を実行してもらう必要
があるなら、etc/install.cf.in の bin_programs か libexec_programs にプ
ログラム名を定義して下さい。テスト段階では手動で symlink を行なってか
まいません。
プログラムを作る( 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()
になるという点です。
これらの組で一つの画面
正確には、画面は3×3の合計9個のブロックからなりますが、
たいてい、そのうちの6つしか使っていません。
が構成されています。
これらは FML::Process::CGI の中の
verify_request() および run() から呼ばれた先のメソッドとなっています。
CGI プロセスは FML::Process::CGI で駆動され、run() メソッドは
$curproc->html_start($args);
画面を作るために run_cgi_xxx() メソッド群を呼び出す。
$curproc->html_end($args);
の順に FML::CGI:: 以下のメソッド群を呼び出しています。
ちなみに、2001/11 現在、FML::Process::CGI::Kernel プロセス自身は、
以下のメソッド
このため、多くの場合
FML::Process::Kernel
のメソッドは CGI::Kernel でオーバロードされており、
直接呼ばれることは稀です。
からなっています。
new()
prepare()
verify_request()
run()
finish()
特に、これらを編集する必要はないでしょう。
ちなみに FML::CGI:: は run() から呼ばれています。