新プログラムの作成 プログラムを作る(コマンドライン用) まず 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() から呼ばれています。