Create A New Program Create A Program (CUI) Firstly, prepare a new module in FML::Process class. See FML::Process::Calendar as the least functional model and see FML::Process::Distribute for the most complicated class. See FML::Process::Flow::ProcessStart() for mandatory methods to implement. FML::Process::Flow::ProcessStart() kicks off several methods sequentially. At 2002/07, these methods are mandatory. new() prepare() verify_request() run() finish() FML::Process::Kernel | uses-a FML::Process::{Flow,Utils} FML::Parse ... | A FML::Process::MODULE uses-a FML::Something uses-a CPAN module uses-a ... If you have prepared FML::Process::MODULE, define relation between the program name and the module at fml/etc/modules. Also, define available command line options at fml/etc/command_line_options if needed. After it is prepared, symlink the loader and the new program name. For example, % 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 As a test, you symlink it explicitly. For the canonical programs, fml installer symlinks them according to fml/etc/install.cf. You need to define the program as $bin_programs or $exec_programs in install.cf.in (configure generates install.cf). Create A Program (CGI) The main part of CGI program is implemented as an FML::CGI::XXX class. These modules have the following relation. FML::Process::Kernel | A FML::Process::CGI::Kernel uses-a CGI | A FML::Process::CGI | A FML::CGI::XXX How to write CGI programs is same as one of CUI. GUI modules locate under FML::CGI to clarify the difference between CUI and GUI. In the case of CGI, prepare the following methods for screen control in FML::CGI::MODULE. html_start() html_end() and run_cgi_main() run_cgi_title() run_cgi_navigator() run_cgi_menu() run_cgi_command_help() run_cgi_options() These methods are called from verify_request() and run() in FML::Process::CGI. CGI process is driven by FML::Process::CGI. run() method calls $curproc->html_start($args); call a set of run_cgi_xxx() methods $curproc->html_end($args); to control screen. At 2001/11, FML::Process::CGI::Kernel consists of the following methods: Almost cases, FML::Process::Kernel method is overloaded by other modules. So, not called directly. new() prepare() verify_request() run() finish() You do not need edit these files. FML::CGI:: is called at run() method.