	例題: 新しいプログラムを付け加えるには？


0. 単純なスケジュール表示ソフトを例にとります。
   プログラム名は fmlsch その CGI 版は fmlsch.cgi です。

1. INSTALL.sh に fmlsch を付け加えることを考えます。

   a) INSTALL.sh を改造する。
	fml/bin/fmlsch を /usr/local/bin/fmlsch にインストールする。

	注: /usr/local/bin にインストールしないプログラムでは
	    a) の過程は不必要

   b) /usr/local/libexec/fml で loader と fmlsch を ln -s する。


   --- INSTALL.sh	2001/03/24 13:57:57	1.23
   +++ INSTALL.sh	2001/03/27 14:45:56
   @@ -83,7 +83,7 @@
    cp -pr fml/libexec/*	$libexec_dir/$fml_version/
    
    echo update /usr/local/bin/
   -for prog in fmldoc fmlticket fmlconf makefml
   +for prog in fmldoc fmlticket fmlconf makefml fmlsch
    do
    	echo update /usr/local/bin/$prog
    	cp fml/bin/$prog /usr/local/bin/$prog.new
   @@ -94,6 +94,7 @@
    PROGRAMS="$PROGRAMS fmlserv mead fmlconf fmldoc"
    PROGRAMS="$PROGRAMS fmlticket fmlticket.cgi"
    PROGRAMS="$PROGRAMS makefml makefml.cgi"
   +PROGRAMS="$PROGRAMS fmlsch fmlsch.cgi"


2. モジュールを作ります。

   ここでは fml/lib/TinyScheduler.pm を書きます。
   また、必要な他にライブラリがあれば適宜輸入してください。
   今回は CPAN から

	HTML-CalendarMonthSimple-1.02.tar.gz

   を輸入しています。
   Date-Calc も必要なので適宜インストールしてください。


3.  /usr/local/bin/fmlsch が上のモジュールを呼ぶようにします。

   a) プログラムの実際のコードは fml/lib/FML/Process/Scheduler.pm
      に集中。
      ＃適宜ベースクラス FML::Process::Kernel を使います。

   b) ローダーから起動するために fml/lib/FML/Process/Switch.pm 
      へのルールを追加する。

この二箇所を変更/用意してください。


3.1 FML::Process::Scheduler を作る

同じディレクトリのプログラムを適当にぱくって hack します :-)

なお、FML::Process::Scheduler の場合は FML::Process::Scheduler::run() 
だけ用意すればおしまいです。未定義の関数は FML::Process::Kernel のメソッ
ドが使われるので万事オーライ


3.2 FML::Process::Switch にルールを追加する

ここで追加するのは
	getopt() のオプション
	ML 名は必須か？
	呼び出すモジュール名
です。
   
   --- Switch.pm	2001/03/25 04:09:00	1.14
   +++ Switch.pm	2001/03/27 15:27:00
   @@ -323,6 +323,9 @@
        elsif ($myname eq 'makefml.cgi') {
    	return qw(debug!);
        }
   +    elsif ($myname eq 'fmlsch') {
   +	return qw(debug!);
   +    }
        else {
    	croak "options for $myname are not defined.\n";
        }
   @@ -340,6 +343,9 @@
        if ($myname eq 'fmldoc') {
    	return 0;
        }
   +    elsif ($myname eq 'fmlsch') {
   +	return 0;
   +    }
        elsif ($myname eq 'makefml') {
    	return 0;
        }
   @@ -390,6 +396,12 @@
        }
        elsif ($name eq 'makefml.cgi') {
    	$pkg = 'FML::CGI::Configure';
   +    }
   +    elsif ($name eq 'fmlsch') {
   +	$pkg = 'FML::Process::Scheduler';
        }
        else {
    	return '';


4. fmlsch.cgi の場合


改造の仕方はモジュールが FML::CGI:: クラスになる以外は fmlsch の場合と
同様です。FML::CGI::Scheduler は FML::Process::CGI のサブクラスです。

未定義のものについては FML::Process::CGI や FML::Process::Kernel がよ
きにはからいます。また、CGI.pm は FML::Process::CGI が使い、HTTP
header を生成しています。あくまでも最低限の処理なので
FML::CGI:: のモジュールで適宜 HTML の出力を補佐してあげます。 


$FML$
