		CHANGES
		Last Modified: $Date$

2002/08/29

   INSTALL.sh 
	add a cheap diag: check the existence of $owner and $group

   FML::Command::Admin::newml 
	validate $ml_home_prefix before main

2002/08/28

   FML/Process/Kernel 
	proper handling of "$program /var/spool/ml/elena" case

2002/08/26

   IO::Adapter::File 
	ensure rollback in calling get_value_*()
	
   FML::Error::Analyze 
	error_continuity::in summation, bad if $v >= 2
	
   FML::Credential 
	is_same_address() validate input data more
	
   FML::Process::Kernel 
	bug fix my ml_name (+ ml_domain) detection code:
	
	[back ground detail] "fmlconf -n elena@fml.org" works but
	"fmlconf -n elena" not works since we ignore the latter case.
	Regaredless of poorman's strategy but we pick up the first non
	/^-/ string as a $ml_name and set $ml_domain to the default
	domain. 

2002/08/21

   IO::Adapter 
	enhance add() to add($address, [$argv])
	
   IO::Adapter::File 
	enhance add()
	implement get_next_value()
	define get_value_as_str($key), get_value_as_array_ref($key)

   IO::Adapter::AtomicFile 
	more unique temp filename
	
2002/08/20

   FML::Process::Distribute 
	modify error message
	
   FML::Command::SendFile 
	message key change
	command.get.invalid.args -> command.get_invalid_args
	
   IO::Adapter::File 
	remove fml 4 specific ignore rules such as m=.. option
	delete(KEY) not (REGEXP)

2002/08/19

   FML::Process::Error 
	rename::$use_error_analyzer -> $use_error_analyzer_program
	use default $log_format_type now
	
   FML::Process::Command 
	enable process if $use_command_mail_program is defined.
	
   FML::Process::Distribute 
	enable process if $use_distribute_program is defined.
	
   variables
	define $use_command_mail_program ("yes" by default).
	rename $use_error_analyzer to $use_error_analyzer_program

   message key reconstructuring

2002/08/18

   FML::Command::SendFile 
	more debug info.
	
	send_user_xxx_message()
	set $command_args->{ _filename_to_send } before calling send_file().
	
   FML::Command::User::confirm 
	send back welcome file in subscribe case

2002/08/16

   FML::Error::Analyze 
	error_continuity::sum up time sequence with not point but mountain
	with some width.
	rename::simple_count_by_day -> error_continuity

   Mail::Message::Encode 
	add is_iso2022jp_string()
	
   FML::Command::Admin::log 
   FML::Filter::BodyCheck 
   FML::Process::Kernel 
	switch FML::Language to Mail::Message::Encode

   FML::Language::ISO2022JP 
   FML::Language::Japanese::{String,Utils}
	Removed

2002/08/15

   new variables	
	$error_analyzer_function
	$error_analyzer_simple_count_limit
	
   FML::Error 
	count up address with status=5*
	move analyzer function() to FML::Error::Analyze
	rename: *_timeout -> *_event_timeout
	
   FML::Process::Kernel 
	check if $maintainer differs $ml_address
	rename: *_timeout -> *_event_timeout

2002/08/14

   FML::Process::Kernel 
	use $config->get_as_array_ref( 'header_loop_check_rules' ) to get list.
	rename: refuse_further_processing() -> stop_this_process()
	define do_nothing($reason), same as stop_this_process()

   FML::Process::Alias Command ConfViewer Configure Distribute
		DocViewer Error HTMLify Kernel Spool ThreadTrack 
   FML::Process::CGI::Kernel 
	apply fix_perl_include_path(); after load_config_files() runs to add
	ml local library path to @INC.
	This is used for ml specific extention e.g. command extension.
	
   FML::Process::Kernel 
	enable ml local message template handling
	
   variables
	define $ml_local_* for ml specific customize
	+ ml_local_dir           =       $ml_home_dir::local
	+ ml_local_lib_dir       =       $ml_local_dir::lib
	+ ml_local_share_dir     =       $ml_local_dir::share
	+ ml_local_message_template_dir  = $ml_local_share_dir::message
	
	change definition for $message_template_dir:
	$fml_share_dir::message::$template_file_charset -> 
		$fml_share_dir::message

2002/08/13

   fml.org  4.0  fml-devel ١ذܹԳ

   etc/include*
	__ml_home_prefix__::__ml_name__ -> __ml_name__@__ml_domain__
	
   etc/config.cf*
	comment out $ml_name, $ml_domain
	
   FML::MTAControl::Postfix 
	bug fix $fh-close() under defined($fh) is confirmed
	use "postconf -d" to expand variables

   Mail::Message::Encode 
   remove FML::Encode and Mail::Message::Decode 
	merge FML::Encode Mail::Message::Decode into Mail::Message::Encode

   FML::Header::Subject 
	switched to use of Mail::Message::Encode

2002/08/11

   FML::Encode 
	ץȥפäƤߤ롣
	XXX Υ⥸塼 fml 4.0 ǤȤ

2002/08/09

   libexec/error
	顼ɥ쥹μưǽ̤괰

   FML::Process::Error 
	change lock granuality
	
   FML::Error 
	validate syntax for target address to remove
	check if the target address is a ML member before deluser() runs
	
2002/08/08

   FML::Error 
	enable real deluser()
	
   FML::Credential 
   FML::Command::{Auth,UserControl}
   FML::Command::Admin::chaddr
   FML::Command::User::{chaddr,off,on,subscribe,unsubscribe}
   FML::Process::{Command,Error,Kernel} 
	change arguments of credential functions to clarify the target address:
	e.g. is_member($curproc, $args) -> is_member(addr)
	
	modified functions:
	o is_member()
	o is_privileged_member()
	o is_recipient()
	o match_system_accounts()

2002/08/07

   libexec/error
	顼ɥ쥹μưǽ

   FML::Error::Cache 
   FML::Process::Error 
   FML::Error 
	enable automatic user removing (prototype)
	
   FML::Process::{Kernel,Utils}
	define $curproc->{ scheduler } not _scheduler
	define access method scheduler(). 
	please use it e.g. $curproc->scheduler().
	
   FML::Process::Kernel 
	lock() and unlock() accepts channel as the argument if needed.
	
	implemented
	o is_timeout( $channel )
	o get_timeout( $channel )
	o set_timeout( $channel, $time )
	
   FML::Process::Error 
   FML::ErrorAnalyze  (removed)
	create FML::Error:::with separate clesses for cache manipulation and
	analyzer.
	modified to FML::Error::Cache for cache writing.

   FML::Process::Scheduler 
	$scheduler_queue_dir -> $event_queue_dir
	
   Tie::JournaledFile 
	check the file existence
	
   Tie::JournaledDir 
	bug fix the default day type handling
	
2002/08/03

   ѿ
	define $scheduler_queue_dir

   FML::Process::Kernel Command Distribute Error
   FML::Process::Scheduler
	scheduler_init()

   Tie::JournaledFile
	enhance find: find(key, [mode]) where mode = scalar, array, array_ref
	implement get_all_values_as_hash_ref()
	bug fix FIRSTKEY() and NEXTKEY(), modified to use hash on memory
	
   Tie::JournaledDir
	bug fix keys() and each(), modified to use hash on memory.
	implement EXISTS(), DELETE(), CLEAR()
	implement get_all_values_as_hash_ref()
	
   FML::Header::MessageID
	modified to sync w:::Tie::JournaledDir usage
	
   FML::Article
   FML::Header
   FML::Process::Distribute Kernel
	use LogError() if appropriate

2002/07/31

   ե
	եեޥåȤΥǥեȤѹ 

   FML::Header
   FML::Header::MessageID
	disable some debug codes.
	switch DB from File::CacheDir to Tie::JournaledDir
	
   FML::Log
	use File::Basename;
	
   FML::Article
	s/Article/article/
	
   Mail::Delivery::SMTP
	recipients::total=\d+
	
   FML::Process::Distribute
   Mail::ThreadTrack::Analyze
	disable some debug messages

2002/07/30

   ѿ
	+error_analyzer_cache_type		=	File::CacheDir
	+error_analyzer_cache_mode		=	temporal
	+error_analyzer_cache_size		=	14

   libexec/error 񤭾夲褦
	   FML::Process::Error
	   FML::ErrorAnalyze
		move error analyzer core functions to FML::ErrorAnalyze

   FML::Process::Kernel
	libexec::error not need reply_message()

2002/07/29

   ѿ
	nuke database_* sql_*

   FML::Process::Error
	bug fix::resolve_ml_specific_variables() and load_config_files()
	add a few function prototypes

2002/07/28

   ѿ
	$newml_command_init_dirs
		rename::init_config_dir_list -> newml_command_init_dirs

		added $shared_db_dir $var_dir $db_dir $lock_dir
		$tmp_dir $spool_dir

	member_maps = $primary_member_map (nuke members-admin)

2002/07/26

   ǥ졼⡼ɤͽ
	moderator  maps 롣
		members-moderator
		recipients-moderator

	{add,del}moderator ޥɤ

   FML::Command::Admin::{add,del}admin
		members-admin
		recipients-admin
	ξ򥢥åץǡȤʤɡrecipients ϻȤʤ)

2002/07/25

   FML::Config
   File::Sequence Utils
   IO::Adapter::File
   IO::Adapter::AtomicFile
   IO::File::Atomic
	rename::IO::File::Atomic -> IO::Adapter::AtomicFile

   IO::Adapter βɷ³

   FML::Process::Command
	improve error messages

   FML::Process::Kernel
	improve log messages

   IO::Adapter::File
	bug fix so that getline() returns undef if not opened

2002/07/24

   IO::Adapter
	clean up
	remove AUTOLOAD()
	removed replace()

   IO::Adapter::DBI
	add missing open(), close()
	removed replace()
	implement getline()

   IO::Adapter::File
	removed replace()
	clean up comments

   IO::Adapter::SQL::toymodel
	removed since we discard sql model based framework

   FML::Credential
   FML::Command::UserControl
   FML::Command::Admin::chaddr
	change argv of FML::Credential::has_address_in_map():
	($map, $address) -> ($map, $config, $address)

2002/07/23

   IO::Adapter  SQL ɤ

   FML::Mailer
   FML::Command::Auth UserControl
   FML::Command::Admin::chaddr
   FML::Process::Distribute Utils
   Mail::Delivery::SMTP
	reconstruct SQL functions in IO::Adapter
	new IO::Adapter $map, $config;

   IO::Adapter
   IO::Adapter::DBI MySQL
	reconstruct MySQL functions
	o get_next_key() works now.
	o disable some functions once.

   FML::Config
	.ini sytle extension. for example

	[mysql:id]
	key = value

	So, we have the 2nd level hash value such as
	$config->{ key1 }->{ key2 } = $value
	and read::write it.

	bug fix {+,-}=  operation in the second level.


2002/07/22

   ѿ
	READ_ONLY($admin_member_maps)
	mysql ɲ

   FML::Config
	expand READ_ONLY($array) -> an array of READ_ONLY($array[$i])

   IO::Adapter
	accept READ_ONLY($map)
	prohibit add/delete/replace call for read only maps.

   FML::Credential
	add is_recipient() for sender is an ML recipient or not.

   off/on command prototype
	   FML::Command::User::confirm
	   FML::Command::Admin::on
	   FML::Command::Admin::off
	   FML::Command::User::on
	   FML::Command::User::off
		prototype on and off mode for recipient map

2002/07/20

   FML::Command::Admin::unsubscribe
	member_map    use config primary_member_map    to member_maps
	recipient_map use config primary_recipient_map to recipient_maps

2002/07/19

   FML::Process::Kernel
	repyl_message() handles makefml and *.cgi as special cases.

   FML::Process::CGI::Kernel
	cgi_execute_command() checks the command is allowed in
	commands_for_admin_cgi.
	XXX "commands_for_admin_cgi" is hard-coded.
	XXX we should enhance this for ml-admin::*.cgi et.al.

   FML::Restriction::Command
	enhance command syntax regexp

   FML::Command::Auth
	check user matching

   FML::Restriction::Command
	bug fix wrong command regexp

   FML::Process::Command
	remove not used variable
	check whether this command is allowed in this $level

2002/07/17

   Mail::Message::MH
	add debug
	define new()
	bug fix first:\d+
	handle a,b,c pattern

   FML::Command::SendFile
	use Mail::Message::MH

   FML::Command::UserControl
   FML::Command::Admin::log
   FML::Process::Kernel Utils
   FML::Process::CGI::Kernel
	define printing style format such as 'text', 'html', ...
	you can control it by the following access methods,
	get_print_style() and set_print_style(mode)

   FML::Command::Admin::dir file
	use FML::Restriction::

   FML::MTAControl::Procmail
	remove garbage definitions

   FML::MTAControl::Postfix
	search only hash:, dbm::types in postfix alias_maps

   FML::Credential
	optionally, we accept case insensitive comparison of user part
	of the mail address.

2002/07/15

   FML::Process::Utils
	define the following access methods:
	config()
	pcb()
	incoming_message_header()
	incoming_message_body()
	incoming_message()
	article_header()
	article_body()
	article_message()

   FML::Command::DataCheck
   FML::Filter::BodyCheck
   FML::Process::Command Distribute Error Kernel Utils
	modified to use access methods above.

   FML::Command
	use "$myname eq" not "$0 =~"

   FML::Config
	nuke debug::... if $0 =~ ::loader::

2002/07/14

   ĤΥޥɤη̤䥨顼᡼ϴԤؤ褦ˤ
	Ͽ/ˤĤƤΥ
	Сʳ/ޥɥ᡼ʤ

   FML::Process::Utils
	implement which_message_nl()

   FML::Command
   FML::Command::UserControl
   FML::Command::User::confirm
   FML::Process::Command Distribute Kernel
	copy message and send it to $maintainer too
	use reply_message*() with $msg_args to copy the message if needed where
	$msg_args = { always_cc => $maintainer } or
	$msg_args = { recipient => $maintinaer } pertinently.

   FML::Command::UserControl
	use message_nl( {add,del}_{ok,fail} ... ) as a reply

   FML::Process::Kernel
	disabled makefml NOT TO USE reply_message() now

2002/07/13

   ޥɥ󥿥åθľ
	CGI ⤳˹碌ƽ

	admin adduser
	admin useradd
	admin addadmin
	admin adminadd
	admin deluser
	admin userdel
	admin deladmin
	admin admindel

   FML::MTAControl
   FML::MTAControl::Procmail
   FML::Command::Admin::newml rmml
	newml  procmail Υƥץ졼Ȥ롣
	rmml  ˤϾä

   FML::Process::Kernel
	check defined($ml_name) in ml_* variable handlings

2002/07/12

   procmailrc ΥץĤäƤߤ䤦
	newml/rmml ޥɤ procmailrc Υƥץ졼Ȥ/
	褦ˤ

2002/07/11

   FML::MTAControl::Qmail
	remove ~fml::.qmail-* when the ML is removed.

2002/07/10

   CPAN modules
	import Unicode::Japanese 0.09

   CPAN documents
	catch up (2002::07::10)

2002/06/30-2002/07/30

   ɥȥ꡼˥ ڡ

2002/06/30

   FML::Command::HTMLify
	more check of input

   FML::Process::ThreadTrack
	fix ISA for ->speculate_max_id()

   FML::Process::ConfViewer Spool
	fix the condition to show help

   FML::Process::Error
	$self -> $curproc

2002/06/28

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	separate execution of the command and the menu pop up.
	Firstly execute run_cgi_main() and show tables after that.

	CGI ξ󹹿򤭤Ȥ뤿ˡCGI δؿƤӤδܹ
	¤

2002/06/27

  Сɥᥤ󥵥ݡȤνŪХۡ

   FML::MTAControl
   FML::Command::Admin::newml rmml
   FML::MTAControl::Postfix Qmail
	major overhaul
	o reconstruct architecture
	o bug fix virtual domain support
	o sync w:::FML::Process overhaul to bug fix virtual domain support

   FML::Process::Alias Command ConfViewer
		                            Configure Distribute
		                            DocViewer Error HTMLify
		                            Kernel Spool Switch
		                            ThreadTrack Utils
   FML::Process::CGI::Kernel
	major overhaul::delayed loading of *.cf files.  The loading is done
	within prepare() method now to handle virtual domains properly.

   FML::Command::HTMLify
	not need to validate ml existence

2002/06/25

   clean up CGI ...

   FML::CGI::Admin::List
	scroll size is set by the length of maps

   FML::Command::Admin::rmml
	fix virtual domain handling. sync w:::newml logic
	clean up (white spaces)
	clean up. nuke _get_domain_info (not used)

2002/06/24

   CGI θɤ

   FML::Process::Utils
	get_ml_list()::check $ml_home_prefix, bug fix default domain handling
	bug fix ml_home_prefix() args, more defined() checks

   FML::Config
   FML::Process::Kernel
   FML::Process::CGI::Kernel
	more defined() checks and sanity check if could

   FML::CGI::Admin::ML Menu User
   FML::Process::CGI::Kernel
	clean up menu, bug fix run_cgi_menu() args

2002/06/23

   СɥᥤΥݡ
	bug fix
	postfix  qmail  makefml newml ¹Ԥ
	Сɥᥤޤư
	 ǽΰϤäȤ MTA ꤬ɬפɤ

   FML::Command::Admin::newml
	insert "$ml_domain $ml_domain" to the file "virtual" at the
	first time since $ml_domain is one of $mydestination.
	install a template for qmail::control::virtualdomains

2002/06/22

   bug fix domain/virtual domain handling (specially in CGI)

   FML::Process::CGI::Kernel
	use $curproc->ml_XXX() as could as possible in new()
	clean up table configuration:
	define tables for function and <td> attributes

   FML::Log
	eval Log(warn ...) || print stderr it

   FML::Restriction::Base
	define navi_command as the same as command

   FML::Config
	defined() check more

   FML::Command::Admin::newml
	fix args of ml_home_xxx()

   FML::CGI::Admin::ML
	change get_ml_list() args

   FML::CGI::Admin::Menu
	classify the command in the navigation and main

   FML::Process::Utils
	define ml_name() method
	ml_domain() returns the current process's domain not default one.
	ml_home_prefix() and get_ml_list() behave more properly to reflect the
	current situation.
	fix ml_domain handling of rewrite_config_if_needed().

2002/06/21

   CGI bug fixes

   FML::Process::Utils
   FML::Process::CGI::Kernel
	move get_ml_list() and get_recipient_list()
	from Process::CGI::Kernel to Process::Utils.

   FML::CGI::Admin::Menu
   FML::Command::Admin::newml
	set up $ml_name dynamically

   FML::Command::UserControl
	ignore non-existed files, not croak()

   IO::Adapter::File
	close write handle and read handle after the write one.

   FML::Command::UserControl
	use IO::Adapter->get_next_key() not getline() for member list up

2002/06/01

   major variable naming overhaul

	relocating variable definitions in etc/src/

	align convention: for example,
		use_XXX
		XXX_rules
		XXX_dir
		XXX_cache_dir

	rename:
	$recipient_limit -> $smtp_recipient_limit
	$incoming_mail_dir -> $incoming_mail_cache_dir
	$outgoing_mail_dir -> $outgoing_mail_cache_dir
	$qmail_control_virtualdomains_file -> $qmail_virtualdomains_file

	s/header_filter/article_header_filter/
	s/header_rewrite/article_header_rewrite/
	s/body_filter/article_body_filter/

	s/subject_tag/article_subject_tag/

	verify_XXX_* -> check_XXX

	newly defined:
		$use_digest_header_rewrite

	removed:
		$smtp_log_dir
		$smtp_log_file

   overhaul
	variable naming convention
	defined check
	FNF-ify
	fix argument declarations

   FML::Command::Auth
	permit_admin_member_maps() return 0 if not match

   FML::Process::Kernel
	temp_file_path() ensures temp file name uniqueness by counting the
	number of times this function is called.

2002/05/31

   FML::Header
	add rewrite_date() for header rewrite Date::to X-Date:

2002/05/29

   FML::Command::Admin::chaddr
	bug fix::error_set() -> croak()

   FML::Process::Switch
	try to save the critical error message at $ml_home_prefix/ if could

2002/05/28

   rename/reconstruct variables
	clarify prefixes in caution.
	define or rename sysconf_dir et.al. to $domain_XXX_config_dir
	define $path_postmap

   FML::Command::Admin::newml
	mkdir @$init_config_dir_list
	run "postmap virtual"
	mainconf_dir -> domain_mail_config_dir

   FML::Credential
	$config->get_as_array_ref

   FML::Command::Auth
	implement permit_admin_member_maps()

2002/05/27

   new variable naming convention
	add caution

	define terms on "mail" and "message"
	change::_message_ -> _mail_

	define $postfix_virtual_map_file

	add $admin_member_maps to $member_maps

	change attribute names:
	o permit_members_only -> permit_member_maps
	o check_command -> check_admin_member_password

   FML::Mailer
   FML::Process::Distribute
   Mail::Delivery::{SMTP,Utils}
	pass smtp log file handle to Mail::Delivery

   FML::Process::Distribute
	permit_members_only -> permit_member_maps

   FML::Command::Admin::newml
   FML::MTAControl
   FML::MTAControl::{Postfix,Qmail}
	set up virtual map if needed

   FML::Process::Kernel
	only user "fml" should read lock files.
	define terms on "mail" and "message"::_message_ -> _mail_
	permit_members_only -> permit_member_maps

   FML::Process::Command
   FML::Command::Auth
	rearrange admin command authentication to sync w/ new variable names

   FML::Process::Utils
	implement is_default_domain()

2002/05/25

   FML::Command::Admin::newml
	fix $templ_files be ARRAY_REF

   FML::MTAControl::Qmail
	install .qmail-do:ma:-$ml for .qmail-do.ma.in-$ml

   FML::Command::Admin::newml
   FML::Process::Configure Utils
	at the first stage of makefml, care $config and rewrite it, if needed,
	when we handle virtual domain.
	implement $curproc->rewrite_config_if_needed() for it.

2002/05/24

   variables
	reconstruct $newml_command_*_template_files

   FML::Config::Convert
	implement convert_file(srcfile, dstfile, params)

   FML::Log
	print STDERR $msg if Log() fails

   FML::MTAControl
   FML::Command::Admin::newml
	use FML::MTAControl ACAP

2002/05/23

   FML::Header::Subject
	add mime decode for subject

   Mail::Message::Decode Encode
	FNF-ify, fix documents and @EXPORTS

2002/05/22

   FML::Mailer
	save smtp log at var/mail/outgoing/

2002/05/21

   variables
   	define $error_cache_dir
	define $newml_command_postfix_template_files
	define $newml_command_qmail_template_files
	define $incoming_message_dir
	define $outgoing_message_dir
		var/mail/{incoming,outgoing,queue}/

	define $use_outgoing_message_cache     =       yes
	define $outgoing_message_cache_size    =       128

   etc/aliases
	enable auto error analyzer by default

   FML::Process::Kernel
	implement $curproc->open_outgoing_message_channel()
	$mincoming_dir -> $incoming_message_dir

   FML::Process::Distribute
	use $curproc->open_outgoing_message_channel() not _smtplog to save
	SMTP transaction logs.

   FML::Command::Admin::newml
	$newml_command_template_files ->
	$newml_command_postfix_template_files

   Mail::Bounce::Postfix19991231
	validate input data

   FML::Process::Error
	implement a prototype to cache error data

2002/05/19

   add/enable a prototype of libexe::fml::error (mead)

   variables
	define $use_error_analyzer
	define $subscribe_command_auth_type
	define $listinfo_base_dir
	$command_prompot          -> $command_prompt
	$command_chaddr_type      -> $chaddr_command_auth_type
	$command_unsubscribe_type -> $unsubscribe_command_auth_type

   FML::Process::Error
	work if $use_error_analyzer is 'yes'
	add hooks
	finish() checks if this error message is effective or not.
	fix typo and missing definition

   FML::Process::Command
	fix building logic of $command_args and $options to make admin
	command work again.
	fix $admin_prefix trap
	rearrange structure
	FNF-ify
	clarify the current context is under confirmation or not.
	ignorance of commands are dependent on this context.
	nuke mode=special which is not used.
	send back statistics and original message

   FML::Command::DataCheck
	fix parse_command_arguments() arguments

   Mail::Message::MH
	fix wrong last:\d+ counting logic

2002/05/18

   FML::Process::Command
	reconstruct command check logic (1)

   Mail::Message
	implement message_text_as_array_ref()

   updated IM to im-141 + local patch (tats20020413.diff)

   FML::Filter::BodyCheck
	add reject_uuencode()

2002/05/17

   FML::Process::Kernel
	check whether $use_incoming_message_cache is yes
	use $mincoming_cache_size as cache modulus
	save incoming message at $ml_home_dir/var/mincoming/

   File::CacheDir
	update document on new() arguments
	bug fix eval{} should do eval { use()&&new() }

   new variables: (etc/)
	use_incoming_message_cache	=	yes
	incoming_message_cache_size	=	128

2002/05/16

   FML::Process::CGI::Kernel
	pick up address_selected not address

   Mail::Message::ToHTML
	not reset @AnyDBM_File::ISA.
	It is better for us to use the default @ISA

2002/05/13

   FML::Process::Utils
	implement
	config_cf_filepath($ml, $domain)
	is_config_cf_exist($ml, $domain)

   FML::Command::HTMLify
	validate if config.cf exists

2002/05/11

   FML::Filter::ContentCheck
	add Log deteled mimetype at only_plaintext() and typo fix
	fix wrong log message (but is it correct fix ?).
	FNF-ify

   FML::Language::Japanese::Utils
	_look_not_iso2022jp_string::add trivial check

   Mail::Message
	fix::parser() should handle header only message.
	no no no, not reset $data_ptr unless body
	nuke \s*$

2002/05/10

   FML::Filter::ContentCheck
	add function permit_mimetype() and reject_mimetype()
	add function permit_rules() and reject_rules()

2002/04/30

   FML::Command::Admin::check
	add prototype for diagnostics

2002/04/28

   FML::Process::Kernel
	check $curproc->is_refused() more before action at each step

   Mail::Message
	fix comment.
	add loop label.
	FNF.
	more checks by defined() and whether the content is not empty.
	new() not need $InComingMessage here
	remove module global variable $InComingMessage
	check invalid multipart format

2002/04/27

   FML::Process::Kernel
	kern.not_member -> error.not_member

   FML::Process::Kernel
	disable debug message

   Mail::Message
	check more data by defined()

   FML::Process::Kernel
	modified to not using FileHandle::pipe()
	add methods to prepare and clean up temporary files
	implement parse_exception()
	implement message_nl() to separete message converter into natural
	language and message handling parts

   FML::Process::CGI::Kernel Param
	convert exception syntax into the new style. See FNF
	convert message to natual language if could

2002/04/26

   FML::Process::Flow
	run clean_up_tmpfiles() finally

   FML::Process::Kernel
	fix typo
	define "permit_commands_for_stranger" (only define not implemented :)

   FML::Process::Command
   FML::Command::DataCheck
	permit_commands_for_stranger works

   variables
	add rule permit_commands_for_stranger for $command_restrictions

2002/04/25

   variables
	rename variable::available_commands_for_xxx -> commands_for_xxx

   FML::Command::Admin::htmlify
	check $use_html_archive value before action

   FML::MTAControl
	implement get_aliases_as_hash_ref()
	new() accepts { mta_type => ... } argument

   FML::Process::Switch
   FML::Process::Alias
	new utility::fmlalias e.g. shows not only fml but all alias entries

   Mail::Message
	check defined($InComingMessage) before $body_size estimation

2002/04/24

   FML::Header::Subject
	replace subject to Subject

   define $path_postconf

   File::Utils
	define append()

   FML::Command::Admin::{newml, rmml}
	use File::Utils and FML::MTAControl to share codes.

   FML::Command::Admin::newml
	check $ml_name duplication over all $alias_maps (postfix case)

   FML::Filter::ContentCheck
	bugfix object argument

2002/04/23

   FML::Process::Distribute Kernel
	fix errro message and enable the rejected message forwarding

   FML::Command::Admin::newml
	check alias duplication
	enable cgi

   FML::Restriction::Base
	define $ml_name_specified

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
   FML::CGI::Admin::ML
	define cgi_try_get_ml_name()
	enabled newml and rmml on CGI.

2002/04/22

   FML::Process::CGI::Kernel
	sort ml list

   FML::Command::HTMLify
	bug fix subdirs sorting algorithm

   Mail::Message::Spool
	check value of $args->{ use_subdir }

   FML::Article
	error if the article already exists

2002/04/21

   FML::Command::Admin::newml
	install .htaccess only for the first time

   Mail::Message::ToHTML
	you can specify $ENV{MAX}

   Mail::Message::ToHTML
	for () { fork() && call htmlify_file() }

   Mail::Message::ToHTML
	htmlify_dir() accepts options::$has_fork and $max (for debug)

   Mail::Message::ToHTML
	sort years in monthly.index
	bug fix the scan range for each subdir

   FML::Command::HTMLify
	sort -n subdirs list

2002/04/20

   FML::Filter::BodyCheck
	comment out "local($*) = 0;"

   FML::Filter::TrafficMonitor
	disable almost all codes imported from fml 4.0 once anyway

   configure
	add --with-warning

   FML::Command::HTMLify
   FML::Process::HTMLify
	bug fix subdir checking

	use FML::Command::HTMLify to share htmlify code between
	fmlhtmlify and "makefml htmlify".

   FML::Command::Admin::htmlify
	remove $options

   FML::Process::Configure
	log raw error message

2002/04/19

   FML::Process::Spool
	check argument and show help if invalid

   FML::Process::Switch
	stop $ml_home_dir search when we can get it.

   Mail::Message::ToHTML
	bug fix::check the source file existence more severely

2002/04/18

   Mail::Message::ToHTML
	check $args->{ file } more severely in _update_relation()

   FML::Process::Distribute
	eval htmlify_file() to avoid unknown error ;)

   FML::Process::Distribute
	eval filtering

2002/04/16

   FML::Process::Switch
	fmlspool --srcdir not --dstdir

   FML::Process::Spool
	fix conversion algorithm

2002/04/15

   FML::Process::Switch
	fmlspool --srcdir not --dstdir

   FML::Process::Spool
	fix conversion algorithm

   add a new utility "fmlspool"
	add a new utility::fmlspool to handle spool directory

   FML::Process::Utils
	implement ml_home_dir()

   FML::Process::Switch
	enable fmlspool

   FML::Article
	implement subdirpath().
	check $curproc->{'incoming_message'}->{ message } in new() data input.

   FML::Process::Kernel
	implement set_umask_as_public(), reset_umask() for umask control.

   FML::Process::Distribute
	umask and permission control for html archives

   Mail::Message::ToHTML
	BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File); }

   FML::Process::HTMLify
	consider spool:::may has subdir(s)

2002/04/14

   Mail::Message::ToHTML
	fix $subdir handling on month boundary
	validate $curid ($self->{ _current_id})
	validate or warn input into Jcode
	set $code for Jcode if needed

   CPAN	modules
	updated Jcode to 0.79

2002/04/13

   FML::Command::User::unsubscribe
	use FML::Confirm not via eval{ use ..}

   FML::Process::Command
	select the error message by the $xxx_restrictions error reason

   Mail::Message
	implement whole_message_as_string_ref()

   FML::Process::Command
	reply_message( OBJ(Mail::Message) ) when the message is rejected by
	$command_restrictions.

   FML::Process::Kernel
	o reply_message() can handle OBJ(Mail::Message).
	o save error reason at pcb area when the message is rejected by
	xxx_restrictions.

2002/04/12

   FML::Process::Distribute
	send back mesg "we deny requests from system accounts"

   FML::Process::Command
	check by permit_command() before command execution ;)
	send back mesg "we deny requests from system accounts"

   FML::CGI::Calender
	switched to the current style

2002/04/11

   FML::Config
	has_attribute() should look up %_fml_config_result

   FML::Process::Command
	accept commands, e.g. subscribe, allowed for not members

2002/04/10

   2002/03 ʬ꡼󥢥åפ

   FML::Filter 饹ˤե륿󥰤ͭˤ
	FML::Filter:: ΥХ

   FML::Process::Distribute Kernel
	enable filtering.
	implement access methods to control filtering.
	o $curproc->refuse_further_processing()
	o $curproc->is_refused()

2002/04/07

   variables
	define $primary_admin_member_password_map
	rename $admin_member_passwd_maps -> $admin_member_password_maps

   FML::Command::Admin::chaddr
	chaddr over all maps

   FML::Command::Admin::get
	clean up variable names to be easy for your eyes

   FML::Command::Admin::htmlify
	doc::remove makefml description
	add --dstdir=DIR
	FNF-ify

   FML::Command::Admin::list
	show all maps in $xxx_maps

   FML::Command::Admin::log
	fix::add comments
	use HTML::FromText class to espace metchars

   FML::Process::Calender
	clean up documents, comments
	use $curproc not $self if appropriate

   FML::Process::DocViewer
	remove AUTOLOAD()
	clean up

2002/04/06

   remove "recipients" file from default $recipient_maps

   Mail::Message::Spool
	define dirpath()

   FML::Article
	mkdir subdir if needed

2002/04/05

   spool (Υס)γز¤򥪥ץˤ
	ѿ $use_spool_subdir ߤ

2002/04/03

   clean up, audit campaign
	դ餪ݽޤ礦(̣)

2002/04/01

  ºݤ˹ۤĤĥƥȤƤߤ롣
	configure ϤäȤå٤
	ؤʤΤ롣e.g. makefml list

   more check and expansion by configure
	we should use values speculated by configure if could.
	default_ml_home_prefix = @mlspooldir@

   FML::Command::Admin::newml
	not install CVS

	expand default_domain by config.status

   FML::Command::UserControl
   FML::Command::Admin::list
	enable "admin list" command
	admin list $ml {members,actives,recipients}

   FML::Process::Switch
	warn() if $ml_name not specified

2002/03/31

   "makefml newml" set up ~fml/fml/listinfo/$domain/$ml/
	̤ͣκ WWW ڡѰդ( listinfo )
	FML::Command::Admin::newml

	variables
	+ remove $message_message_dir
	+ change $message_template_dir
	+ change $html_archive_dir
	+ add $listinfo_dir

   ز¤褦ˤ
	HTML ֤ǥ쥯ȥ
	סǥ쥯ȥ

   FML::Process::Kernel
	$message_message_dir -> $message_template_dir
   FML::Command::Admin::htmlify
   FML::Process::{Distribute,HTMLify}
   Mail::Message::ToHTML
   Mail::HTML::Lite
	rename class::Mail::HTML::Lite -> Mail::Message::ToHTML
	change .ht* database names

   FML::Article
   Mail::Message::Spool
   Mail::ThreadTrack
   Mail::ThreadTrack::DB Print.pm
   Mail::ThreadTrack::Print::HTML Text.pm
	use Mail::Message::Spool::filepath() for the article file path.
	use $self->filepath() which is  based on Mail::Message::Spool
	Mail::Message::Spool::spool arg changes::$spool_dir -> $base_dir

   Mail::HTML::Lite
	rename message_file*() -> html_file*()
	html file path is YYYYMM/msg$id.html by default

2002/03/30

   FML::Article
   FML::Command::SendFile
   FML::Process::Distribute
	FML::Article::filepath() determines the article file path.

   admin {delete,unlink} -> admin file $subcommand
	ޥ̾ͤǽ뤿
	admin ޥɤΥ󥿥åγĥϤ롣

2002/03/25

   enable admin {delete,unlink}

   FML::Restriction::Base
	define file

   FML::Command::DirUtils
	fix to use FML::Restriction::Base not CGI

2002/03/24

   FML::Restriction::Base
	define directory regexp as [-a-zA-Z0-9]+
	permit . in "user" part in e.g. "address"

   variables
	define $path_ls for admin {dir,ls}

   enhance dommands
	enable admin {ls,dir,delete,unlink}

2002/03/23

   FML::Command::Auth
	admin ޥɤΥѥǧڤͭˤ

   FML::Command
	implement rewrite_prompt(). It is used to hide password et. al.

   FML::Process::Command
	clean up
	use rewrite_prompt() by FML::Command to hide admin password.

   variables
	define $admin_member_passwd_maps.
	admin password
	admin pass

   new modules from CPAN
	import Crypt-UnixCrypt-1.0, perl-only implementation of the
	crypt(3).

2002/03/21

   ޥɤǧڤˤĤƲ

   FML::Credential
	reconstruct is*member() functions
	implement primitive is_privileged_member()

   FML::Process::Command
	clean up :::clarify the logic:
	o valid command syntax
	o command mode for a user, admin and stranger
	o add prototype of admin command auth

   variable:
	define $admin_command_restrictions

   FML::Command::Auth
	add prototype of admin command auth

2002/03/20

   CGI κƹ: clean up's

   loader
	prepare a hook to inform some hints via $main_cf

   FML::Process::Utils
	implement hints()

   FML::Command::Admin::newml
	setup admin::{thread,config,menu}.cgi based on libexec::loader
	and hints

   FML::Config::Convert
	replace __hints_for_fml_process__

   FML::Process::Switch
	enable config.cgi , remove makefml.cgi

   FML::CGI::ThreadTrack
	vertical align of menus

   FML::Process::CGI::Kernel
	change layout in table a little.
	define run_cgi_title() and run_cgi_help()
	add options bar to switch the language (dummy yet :-)

   FML::CGI::Admin::Menu
	remove run_cgi_help() once

2002/03/19

   CGI κƹ: FML::CGI  FML::Command ֤Υȥݥ󵡹
	ޥɰ¸εǽ FML::Command 饹ذǤ

   FML::Process::CGI::Param
	accpet empty value even if it not matches filter:)

   FML::Command::Admin::subscribe unsubscribe.pm
	implement cgi_menu() to show command specific menu in CGI screen

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	o prepend cgi_ or run_cgi to function name.
	o implement trampoline mechanism using FML::Command::class.
	o change::pop_menu -> scrolling_list

   FML::Command::UserControl
	define FML::Command::UserControl class to share user control codes.
	modified Admin::{subscribe,unsubscribe} commands to use it.

   new commands
	 admin ޥɤ˻Ȥ褦ˤʤޤ
	admin addadmin
	admin addpriv
	admin byeadmin
	admin byepriv
	admin log

   new variables
	$primary_admin_member_map
	$admin_member_maps

2002/03/18

   CGI κƹϤ

	FML::CGI::*
	FML::Process::CGI::*
	reconstruct CGI around structure phase 1:
	o table not frame based menu support (similar style to www.netbsd.org)
	o prepare method for each location in the screen.
	   for example,
	   + run_cgi_main() to show main menu at the center in the screen.
	   + run_cgi_navigator() to show navigation bar at the left.
	o longjmp() by eval::croak when we encounter insecure conditions.

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	cosmetics
	FNF
	define cgi_execute_command() and try_get_address() into
	FML::Process::CGI::Kernel and remove them from FML::CGI::Admin::Menu

   FML::Process::Utils
	define ml_domain() but same as default_domain() yet

   new variables (for CGI)
	$cgi_main_menu_color
	$cgi_navigation_bar_color

2002/03/17

   chaddr ޥɤư褦ˤʤä
		chaddr
		admin chaddr
		makefml chaddr
	ΣǤ

   FML::Command::User::chaddr
	works again!
	if either old or new addresses in chaddr arguments is an ML member,
	try to confirm this request irrespective of "From:" address.

   FML::Command::Admin::subscribe unsubscribe.pm
   FML::Command::User::chaddr confirm.pm
	change $command_args argument:
	$command_args->{ adddress } =>  $command_args->{ command_data }

   FML::Process::Kernel
	reply_message::append \n to message if \n$ is missing

	reconstruct message queue subsystem internal.
	we can handle output styles for message queue input properly.

	å塼󥰥ƥƹ
	ԥ١ǤΤޤȤᤢʤɤ
	XXX  chaddr ޥɤ񤱤ޤ

2002/03/16

   FML::Process::Kernel
	new message queue handling. sync with reply-message branch

	clean up logic to handle messages queue.
	for $recipient ( queue ) {
		apply the following rules for messages returned to
		specified $recipient.

		1. pick up text messages and put them into the first part.
		2. append non text messages
	}

2002/03/06

   variables
	define directory for cgi and HTML article archive
	define $newml_command_template_files
	define $available_commands_for_admin_cgi

   FML::Config
	implement get_as_array_ref()

   FML::Process::Switch
	makefml --force $command $ml ...

2002/02/24

   update /etc: define the following variables
	$fml_owner $fml_group $syscon_dir $mailconf_dir
	$mail_aliases_file

   FML::Process::Utils
	define fml_owner(), fml_group() and mail_aliases().

   FML::Config::Convert
	replace $fml_owner and $ml_home_dir.

   FML::Config
	set(key, value) and update() informs FML::Config to expand variables.

   FML::Command::Admin::newml
	install aliases when makefml newml runs.

2002/02/23

   FML::Command::SendFile
   FML::Command::Admin::get
	fix filename in mime header

   FML::Process::Command and etc/
	validate if the requested admin command is permited or not.
	define $available_commands_for_privileged_user
	rename $available_commands -> $available_commands_for_user

2002/02/20

   File::Sequence
	add function _search_max_id_from_top()

   clean up commands
	¿Υޥɤư褦ˤ(:-)

	update $available_commands_for_stranger and $available_commands
	fix path::$message_template_dir -> $ml_home_dir
	o $guide_file
	o $help_file
	o $objective_file
	o $summary_file

   FML::Process::Kernel
	add Reply-To::into our reply message

2002/02/19

   FML::Command
	remove require_lock() due to obsolete

2002/02/18

   clean up FML::Command::{User,Admin}::*
	remove FML::Command::Utils and ErroStatus
	we should not inherit anything as could as possible.

   enhance xxx_restrictions:
	enable "permit_anyone" can be used in {post,command}_restrictions.

2002/02/17

   FML::Config
	implement hook extension. For example,
	$config->is_hook_defined( 'START_HOOK' );
	$config->get_hook( 'START_HOOK' );

   FML::Process::Command ConfViewer Configure Distribute
		 DocViewer HTMLify ThreadTrack
	implement several hooks

   import HTML-Template-2.5 from CPAN

   change variables
	$confirm_keyword -> $confirm_command_prefix
	add $admin_command_prefix

   FML::Command::Admin::htmlify
	makefml htmlify elena --srcdir=.. --outdir=...

   Mail::Delivery::ESMTP
	fix argument

   admin ޥɤư褦ˤ
	ޤǧڤƤʤ :)

   FML::Command::User::confirm
	remove ErrorStatus, FML::Command::Utils;
	define new()
	call User::Command::XXX without lock since already locked now.

   FML::Config
	fix return value by FETCH() to be without \s*$

   FML::Command
	change use() and new().
	not use ErrorStatus.
	check $command_args->{ override_need_no_lock } to control lock.

   FML::Process::Distribute
	bug fix definitions on hooks

   FML::Process::Kernel
	fix file name in searching message template

2002/02/13

   define access method need_lock().
        each command module determins whether it needs lock or not.

	FML::Command  FML::Command::* ʲѹ
	ƥޥɤϳƼ need_lock() Ȥ᥽åɤ
	åɬפɤ FML::Command ˶٤
	XXX ĥθξ塢Ƥߤ

   FML::Command::SendFile
	remove import of ErrorStatus

   rename module::TinyScheduler -> Calender::Lite
	FML::Process::Switch
	FML::CGI::Scheduler -> FML::CGI::Calender
	FML::Process::Scheduler -> FML::Process::Calender

2002/02/11

   create FML::Restriction::Command class

   FML::Command::SendFile
   FML::Command::User::{guide,help,deny,objective}
	send back file file in $ml_home_dir if found.
	return the default message if not found.
	"guide", "help", "objective" commands use this logic.

	桼ѤΥޥɤ֤ѹ
		1. (4.0 ˤ) $DIR  help ե֤
		2. help ե뤬ʤʤ顢ǥեȤΥåȤ

		1.  4.0 ȤθߴΤǡ
		fml-devel Ǥ 2. ǥե( help եϺʤ )

2002/02/04

   FML::Process::ThreadTrack
	determine the max sequence id by considering last mofieid time
	among the sequence file and thread databases.

   Mail::ThreadTrack::DB
	implement db_last_modified()
	It return the last modified time of "date" DB in dateabase as
	unix time.

2002/02/03

   main.cf.in
	$ml_home_prefix -> $default_ml_home_prefix

   FML::Command::Admin::newml
   FML::Process::Utils
	ml_home_prefix() can recognize virtual domain.
	modified to use it.

	we should not use $curproc->{ main_cf } directrly in modules out of FML::Process::
	we implement the following methods in FML::Process::Utils and use them.
	o $curproc->executable_prefix()
	o $curproc->template_files_dir_for_newml()

2002/02/02

   FML::Process::Utils
	define access methods::default_domain(), ml_home_prefix()
	(prototype)

   FML::Process::Switch
   FML::Process::CGI::Kernel
	use FML::Process::Utils::__ml_home_prefix_from_main_cf() to
	get $ml_home_prefix.

   TinyScheduler
   Mail::ThreadTrack::DB
	use File::Spec

2002/02/01

   remove $ENV{debug} based toggle flag

2002/01/27

   FML::Command::Admin::newml
	"makefml newml" virtual domain support. For exmaple,

		% makefml newml elena@nuinui.net

	The ml_home_dir is speculated from $virtual_maps in main.cf.


   IO::Adapter clean up campaign ?:)

   Mail::Delivery::SMTP
   IO::Adapter
   IO::Adapter::{Array,DBI,File,MySQL}
	clarify IO::Adapter definition and clean up get_XXX() functions.
	remove get_member(), get_active() and get_recipient()
	define get_next_key() and get_next_value() and clarify thier definitions.
	add IMPLEMENTATION.jp

   FML::Credential
   IO::Adapter
   IO::Adapter::DBI
	clarify IO::Adapter::find() usage.
	find() returns "key value" by default and "key" if requested.
	add want option e.g. find(key, { want => $what } ).

   File::Sequence
	search_max_id() searches all keys if full_search option specified

   FML::Command::SendFile
	clarify function acl, arguments more

   FML::Command::User::get
	clarify function arguments more

2002/01/20

   /etc/fml/main.cf
	define $virtual_maps

   FML::Process::Utils
	implement get_virtual_maps()

   FML::Process::Kernel
	fix module loading of Mail::Delivery::Queue

   FML::Command
   FML::Command::SendFile
	fixed to call up error to FML::Process::Command layer

   FML::Process::Command
	more comments, log.
	fix message handling to use object to get command string returned by
	find_first_plaintext_message().

2002/01/16

   change Mail::Message naming convention.
	   FML::Article Parse
	   FML::Filter::BodyCheck HeaderCheck TrafficMonitor
	   FML::Process::Command Distribute Kernel
	   Mail::Bounce Message
	   Mail::Bounce::DSN Exim GOO Postfix19991231 SimpleMatch
	   Mail::Delivery::SMTP
	   Mail::HTML::Lite
	   Mail::ThreadTrack::Analyze HeaderRewrite

	public -> private:
	o head_message
	o last_message
	o next_message
	o prev_message

	prefix change:
	o rfc822_message_ -> whole_message_
	o get_first_plaintext_message() -> find_first_plaintext_message()
	o get_encoding_mechanism() -> encoding_mechanism()
	o get_data_type() -> data_type()
	o get_data_type_list() -> data_type_list()

	renamed:
	o get_offset() - >offset_pair()
	o header_in_body_part() -> message_fields()
	o data_in_body_part()   -> message_text()
	where we use RFC822 flabour naming convention.
	rfc822 says "message = fields + text" and rfc2047 says "message" as
	defined in RFC 822, with all header fields optional.

2002/01/14

   Mail::HTML::Lite
	define default value.
	delayed loading by eval q{ use .. }.
	validate defined( $db->{ _thread_list }->{ $id } ).

	_head_thread()::fix head_thread search algorithm.

	rename __search_default_next_thread_id() to
	__search_default_next_id_in_thread().

	__sort_yyyymm()::validate value is not null.

2002/01/13, 01/12, ...

   final clean up campaign in 2001
   	꡼˥󥰥ڡ 2001 final Ϥޤ³Ƥ뤾;-)

   Mail::Message
   FML::parse
	rfc822_message_FUNCTION()

	å( Mail::Message  chain )Ф
	᥽åɤˤ rfc822_message_ ƬˤĤ褦̾򤢤碌

   File::SimpleLock
   Mail::Delivery::Queue

        use Fcntl qw(:DEFAULT :flock), remove LOCK_XX() definitions.

2001/12/25

   Mail::HTML::Lite
	bug fix::_print_li_filename() check is too restricted

2001/12/22,23,24,25

   final clean up campaign in 2001
   	꡼˥󥰥ڡ 2001 եʥ:)
	FNF-ify
	ȤӥɥȤι
	κ \s*$
	ȤäƤʤΤǺ⥸塼
		FML::Messages
		FML::MIME
		FML::Language::Japanese::Subject

	FML::MIME  Mail::Message::Decode 
	Mail::Message::Encode ΣĤˤ狼줿

   renamed
	FML::Checksum -> Mail::Message::Checksum

2001/12/22

   FML::Process::Kernel
	remove FML::Messages

   TinyScheduler
	define get_mode() for symmetric definition.

2001/12/18

   HTML ǽˤ(ǥեȤ ON)

	use_html_archive = yes (ǥե)

	~fml/public_html/mlarchive/ͣ̾/

   FML::Process::Kernel
	define $fml_owner_home_dir by process $uid

   FML::Process::Distribute
	htlmify article

2001/12/16

   FML::Messages
   IO::Adapter::LDAP
   Mail::Message::Date
   Mail::Message::Language::Japanese::Subject
	nuke "require Exporter, which is not needed

   INSTALL.sh
	warn you should update loader if needed

   loader.in
	use $fmlconfdir not $sysconfdir
	use IO::File not FileHandle

2001/12/11

   FML::Command::Admin::newml
	ensure installed file mode to be 0644

   TinyScheduler
	speculate $user by $$ unless defined $user

   ./configure γĥ
		å򤤤Ĥ
		--with-fml-group=$GROUP
		--with-fmlconfdir=$prefix/etc/fml

2001/12/09

  󥹥ȡΥХȤ
	makefml ΰåΥХ
	fml/etc/ ʲιѹ
	makefml newml  config.cf ˣͣ̾ѹ򤹤

2001/12/08

   TinyScheduler
	more proper error messages

   FML::Process::Configure
	fix error handling, define finish() to avoid loading error

   FML::Process::DocViewer
	add path for perl executatbles e.g. ::usr::local::bin

2001/11/27

   FML::Log
   Tie::JournaledDir
	FML::Date -> Mail::Message::Date

   Mail::Message::Date
	remove MTI.. message

   update comments
	clean up
	FNF-ify

   Mail::ThreadTrack::Analyze
	run prepare_history_info($msg) if $self->{ _is_rewrite_header }

   configure
	@sysconfdir@ -> @sysconfdir@/fml
	modify message

   FML::Process::Switch
	modified not to use Standalone
	loader has Standalone by itself now.

   config.sh.in
   etc/main.cf.in
	@sysconfdir@ -> @sysconfdir@::fml

   FML::Process::Switch
   libexec/loader.in
	modified not to use Standalone
	loader has Standalone by itself now.

2001/11/26

   FML::Process::Kernel
	bug fix missing mkdir() argument

   FML::Process::Distribute
   Mail::ThreadTrack
   Mail::ThreadTrack::Analyze
	toggle header rewriting (subject) to add thread id. off by default

   config.cf
	define $use_thread_subject_tag to toggle header rewrite

2001/11/25

   more tainted safe
	(but needs more consideration, may be use of FML::Restriction class)
	TinyScheduler
	FML::Process::ConfViewer, FML::Process::Scheduler

   FML::Filter::BodyCheck
	validate get_first_plaintext_message() return value

   libexec/loader.in
	we should not use @INC derived from $0
	reset PATH in the early stage

   FML::Process::*
	implement help() method
	enable --help for all command line programs
	verify_request() checks @ARGV and show help() if needed

   FML::Process::Switch
	enable distribute and command
	check whether getopt() options are given or not.
	enable --help for all command line programs
	xxx.cgi SHOULD NOT ACCPET the same options as command line program xxx
	does.

   FML::Process::Kernel
	trap --help in new() to show and exit asap

   FML::Process::ConfViewer
	fmlconf and makefml are separete now

   FML::Process::CGI::Kernel
	change defualt target to _top

   FML::Process::CGI::Param
   FML::Restriction
	reconstructured safe parameter definitions

2001/11/21

   FML::Process::Switch
	fmlsch -h to show help

   FML::Process::Scheduler
   TinyScheduler
	clean up fmlsch
	FNF-ify
	handle options by getopt() in Process::Scheduler not TinySchedule
	make "fmlsch help" work
	fix entry duplication bug in parser
	print_specific_month() can handle (month, year) pair
	define set_mode()
	use env var BROWSER ("w3m" by default)

2001/11/20

   File::Sequence
	implement search_max_id() in hash key
	more debug

   Mail::ThreadTrack::DB
	db_hash( $type ) to return hash reference for $type

   Mail::ThreadTrack::HeaderRewrite
	validate variables

   FML::Process::ThreadTrack
	update database for latest not-yet-analyzed articles.

2001/11/19

   Mail::ThreadTrack
	implement set_fd(), get_fd()
	implemente set_order()

   FML::Process::ThreadTrack
   Mail::ThreadTrack::Print
	split functions for list and summary.
	"list" shows thread summary but "summary" shows thread summary +
	article summary.

	enhance fmlthread to provide CUI, oh this is useful !

   Mail::ThreadTrack::Print
	enable --reverse for summary, list command
	check reverse_order value ;-)

   Mail::ThreadTrack::Print::Message
	check value of header fields, which is undefined in some cases

   Mail::ThreadTrack::Print::Text
	implement show_articles_in_thread()

   FML::CGI::ThreadTrack
	summary listing on CGI is normal order by default

2001/11/18

   FML::Article
	implement speculate_max_id()

   FML::Process::ThreadTrack
	change max_id speculation strategy:
	1. check the max_id is given or not, use it if given
	2. try max_id() of FML::Article;
	3. speculate_max_id($spool_dir) in FML::Article

   fml/etc/paths.cf
	./configure  paths.cf 롣

2001/11/17

   FML::Process::HTMLify
   Mail::HTML::Lite
	disable debug code, enable it when $ENV{debug} is defined

   FML::CGI::Configure ThreadTrack.pm
   FML::Process::Switch
   Mail::ThreadTrack
   Mail::ThreadTrack::Print::HTML
	change default target to _top
	use $msg_base_url to show link to article

2001/11/16

   Mail::ThreadTrack
	new()::save $args as _saved_args in $self

   Mail::ThreadTrack::DB
	fix _status but in unpolite way. XXX fix it !

2001/11/13

   CGI ѹ¾

	Problem ץƥࡢ塼顢makefml CGI  (ץȥ)
	٤ư褦ˤ

   FML::Process::CGI::Kernel
	some cgi may need no ml_name

   FML::Process::CGI::Param
	fix address regexp, define $command, modify error return way

   FML::Process::CGI::Kernel
	move get_ml_list() to FML::Process::CGI::Kernel
	from FML::CGI::ThreadTrack

2001/11/12

   use autoconf
	¤롣櫓

		# useradd fml
		# ./configure; make install

	Ȥ󥹥ȡˤʤޤ

   loader
	loader generated from loader.in (autoconf)

   Standalone
	expand ${variable}

   FML::CGI::ThreadTrack
	fix typo, $myname resolved by $curproc->myname()

   FML::Process::Switch
	fix to introduce $config_dir (etc::fml) from main.cf
	default_config -> default_config_cf

   FML::CGI::ThreadTrack
   FML::Process::CGI::Kernel Param.pm
	move "function to get paramlist" to FML::Process::CGI::Param module
	implement safe_pramlist\d+_\S+() via AUTOLOAD()

2001/11/11

   Mail::ThreadTrack::Print::Sort
	change cost evaluation logic (numeric now)

   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML Message.pm
	clean up summary() mode for both text and html modes.
	print() method knows what should it do for text::html mode.

   Mail::ThreadTrack::HeaderRewrite
	defined $rh->{ _articles  }->{ $thread_id }

   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML Text.pm
	dynamic binding accoding to mode::text or html

   Mail::ThreadTrack
	change article_summary_lines to 5 by default

   FML::Process::CGI::Param
	define article_id, method -> action

   FML::Process::CGI::Kernel
	header( -charset => $charset)

   FML::CGI::ThreadTrack
	modified to fit FML::Process::CGI structure.
	enable 'close' operation
	reset button

   FML::Process::CGI::Kernel
	workaround::header( -target  => "ResultsWindow" ) anyway

   FML::Process::CGI::Param
	allow action =~ ::^[-a-z_]+$::

   FML::CGI::ThreadTrack
   Mail::ThreadTrack
   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML
	enable "show" and "change_status" to work

   FML::CGI::ThreadTrack
   FML::Process::{Distribute,Switch,ThreadTrack}
   Mail::ThreadTrack
   Mail::ThreadTrack::Print::HTML
	ThreadTrack switches acconding to myname ($0).
	threadview is view only and cannot change status.

2001/11/10

   loader
   FML::Process::Switch
	bug fix::format $reason

   FML::Process::CGI::Kernel
	remove makefml issue.
	modify run() which now executes:
		$curproc->html_start($args);
		$curproc->run_cgi($args);
		$curproc->html_end($args);

2001/11/08

   Mail::Message::Language::Japanese::Subject
	nuke new(), not used

   Mail::ThreadTrack
	restructure hierarchy
	clean up inheritence for further refactoring
	modify method names
	clean up
	nuke some "*cost*" indicator codes
	closed -> close for some cases

   Mail::ThreadTrack::Analyze
	avoid duplicated commit to articles DB { thread_id => [ id1 id2 ... ] }
   Mail::ThreadTrack::Print::Message
	ignore ^= line in message summary

   Mail::Message::Date
	validate $in $shift_m

   Mail::ThreadTrack
	list_up_thread_id()::remove db_*() operation

   Mail::ThreadTrack::Analyze
	speculate date from header's Date:

   loader
	least error infomation by default OR raw $@ if debug

   FML::Process::Switch
	least error infomation by default OR raw $@ if debug

   Mail::ThreadTrack::Print
	bug fix trap pattern of _valid_buf() and
	_delete_subject_tag_like_string()

   FML::Process::CGI
	use FML::Process::CGI::{Kernel,Param}

   FML::Command
	defined() check for $command_args

   FML::Process::Switch
	modify error message

2001/11/07

   FML::Process::Switch ThreadTrack.pm
   Mail::ThreadTrack
   Mail::ThreadTrack::Print

	enable fmlthread options:
	--article_id_max=\d+  to override ::var::spool::ml::$ml::seq
	--reverse             to reverse time order in showing "review"

   Mail::ThreadTrack::DB

	remove not used variables

   FML::Process::Switch ThreadTrack.pm
   Mail::ThreadTrack::Analyze

	fmlthread -f filterlist ...

   Mail::ThreadTrack::DB

	show ... when processing

   Mail::ThreadTrack::Print

	check -f article_file

   FML::Process::Utils

	command_line_argv_find()

   FML::Process::ThreadTrack

	fmlthread review ML RANGE srcdir=::some::where
	XXX srcdir=\S+ overwrites config->{ spool_dir } variable

   Mail::ThreadTrack

	define add_filter() method

   FML::Process::Switch ThreadTrack.pm

	we should use long line options since we support it :)
	o define --spool_dir for fmlthread. for example:
	% fmlthread db_clear fml-help
	% fmlthread --spool_dir=::some::where -f ::tmp::filter db_rebuild fml-help
	% fmlthread --spool_dir=::some::where review fml-help last:100



2001/11/06

   å review Ⱥ⡼ȤǤǤ褦ˤȤä

	fmlthread db_clear fml-help
	fmlthread --spool_dir=/some/where -f /tmp/filter db_rebuild fml-help
	fmlthread --spool_dir=/some/where review fml-help last:100

2001/11/05

   fmlthread review
	review() mode to show summary for articles in each thread

   FML::Process::Utils
	implement command_line_options()

   fmlhtmlify [-I dir] src_dir dst_dir
		new utility for convenience
	Affected Files:
		INSTALL.sh
		fml/bin/fmlhtmlify
		FML::Process::Switch
		FML::Process::HTMLify

2001/11/04

   ץ ticket -> thread

   FML::Process::Switch
	eval FML::Process::Flow::ProcessStart($obj, $args);
	and trap error.
	If error traped and $obj has help() method, run $obj->help().
	also upcall the $@ by croak($@)

   FML::Process::
	save $args at $curproc->{ __parent_args }
	$curproc provides convenient functions FML::Process::Utils has.
	fml_version()
	myname()
	command_line_raw_argv()
	command_line_argv()
	article_id_max()

	my $myname  = $curproc->myname();
	my $argv    = $curproc->command_line_argv();

   FML::Process::ThreadTrack
	enable db_clear, db_mkdb, summary, help

   Mail::ThreadTrack
	implement exist() and close()
	implemente db_clear(), db_mkdb()

2001/11/03

   remove fmlticket, create fmlthread

   FML::Process::  Mail::ThreadTrack ١ؤ
	FML::Process::TicketSystem Ϻ
	FML::Process::ThreadTrack 줿

   Mail::ThreadTrack  CVS 롣
	ϥåɤפ뤿ΥġǤꡢ
	call tracking system γǰΤʤƤȤäƤ褤

   Mail::ThreadTrack
	change new() parameters
	nuke pcb
	$config->{ db_type } = 'AnyDBM_File'; by default
	$self->{ _index_db } = $db_base_dir::"index"
	moved set_status() into this module

   Mail::ThreadTrack::Analyze
	nuke pcb
	bug fix $article_id handling
	Log() to $self->log()
	assign()::clean up function names and arguments
	define {get,set}_thread_id() and modified to use them
	add commentes for FNF style
	clarify assign() and rewrite_header() roles
	define {set,get}_thread_status() and modified to use them
	message-id is <addr-spec> (RFC822), we use this format also in DB.
	correct handling of $config->{ thread_subject_tag_location }
	remove _address_clean_up(), which is not used now.
	remove set_status()

   Mail::ThreadTrack::HeaderRewrite
	prepare_history_info()

   Mail::ThreadTrack::DB
	make index database in db_base_dir not db_dir

   Mail::ThreadTrack::Print
	build-in decode_mime_string()
	tune up alignment in printing
	EUC-ify output
	define STR2EUC() for convenience

2001/10/29

   Mail::Message
	_get_mime_header() checks offset boundary
	return default pair if overrun.

   Mail::HTML::Lite
	nuke $ENV{DEBUG}, check input data more

	rename key:
	prev_thread -> prev_thread_id
	next_thread -> next_thread_id

	count up $self->{ _num_attachment } for child process
	attachment file name $id.$count.html
	parent passes the id to child (processing attachment)

	ignore type if type is ::^multipart::

	check $idp pattern

2001/10/28

   Mail::HTML::Lite
	change method to speculate thread link

	rename functions
	implement _create_temporary_filename()
	reorder $type check

	consider case of text::* with encoded content
	save content to file once and rewrite it by _rewrite_html_file()

	consider encoding style of quoted-printable, 7bit also

	_format_safe_header() and print it in raw mode to enable
	<SPAN> tag use.

	define _sprintf_safe_str() and  __sprintf_safe_str() for convenience

	define _separete_url() to help incomplete regexp of
	HTML::FromText::text2html()

2001/10/27

   Mail::HTML::Lite
	use _PRINT_DEBUG(), define _print_safe_{str,buf}() to be easy for eyes
	_print() -> _print_raw_str()

   Mail::Message
	oops, should be s::::::mi to trap encodinge

   FML::Filter::BodyCheck
   Mail::Message
   Mail::Bounce::DSN
   Mail::HTML::Lite
	change method: data() -> data_in_body_part()

2001/10/22

   FML::Ticket::System (clean up campaign)
	remove obsolete functions:_quote_space(), _dequote_space(), AUTOLOAD()
	remove not used _pcb_[sg]et_id()
	$self->_pcb_set_id($curproc, $id) -> $pcb->set('article', 'id', $id)

   Mail::HTML::Lite
	add (X-ML-Name X-Mail-Count X-Sequence) into @header_field (default
	header to show)

	defined() check before calling Jcode::XXX()

   FML::Command::Admin::htmlify
	accept command line option::srcdir=$srcdir

2001/10/21

   makefml htmlify $ml_name outdir=$out_dir

	ס HTML 륳ޥ
	 Mail::HTML::Lite Ѥ롣
	 fml 4  spool2html бΤȤ褦

   Mail::HTML::Lite
	Ȥ ID ǥå (TABLE)
	make monthly index always
		monthly_index.html
		month.YYYYMM.html

	prepare top level entrance functions:
		htmlify_file() for file
		htmlify_dir()  for directory

	clean up codes, documents

	implement _print_index_{begin,end}() and modified to use them

	sort location of function definition
	rename functin name:
	_print_attachment -> _print_inline_object
	_raw_text_print   -> _text_print_by_raw_mode

	oops, fix untie() operation to be ensured

	check target html is already processed or not

	bug fix _address_clean_up() syntax check

	check already processed or not
	you can know it by $self->is_ignore($id) method.

	move a lot of debug code to "if $debug > 3" in cache_message_info()

2001/10/20

   Mail::HTML::Lite
	᡼ HTML ⥸塼
	mhonarc Τ褦˶ŤäƤϤʤɬ׽ʬʺ¤εǽϻ
	( Lite ʤ)

	cache information in .ht_hml_* in html article directory
	rewrite links using these data among articles needed to rewrite.
	links contains prev::next by ID (article ID) and prev::next by Thread.

	bug fix target lists to update, modified to use the result by
	evaluation_relation()

	clean up debug code
	more debug information

	show <META> and <LINK> information in <HEAD> if could
	new() takes charset as argument
	change _decode_mime_string() to method
	modify ifdef in_chaset_to_code() to be more suitable

	we can make index.html and thread.html

	Mail::HTML::Lite::new() accepts
		{ db_type => "DB_TYPE", attachment => 0::1 }

	change html_begin argument::($wh, { message => $msg });
	we can specify title in <HEAD>
	several minior changes

	bug fix::_address_clean_up() should check return value, which is
	address or not more rigolously.

	bug fix::check parent::child (attachment) process or not

	more and more debug info

   Mail::Message

	bug fix::$InComingMessage should not local scope. modify it to
	SCALAR REF

	bug fix::data_in_body_part() returns whole data not the first
	512 bytes. if $size is specified as argument, return the first
	$size bytes.

	feature::get_data_type_list() returns ARRAY of xxx::yyy by
	default for other method use. If under $debug mdoe, it shows
	verbose output.

2001/10/19

   import HTML::FromText 1.005

   Mail::Bounce
	Mail::Message::get_data_type_list() is changed. To sync with it,
	use $msg->get_data_type_list( { debug => 1 } ) for debug.

2001/10/18

   Tie::JournaledDir
	change default unit to "day" not number (unix time).

2001/10/17

   variables
	add $confirm_keyword to $available_commands_for_stranger
	add $available_commands_for_stranger to $available_commands

   FML::Command
	modified FML::Command uses get_attribute() in FML::Command::Attribute

   FML::Command::Attribute
	renamed FML::Command::ACL -> FML::Command::Attribute.pm

   FML::Command::SendFile
	support MH style arg::first, last, cur, first:\d+ and last:\d+

   FML::Command::User::bye
	fix typo

   File::Sequence
	implemente get_id() method to return the latest article id
	update document

2001/10/15

   ե륿󥰤ͭˤ

     FML::Filter::BodyCheck
     FML::Filter::HeaderCheck.pm
	define @default_rules and use it if rules not specified
	rules() method to overwrite filtering rules

     variables
	define the following variables for filtering (FML::Filter)
		body_cksum_cache_dir
		body_filter_rules
		body_loop_check_rules
		header_filter_rules
		use_body_filter
		use_body_loop_check
		use_header_filter

2001/10/14

   FML::Process::Kernel
	bug fix::we should pay attention to implisit $_ use

   FML::Process::Configure
	sync style w:::Process::Command

   FML::Process::Command
	make argument vector from $command
	relocate _parse_command_options()
	implemt _get_command_name()
	clean up
	fix typo

   FML::Command::Admin::get
	prototype to use FML::Command::SendFile

   FML::Command
   FML::Command::*
   FML::Process::Configure
   FML::Process::Command
	$optargs -> $command_args

2001/10/13

   FML::Process::Command
	pass $comname in $optargs

   FML::Command::SendFile
	fix duplicatoin for $charset

   FML::Config
	avoid infinite loop

   FML::Command::SendFile is added
	This module provides basic file sending functions

   implement command: get help summary guide
	FML::Command::SendFile based command

2001/10/12

   FML::Command
	remove error_nl()

   FML::Command::Admin::resign
	->SUPER::process()

   FML::Command::Admin::subscribe
	clean up log message, LogError() -> croak()

   FML::Command::User::subscribe
	use reply_message_nl()

   FML::Command::User::unsubscribe
	confirm version

   FML::Config
	expand_variable_in_buffer can take optional $args

   FML::Credential
	bug fix variable name

   FML::Process::Kernel
	implement search template mechanism in reply_message_nl()
	$config->expand_variable_in_buffer() takes optional $args

   FML::Process::Command
	use reply_message_nl()
	remove exception mechanism by $obj->error_nl();

   etc/
	define $message_message_dir
	add chaddr to $available_commands

   å
	ƥץ졼Ȥ euc-jp Ȥ

   FML::Config
	expand_variable_in_buffer()
	expand $varname to $config->{ varname }

   FML::Process::Command

	add _pre_scan()
	even not member need to use $confirm_keyword.
	for example, 'guide', 'subscribe', 'confirm'

	add _can_accpet_command()
	1. simple command syntax check
	2. use of this command is allowed in FML::Config or not ?
	3. Even new comer need to use commands [ guide, subscirbe, confirm ].

   enable confirmation
	FML::Confirm module Ѥޤ
	ѿ $available_commands_for_stranger 롣
	FML::Confirm provides basic functions needed for confirmation
	+ FML::Command::User::subscribe
	+ FML::Command::User::confirm
	+ FML::Confirm

   FML::Command::Admin::subscribe
	check address is specified or not

   FML::Command::User::help
	clean up
	expand_variables_in_file() -> prepare_file_to_return()

   FML::Process::Kernel
	define prepare_file_to_return():
	expand $xxx variables in template (e.g. $help_file).
	1. in Japanese case, convert kanji code::iso-2022-jp -> euc
	2. expand variables::$ml_name -> elena
	3. back kanji code::euc -> iso-2022-jp
	4. return the new created template

2001/10/11

   FML::Filter::Utils
	it provides utility functions
		is_secure_command_string()
		is_valid_mail_address()

   FML::Process::Command
	it checks input by FML::Filter::Utils::is_secure_command_string()

2001/10/10

   ޥ
	get mget help ʤɤư褦ˤʤä

   FML::Config
	check defined() more

   FML::Credential
	implement is_same_address() completely.
	is_member() accpepts $args->{ address }
	define set_compare_level(), get_compare_level()

   add variables
	command_prompot	= >>>
	help_file = $message_template_dir/help
	message_template_dir = $fml_share_dir/template/$template_file_charset
	template_file_charset = $default_charset

   Mail::Delivery::SMTP
	old IO::Socket has no connected() method. modified to use our
	own socket_is_connected() method or remove connected() check.

	Mail::Delivery::SMTP
	+ bug fix: ensure we handle IPv6 case more restrictly

	Mail::Delivery::Net::INET6
	+ bug fix: clear error counter
	+ check more defined($socket) or not, socket is connected
	+ more debug log

   FML::Process::Kernel
	define prototype for reply_message_nl() for natural language
	check more defined() or not
	more debug info
	define expand_variables_in_file()
	+ expand $xxx variables in template (e.g. $help_file).

   FML::Process::Command
	bug fix: $obj->$command where $command is a command name not line.
	modified to use reply_meessage_nl()

   FML::Command
	define error_nl(), but a dummy yet now
	+ get natural language information

2001/10/09

   libexec/Standalone.pm
	check $config->{ $x } is defined() or not

   Ticket System
	consider $ticket_subject_tag_location in regexp
	change ticket_id_syntax to "$ml_name/%d" by default
	define ticket_subject_tag_location as "appended"
	change default ticket syntax
		etc/default_config.cf.ja
		etc/defaults/tickets.cf.ja

	FML::Header::Subject
		change regexp_compile().
		quotemeta() firstly, and hack a few

   FML::Process::Command
	catch up the modification in FML::Process::Distribute.
	make command function work with replying request mail.
	disable lock()/unlock() since each command module lock/unlock
	by itself.

   FML::Process::Distribute
	modified finish() to use queue_flush()


2001/10/08

   ᡼ǤΥޥɤαǽˤ(ץȥ)
	add a lot of debug messages

	* Affcted modules:
		FML::Command
		FML::Process::Command
		FML::Process::Distribute
		FML::Process::Kernel
		FML::Process::Switch

	* newly added:
		FML::Command::User::help

	* test tools:
		regress/simulation/test-ctl.sh
		regress/testmails/text=plain.command

   FML::Command
   FML::Process::Kernel
	more debug info

   FML::Process::Distribute
	log ACL error

   FML::Process::Switch
	enable "loader --ctladdr" behaves as libexec/command
	more debug messages
	modify style e.g. eval q## -> eval q{} et. al.

   regress/simulation/test-ctl.sh
	added simple command mode emulator

   regress/simulation/perlcheck
	add -I ../../fml/libexec

   libexec/loader
	die() -> croak()
	define missing default value in initialization
	remove obsolete variable: $libexec_dir
	eval()-fiy more
	fix error message
	show $@ in error
	fix typo

   fix: more severe initialization check
	FML::Credential


2001/09/23

   Mail::Message
	implement get_encoding_mechanism() in Mail::Message.

	implement get_offset(): return offset information in the data.
	return value is	ARRAY.

	return encoding type for specified Mail::Message not whole mail.
	The return value is one of base64, quoted-printable or undef.

	Modified Files:
		fml/lib/Mail/Message.pm
		fml/doc/ja/tutorial/module/Mail::Message.sgml
		regress/message/dump.pl

   塼ȥꥢ
	module  ˴ؤ뿷ѡȤ
	module/ ǥ쥯ȥ
		Mail::Message
		IO::Adapter
	ΥץȥפѰդ롣
	Υǥ쥯ȥǤϳƥ⥸塼ξܺ٤ʻȤˤĤ
	ҤΡ

   FML::Filter
	fml 4.0.x εǽ򤭤ȼ롣
	 륹åϽ
	XXX ǡ͡ĤǤ촹ǽ

	Utils ؿŬʥ⥸塼ذư
	move clean_up_buffer() and compare_euc_string() to
	FML::Filter::BodyCheck and FML::Language::Japanese::Utils
	respectively to remove FML::Filter::Utils.

	MS GUID Ƚ̤롼

2001/09/22

   FML/Config.pm
	if ($ENV{'debug'}) { ... debug ...;}

   TinyScheduler.pm
   FML/Command/Admin/edit.pm
	modified to use File::Spec

2001/09/18

   errormail collection
	add netscape messaging server 3.54 sample
	thanks PR for Toshimi Aoki <toshi@kinotrope.co.jp>

2001/09/17

   IO::Adapter

     * IO::Adapter::{DBI,MySQL,RDBMS}.pm
	rename: $self->{ _driver } -> $self->{ _model_specific_driver }
	dynamically load DBD:mysql

	move replace(), getline() and get_nextvalue() to DBI.pm
	since these functions are MI (Map Independent).

	implement setpos(), getpos() and eof() in MySQL.pm
	since these functions is dependent on map type (MD).

	RDBMS.pm is not used now, so removed.

     * IO/Adapter.pm
	change replace()
	o fix typo: s/regexp/replace/
	o fix case insensitive search when $show_all is on
	o call md_find (md == map dependent, function) if defined
	o enabled to call md_XXX()
		define AUTOLOAD() to hook up md_XXX() functions
		XXX For example, md_XXX() should be implemented at
		XXX IO::Adapter::SQL::toymodel.pm

     * IO/Adapter/SQL/toymodel.pm
	rename: fetch_and_cache_address_list -> fetch_all
	implement md_find()


2001/09/13

   FML::Process::QueueManager
	send() can take queue id as the argument

   FML::Process::Kernel
	more friendly error message

	implement queue_flush($queue): This flush C<$queue>, that is,
	send mail specified by C<$queue>.  It uses
	FML::Process::QueueManager module.

   FML::Config.pm
	define FIRSTKEY and NEXTKEY for complete hash emulation

   FML::Command::Admin	桼ѥޥɷ
		commit prototype
		makefml uses this class

2001/08/26

   FML::Credential
	implement has_address_in_map() method and is_member() uses this.
	has_address_in_map() searches the address in the specified map.

   IO::Adapter 饹
	touch() ᥽åɤɲ
	XXX file װʳǤ̵̣ߡ

   FML::Command:: 饹κƹ

	FML::Command.pm		FML::Command 饹ʲؤ
	FML::Command::ACL	ACL
	FML::Command::Utils	ޤ
	FML::Command::User	桼ѥޥɷ
	FML::Command::Admin	桼ѥޥɷ

		newml edit ʤɤ Admin Τ

2001/08/24

  regress/
	add&enable FML::Config {+,-}= overload test tools

2001/08/23

   FML::Config γĥ
	postfix style Τʤĥ

	ѿ̾ += 
	ѿ̾ -= 
	ǡͤ­Ǥޤ

	:
		x  = a b c d
		x -= b
		
		x = a c d

		x  = a b c d
		x += e
		
		x = a b c d e
		ʤɤȤʤ롣

2001/08/22

   clean up
	File::Spec Ȥ褦ѹ


2001/08/21

   Tie::JournaledDir 饹
   Tie::JournaledFile  clean up

	Tie::JournaledDir 饹ϥåȤƤǥ쥯ȥȤ
	ʣĤΥե֤˻Ȥޤ
	줾Υե Tie::JournaledFile Ȥäƥޤ

	ˤ auto expiration 򤹤 Journaled å¸
	ޤ

	add Tie::JournaledDir which wraps Tie::JournaledFile and uses some
	directory as cache area.

	add/update test tools for Tie::Journaled{File,Dir} modules.

	clean up Tie::JournaledFile
	o remove header in the cache file
	o $self->{ 'key' }
	o $debug is on if $ENV{'debug'} is defined.
	o more carefull check of whether the value is defined or not.
	o quotemeta() for pre search key in find()
	o rename grep() to find()

2001/08/19

  ե륿ɤβ
	ԥ᡼뤫ݤȽꥳɤ򤭤줤ˤ

		Τ signature ѤȽꤹ륳¾
		Utils.pm ⤭줤ˤʤɤä


2001/08/06

  ե륿
	clean up

  fml/lib/
  fml/etc/
	ѿ̾ѹ򤹤롣s/header_check/header_loop_check/
	롼ץåǤ뤳Ȥѿ̾ΤǤϤäꤵ

  IO::Adapter

	IO::Adapter
		set @ISA = qw(IO::Adapter::ErrorStatus) to call error_set()
		check $@ before call configure()
		add more debug codes

	IO::Adapter::MySQL
		ᥤʬ 	IO::Adapter::SQL:: ʲذܤ
		IO::Adapter::MySQL ñʤեȥɤˤ

2001/08/02

   Mail::Message
	bug fix wrong handling of "\n" at the last of part

2001/07/31

   rename FML::NL to FML::Language

   Mail::Bounce class

	ʲΥѥϤǤ褦ˤʤäϤǤ
		Lotus Notes
		pakeo.ne.jp
		jp-r.ne.jp (ۤȤ?)

	Mail::Bounce::Language::Japanese
		ܸ¸ѡ

   Mail::Bounce::DSN

	call again $self->address_clean_up($addr, $addr)
	gives $addr itself as a hint of fixing broken address
	domain part of $addr may match someting e.g. nifty.ne.jp, webtv.ne.jp.

   Mail::Bounce.pm
   Mail::Bounce::FixBrokenAddress.pm

	use Mail::Bounce::FixBrokenAddress to clean up address

	Mail::Bounce::FixBrokenAddress class provides irrgular
	address handlings, so handles domain/MTA specific addresses.
	For example, nifty.ne.jp, webtv.ne.jp, ...

2001/07/30

   Mail::Bounce class

        pick up Reporting-MTA and Received-From-MTA in DSN

	clean up documentation
	add error examples

	modify Mail::Bounce::$module return "hints" to caller
	(Mail::Bounce class).

2001/07/19

   add errormail samples

	freeserve.ne.jp
	webtv.ne.jp

2001/07/15

   ѿ

	pid  _pid ѹ

   FML::Config

	enable read and write configuration file

	Ȥ¸Ĥ postfix ե
	ɤ߽񤭤ǽˤ褦

2001/07/15

   Υեߤ:)

$FML: CHANGES.txt,v 1.99 2002/08/28 14:01:52 fukachan Exp $
