		CHANGES
		Last Modified: $Date: 2012/12/30 10:02:53 $

  [ǶΤޤȤ]

  FML_CURRENT_VERSION=7.98.18

  8.0 PRE_ALPHA
	7.98.18 hack base to catch up perl 5.16 changes, cpan modules ..
	7.98.17 update modules: cpan modules, IM et.al (to be planned).
	7.98.16 FML::Install is enhanced.
	7.98.15 IM updated to IM-150.
		fix wrong ID incrementation in article to html conversion.
	7.98.14 www interface for anonymous users.
		Anyone can submit a subscribe/unsubscribe request via
		www interface. 
	7.98.13 "isolate" instead of "reject" spam or unknown messages
		by default.
	7.98.12 delivery system error handling fixed.
	7.98.11 ignore in restrictions supported.
	7.98.10	delivery system overhaul sequal.
	7.98.9	delivery system overhaul
	7.98.8	correct context switch.
		address validation in smtp transaction.
	7.98.7	confirmation + manual subscribe/chaddr/unsubscribe
		manual subscribe/chaddr/unsubscribe
	7.98.6	fundamentals of moderator mode implemented.
	7.98.5	add reviveml command (to revive a removed ML).
		add PostgreSQL support.
		add LDAP support.
	7.98.4	minor fixes. clean up. 
		clean up method naming convension.
	7.98.3	Japanese/English document overhaul/revised.
	7.98.2	queuing system revised. fetchfml added.
		PGP/GPG authentication.
		bug fix method naming convension (FNF).
		MIME-Base64 removed from cvs tree.
	7.98.1	overhaul.

  []
	ޥɥ᡼ΥɤŪ˽ľޤ

	fml-devel-20040303 Υޥɥ᡼ѹ"äƤʤ"
	ǸΥʥåץåȤǤ

	fml-devel-20040313 Ǥϡѿ̿̾Υ롼뤬礭Ѥޤ
	ĤƤ

	2004/09 ʹߤ fml8 ϵ MTA Ūư򤷤ƤơʬΥ᡼
	륭塼󥰥ƥȤäƥ顼Ԥʤޤ

2012/12/30
   FML::Process::Calendar
	catch up perl changes: defined(hashes and arrays) is
	deprecated, instead use a simple test for size:
	if (@an_array) { ... }

   FML::Process::ConfViewer
   FML::Process::DocViewer
	catch up perl changes: not length(@array), use "scalar @array"
	to find out how many elements these have. 

2012/12/13

  Mail::Delivery::SMTP
	catch up IO::Handle changes in Perl 5.16 to avoid a lot of
	warnings. see RT#66474
	https://rt.cpan.org/Public/Bug/Display.html?id=66474

2012/12/13

  HTML::EntitiesLite added to make HTML::FromText work.
	non-XS-ified HTML::Entities module derived from HTML::Parser
	3.69. HTML::FromText is modified to use it.

	HTML::EntitiesLite is enough for HTML::FromText since we can
	use only encode_entities() not decode_entities, which depends
	HTML::Parse XS engine.

2012/04/21

   Mail::Delivery::Net::INET6
	not duplicated loading of Socket related classes.

2012/04/15

   not use obsolete library.
	timelocal.pl and ctime.pl, which is removed in Perl 5.16
	release. switched to use Time::Local and Time::localtime. 

   import CPAN modules for HTML::FromText module:
	import Email-Find 0.10.
	import Exporter-Lite-0.02.

2012/02/25

   update CPAN modules successively:
	Unicode-Japanese         to 0.47.
	HTML-FromText            to 2.05.
	HTML-CalendarMonthSimple to 1.25.

2012/02/19

   update CPAN modules successively:
	Jcode       to 2.07.
	File-MMagic to 1.27.
	Socket6     to 0.23 (not used, holded in cpan/dist for reference).
	HTML-Template is removed since it is not used.
	Log-ErrLogger is removed since it is not used.
	Text-CSV      is removed since it is not used.
	Rcs           is removed since it is not used.
	VCS-CSV       is removed since it is not used.

2012/02/18

  update Time-modules to 2011.0517 (sync w/ pkgsrc/time/p5-Time-modules).

  bump up the FML_CURRENT_VERSION to 7.98.17
	to clarify the dependence among the version and modules.

2011/09/26

   FML::Config 
	include ErrorStatus module within it.
	remove "use ErrorStatus".
	
   FML::Credential 
	include ErrorStatus module within it.
	remove "use ErrorStatus".
	
   ErrorStatus
	modified to not use this top level package. remove this.

2011/08/25	

   Mail::Message::Encode 
	bugfix quoted-printable pattern at decode_mime_utf8_to_euc().

2010/11/28
	
   FML::Install 
	fix vendor expansion bug (bug fix previous commit).
	
	***important changes***
	do not overwrite file in installation. changes for the further
	enhancement, e.g. in other softowares. Actually, the current
	fml installation does not chanes since the file::directory
	names do not conflict. 
	
2010/11/09

   bump up to the version 7.98.16.

   FML::Install
	enhanced to try to install all files in all vendors,
	which is useful for 3rd party.

2010/03/06

   FML::Process::Distribute 
	seems incorrect that increment_id() in calling HTML-ify
	function since already the article ID is incremated at _
	deliver_article_prep(). changed to use $article->id(); by
	fetching the current article ID.

2010/03/01

   bump up to the version 7.98.15.

2010/02/28

   import IM-150.


2010/02/28

   fml-7.98.14-20100228 released as a mile stone before further development.
	same as fml-7.98.14-20090809 excluding documentation.

	ɥơʳ fml-7.98.14-20090809 ƱǤ
	Τᡢ饤֥ΥåץǡȤϤ˺
	ʥåץåȡ

2009/12/26

    fml/utils/bin/version_replace.pl 
	added: version replacement utility.

    tutorial/Makefile.template
	replace version in include/bookinfo.sgml always
	using fml/utils/bin/version_replace.pl utility.
	
	catch up the change in clean and export rules.
	
    ja/tutorial/include/chapters.ent 
	define bookinfo.cooked entity.
	we use it as version-managed bookinfo.sgml.
	
    ja/tutorial/book.sgml 
	use version managed bookinfo entity. clean up a little.
	
    ja/tutorial/
	clean up a little ...


2009/08/09

   fml-7.98.14-20090809.tar.gz built.

2009/07/15

   FML::Process::Distribute 
	move calling _htmlify() from _deliver_article_prep() to finish()
	
2009/06/20

   fml-7.98.14-20090620.tar.gz built.

2009/06/10

   Mail::Message::Date 
	bugfix case timezone +0000

2008/11/30

	ȯĶ perl 5.10 ١ѹ

   FML::Process::Switch 
	defined() before eq
	
2008/09/29

   FML::Process::CGI::Kernel 
	verify_request() logs client ip address if could.

2008/09/28

   documentation
	usage of anonymous cgi.

2008/09/15

   FML::ML::Control 
	delete scripts in the reverse order of creation.
	define {get,set}_force_mode().
	
   FML::Command::Admin::{newcgi,rmcgi}
	install/deinstall all CGI scripts for the specified domain.

2008/09/14

   FML::Process::Utils 
	define ml_name_list(), which returns the list of valid ml in the
	specified domain.
	fix documents and todo.
	
   FML::ML::Control 
	fix admin.cgi removing operation bug.
	count up the number of valid ml,
	remove admin.cgi only if ensured that no more valid ml exists.

2008/09/13

   variables
	define $listinfo_template_base_dir

   template files
	share/listinfo/euc-jp/index.html.ja 
	change default url for submission of subscribe/unsubscribe request.
	mailto:... -> ::...::submit.cgi
	
	share/listinfo/euc-jp/index.html.en aded.

   FML::ML::Control 
	listinfo operations fixed::install and deinstall index.html.{ja,en}.

2008/09/12

   variables
	define $ml_anonymous_cgi_base_url

   FML::Command::Admin::{newml,rmml}
	clean up.
	warn() -> ui_message() + logwarn().
	change variable names to be more proper.
	fix comments.
	
   FML::Command::Admin::rmml 
   FML::ML::Control 
	delete cgi scripts and listinfo in runnign rmml.

2008/09/11

   FML::Error::Cache 
	document: fix typo

2008/09/10

   FML::CGI::Skin::Anonymous 
	(1) check if the banner image format generator works or not
	(2) if not, use ascii generator.
	
   FML::String::Banner 
	new() needs $curproc as the argument.
	as_png() checks if GD perl module is available. if not, return
	undef.

   FML::ML::Control 
	clean up setup_cgi_interface() to be more modular.

2008/09/09

   WWW interface for anonymous users is added.
	Anyone can request subscribe/unsubscribe via WWW interface.
	After the request processed, the command flow is same as usual
	command mails ( confirmation is sent back, ...).

	̥桼 WWW 󥿡եǣ̤ͣؤΡס
	ΥꥯȤФȤ褦ˤޤ
	 subscribe  unsubscribe ޤ
	 ꥯȤФ confirmation Υեޤ
	   θϡĤΤ⥳ޥɥ᡼ƱˤʤǤ
	   Ĥΰ㤦̿ϩȤȤ˰̣ޤ
	 ѥϿȤϤޤ󡣤ɤ˻Ȥˤ˺Ƥ롣
	   ̵̤ˣͣ¦ؾ󤬽ޤäƤޤȵդ˴ʤ
	 椬ɤߤȤƤäơˡʸפ줵ޤ
	   SPAM 褱ηڤޤʤǤ
	   礤ä OCR ϺȤ̵̤Ǥ礦ޤǤ
	   ˤ褦ʲͤ WWW ʤ(confirmation 
	   ʤ)
	 äȤƤκΥǥ(Ȥ)罸档

   variables
	define variables for anonymous cgi::$use_anonymous_cgi_function,
	$anonymous_cgi_expire_limit, $anonymous_cgi_base_dir,
	$ml_anonymous_cgi_base_dir, $html_tmp_dir, and $html_tmp_base_url.
	
	define $ml_anonymous_cgi_allowed_commands

	definition changed::$cgi_base_dir, $admin_cgi_base_dir and
	$ml_admin_cgi_base_dir.
	
	renamed::$commands_for_ml_admin_cgi -> $ml_admin_cgi_allowed_commands

   etc/modules
	add definition "anonymous::*::*::submit.cgi".
	while space cosmetics.

   share/messages
	add message templates for anonymous CGI.

   FML::Char::Ascii::Data 
	ascii presentation of letters.
	
   FML::String::Banner
   FML::String::Banner::{Ascii,Image}
	banner string generator

   FML::String::Random
	generates a magic string and the identifier used for the
	session ID. 

   FML::Restriction::Base 
	define $alnum_regexp class.
	define 'session_id' and 'magic_string' regexp.

   FML::CGI::User 
	define anonymous_cgi_menu().
	fix and update documents.
	
   FML::CGI::Anonymous::{DB.pm,Submit}
   FML::CGI::Skin::Anonymous
	anonymous cgi initial version

   FML::Command::User::{chaddr,subscribe,unsubscribe} 
	show menu for an anonymous user by calling
	FML::CGI::User->anonymous_cgi_menu();
	
   FML::ML::Control 
	in setting up cgi, install cgi script(s) for anonymous users,
	too. 

   FML::Process::Kernel 
	import $fml_owner and $fml_group into $config name space from
	main.cf.

   FML::Process::Utils 
	fix how to search main_cf information.
	
	define set_allow_reply_message() and get_allow_reply_message().
	We can enable or disable reply_message*() functions dynamically.
	
   FML::Process::CGI::Kernel 
	generate anonymous session ID always (anyway).

	finish() calls message flush sub-system.

	cgi_execute_command() is enhanced to handle both *admin.cgi
	  and anonymous cgi case.

	some error messages are natural-languaged.

	use cgi_var_*() and specify -target if could.
	
   FML::Process::CGI::Utils 
	$commands_for_ml_admin_cgi -> $ml_admin_cgi_allowed_commands

	ensure the return value for CGI action to be not "undef".

	menu is enhanced to handle both *admin.cgi and anonymous cgi case.

2008/08/31

   WWW 󥿡ե subscribe / unsubscribe ¾Τν...
	Υ᡼ΡTODO: 󥿥ѥɤĤ URL 
	Ʊե졼ˤ(Ϥ)

2008/08/24

   Υ줿᡼(SPAM)̾ǥ쥯ȥش¤ؤ롣
	TODO: ݡȥ᡼
	TODO: 󥿥ѥɤĤ URL 
	       URL ϥݡȥ᡼˴ޤޤ褦ˤ롣

   FML::Process::{Flow,Kernel}
   FML::Isolate 
	rearrange isolated mails to under
	$isolated_queue_dir/YYYY/MM/DD dir. 
	
   FML::Command::Admin::thread 
	allow sub-command "outline" load.
	
   FML::Article::Outline 
	fixed::typo: add_outline_to_header_field -> add_outline_to_header

   variables
	add new entry on "isolatation" related variables.
	define $isolated_queue_dir and $isolated_queue_expire_limit.

2008/08/23

  clean up documents (continued)
	remove recipes and faq, tech category.
	merge recipes to tutorial.

2008/08/21

   clean up cpan/
	IO::Stringy removed since it is not used.

2008/08/20

   tutorial(jp) overhaul-ed.

2008/08/17

   FML::Process::Command 
	[bug fix]
	check isolated or ignored precisely and determine the final action.

2008/08/15

    documents being updated.

2008/08/14

    variables
	bug fix create-on-post default configuration.
	update and complete descriptions.
	sort definitions.
	remove "permit_createonpost_maintainer_maps", which is not defined.
	remove duplication in descriptions.

2008/08/13

   FML::Process::CreateOnPost 
	bug fix::fix internal arguments passing bug to handle sender
	information correctly.
	save sender candidates in PCB.
	
2008/08/07

   anoncvs.fml.org changed to support anonymous cvs over ssh.
	   fml/bin/anoncvs changed.
	   documents updated.

2008/08/03

   bump up version to 7.98.13
	isolation or quarantine mode implemented and enabled by default.
	"isolate" instead of "reject" spam or unknown messages
	by default.

	Ѥʥ᡼(ޤϤäСۤ SPAM)ϡޤ
	*_restrictions Υ롼κǸ夬 reject ΤᡢŨֻ
	ȤƤޤäƤǥեȤ isolate ѹ

	ȤꤢȤꡢΥ塼ưˤ

	Υ塼ΥݡȤʤɤϡޤ̤

   variables
	support directives (isolate_system_special_accounts
	isolate_spammer_maps isolate) for $article_post_restrictions and
	$command_mail_restrictions.
	
   Mail::Delivery::Queue 
	create isolated queue, too.
	
   FML::Process::Command 
	fixed that isolate operation works.

2008/07/20

   FML::Process::Utils 
	define incoming_message_dup_content() and
	incoming_message_isolate_content().
	
   FML::Process::{Command,Distribute}
	isolate the current incoming message if matched

   FML::Restriction::Post 
	define isolate_system_special_accounts() and
	isolate_system_accounts().
	
2008/07/16

	[isolate_XXX ̿᥷꡼߰]

	2008/07/06 γ restrictions (: ơޥɥ᡼) 
	reject Τ isolate  ignore Ȥ褦ˤ ...
	ϡΤǤreject_system_special_accounts ̿
	ɤФ褤ΤǤ礦

	isolate_system_special_accounts äƤΤߤɤǤ͡

	ۤ_restrictions ˤ reject ʤȤ̿򤹤٤ isolate 
	񤭴ƤޤСľʳĥȻפ롣
 
		$*_restrictions =~ s/reject/isolate/g;


2008/07/06

	 restrictions (: ơޥɥ᡼) reject Τ
	isolate  ignore Ȥ褦ˤǥեȤ reject  isolate
	ѹޤ

	isolate ̿ ignore  ¸(Υ)εǽǤ
	ݤֻ򤻤ˡ᡼¸ָ˺ޤ

	­: ǽ hold ̿򡢤ΰ̣ǻȤȤޤ
	Postfix  hold Ọ̇̄äƤޤΤǡѻߡhold 
	ͽȤơΤޤޡʼ֤ʤ̿ʤΤǽ񤤤Ƥⲿⵯ
	ʤΤաˡ

   FML::Process::{Distribute,State}
   FML::Restriction::Post 
	define "isolate" operation template.
	
	"isolate" differs "hold".
	"isolate" sets apart spam candidates from normal incoming messages,
	whereas "hold" moves the incoming message to "hold" queue, which does
	not move until someone changes the state.

2008/07/05

   FML::Restriction::CreateOnPost 
	fixed: add missing use FML::Restriction::Post

2008/07/04

   FML::Process::State 
	define restriction_state_{set,get}_hold_reason()
	
   FML::Restriction::Post 
	define hold() and discard()

2008/06/29

	CREATE-ON-POST ǽǤϡưŪˣ̤ͣκСɲä
	櫓Ǥ̤ͣκǽʥ桼¤ǽȤޤ

   FML::Credential 
	implement is_ml_domain() method.
	fix debug and pod descriptions.
	
   FML::Restriction::Post 
	implement permit_ml_domain()
	
   FML::Restriction::CreateOnPost 
	define permit_createonpost_newml_maps
	
   FML::Process::CreateOnPost 
	"who can do newml operations" code is rewritten to use of
	createonpost_newml_restrictions.
	
   variables
	define $createonpost_newml_restrictions.
	define $createonpost_newml_maps.
	remove $createonpost_maintainer_maps.

2008/06/08

   create-on-post enhanced.
	define $createonpost_maintainer_maps

   FML::Process::CreateOnPost 
	clean up. fix comments.
	restrict who can create a new ML.

   FML::Credential 
	define is_valid_map() method
	
   configurations	
	define $createonpost_maintainer_maps


2008/05/25

   switched to configure 2.62 based
		configure.in 
		configure
			show datarootdir

		fmlsrc/config.sh.in 
		fmlsrc/fml/etc/{install.cf.in, main.cf.in}
		datadir -> datarootdir	

2008/05/11

  project restarts (crash and fsck;) ends, orz).
	TEST: switched to a new source changes system.

2006/12/03

   overhaul continues ... (slowly ;_;) ...
	äȤĥХۡ³

   FML::Command::Admin::reviveml 
	fix comments.
	ensure initial value.
	add assert.
	show more error messages.
	
   FML::Command::Admin::mergeml newcopml newdomain rmcopml rmdomain 
	fix comments.
	ensure initial value.

2006/11/26
	
   FML::Sys::Alias 
	fix comments.
	remove a unused local variable.
	set the upper limit of recursive call _expand().
	
   FML::Sys::User 
	fix comments.
	add the label to a loop.
	define debug code by myself.
	
   FML::Process::Fake 
	fix comments.
	fix help message.
	change a local variable name to more proper one.
	
   FML::Credential 
	fix comments (FNF).
	ensure initial value.
	use more proper local variables.
	
   FML::Mailer 
	fix comments.
	fix error logic.
	
   FML::Moderate 
	fix comments.
	correct argument definitions.

2006/11/19
	
   FML::Error::{Analyze,Cache}
   FML::Error::Analyze::{histgram,simple_count }
	fix comments.
	use more proper variable names.
	
   FML::Header::MessageID 
	fix comments.
	ensure initial value.

2006/11/13
	
   FML::Error 
	fix comments
	ensure variable initialization.
	define $mname and use it in log messages.
	
   FML::Envelope 
	fix comments
	use FML::Credential->is_same_assress() to compare addresses.
	move variable definitions to the block using it more nearly.

2006/11/12

   FML::IPC::Queue 
	more debug messages.
	enhance debug patterns.

2006/10/22

   FML::Body 
	more error logs.
	move $curproc definition to near message logging.
	
   FML::PCB 
	use gloval_ prefix for package gloval variable:
	current_context -> global_current_context
	
   FML::Command::{Auth,DataCheck,Filter,Syntax}
	clean up. fix comments.
	
   FML::Command::DirUtils 
	fix comments.
	move definitions to near the codes.
	use more proper variable names.
	
   FML::Command::FileUtils 
	fix comments.
	move definitions to near the codes.
	use more proper variable names.
	
   FML::Command::HTMLify 
	fix comments.
	use more proper variable names.
	
   FML::Command::Message 
	fix comments.
	define the default message.
	
   FML::Command::QmailExt 
	fix comments.
	permit case insensitive commands.
	more error messages.
	validate temorary message file more.
	
2006/10/14

   etc/command_line_options 
   FML::Demo::{Chart,Project}
   FML::Process::Project 
	fmlproj::GanttProject XML format extension.
	--xml options
	dump GanttProject XML format by default.
	
   FML::Article::Summary 
	fix importation
	
2006/10/10

   FML::Confirm 
	fix comments.
	rename private variables to more proper ones.
	remove not used private variables.

2006/10/08

	äĴ褯ʤäƤΤǡ
	ӥ塼꡼˥󥰤Ƴޤ
	

2006/09/24

   FML::Demo::Chart 
	fix initialization code.
	_shrink_date() for column list.
	sort main data before printing.
	
   FML::Demo::Project 
   FML::Demo::Language::Japanese 
	NL-ify (use FML::Demo::Language if needed)
	enabled to expand YY::DD-YY::DD form to date list.
	cosmetics.
	status and misc support.
	
2006/07/09

   ۡϤ᤿

2006/06/10

   TinyMTA
	ǥХåӡä()MTAɤȤ
	


2006/06/25

   ؤ SPAM ǥޥɤꤹΤľäϤ

   FML::Command::DataCheck 
   FML::Process::Command 
	validate if find_first_plaintext_message() returns object.

2006/05/22

   Mail::Message::ToHTML 
	_update_montly_thread_index_master() rewrite same logic
	using _update_id_montly_index_master()

2006/05/17

   fml4 to fml8 Ѵ 97 % λ

   åƥץ졼Ȥ򤤤Ĥɲ

2006/05/16

   Ͽǽʥ桼¤򤫤褦ˤޤ
	fml4  $MAX_MEMBER_LIMIT ˤΤǤ
	äơʵǽߤΤ ISP 餤 :-)

   variables
	define $*_total_limit
	
   FML::User::Control 
	define get_user_total(), return the total number of addresses
	in list. 
	
   FML::Command::Admin::subscribe 
	check the number of users in {member,recipient}_maps exceeds
	the limit. 
	
2006/05/14

   FML::Envelope 
	envelop based loop check

2006/05/13

   variables	
	cksum -> checksum

   FML::Process::Kernel Utils 
   FML::Body 
	enable body based loop check
	
2006/05/11

   Mail::Message::Checksum 
	restructured.
	define md5_str_ref() too, same as md5().
	implement md5_file()
	
2006/05/09

   variables
	reject_spammer_maps directive available now.
	define dummy $primary_spammer_map and $spammer_maps.

	add envelope loop checks

   FML::Restriction::Post 
	implement reject_spammer_maps()
	
   FML::Credential 
	define is_spammer()
	
   FML::Process::Error 
	restructure qmail-ext command emulation.
	
	currently libexec::error traps the request and switch the
	context to command process. FML::Process::QMail no more used. 
	FML::Command::QmailExt provides qmail-ext emulation functions.

   etc/dot-qmail-admin 
	bug fix: add missing calling of libexec::error process.
	
2006/05/04

   ʵǽ expire ޤ

   variables
	define $welcome_file and $deny_file.
	% format of strftime(3) is available for $log_file
	
   FML::Log 
	expand % format in $log_file by strftime(3).
	ե log.%C%y%m%d ʤɤȤäդĤ褦
	ʤޤ
	
   FML::Process::Debug 
	define incoming_message(), which returns undef as a dummy.
	
   FML::Process::Distribute 
	expire article under locked
	
   FML::Process::Kernel 
	change default message subject to "message from $ml_name ML
	$myname system". 
	call $queue->expire() in incoming_message_cleanup_queue().
	
   FML::Article 
   FML::Article::Summary 
	expire article summary (remove content, corresponding with expired
	articles, in summary).
	
   FML::Moderate 
	expire too old submitted queue after $moderate_queue_expire_limit.
	
   FML::Command::Admin::subscribe 
	send back welcome file in subscription when running under
	CGI/MTA process. 
	
   FML::Command::User::confirm 
	move "send welcome message" code to
	FML::Command::Admin::subscribe class. 
	
   FML::Command::SendFile 
	bug fix::pass recipient information to reply_message_nl().
	
   FML::Command::User::admin 
	fix typo::$use_admin_command_mail_fucntion
	
   Mail::Delivery::Queue 
	constuctor imports $expire_limit in the argument.
	
	delete() and remove() can accept queue id if specified.
	
	define expire() which removes too old queue files in the specified
	queue. It expires all queue if $class unspecified.
	
	expire()::cleanup() is overhauled. queue removing is done by remove().
	
	define {set,get}_expire_limit() access methods.
	
2006/05/03

   variables
	define $use_article_summary_file_expire
	define $use_article_expire and $article_expire_limit
	define $moderate_queue_expire_limit
	fix typo: $use_admin_command_mail_function

   FML::Article 
	implement expire(), which function expires too old articles.
	modify log messages
	
   FML::Process::Distribute 
	try to expire articles once per day if enabled.

2006/05/02

   variables
	define $confirm_command_expire_limit (= 14d by default).
	
   FML::Config 
	implement as_second($key), which returns the value as seconds
	such as	86400 for '1d'.
	
   FML::Command::User::confirm 
	modified to use $confirm_command_expire_limit which value is
	converted to the integer by as_second() method of FML::Config.
	
   FML::Restriction::Command 
	changed that permit_forward_to_moderator() returns 
	("matched","ignore").

2006/04/30

   FML::Merge::FML4::RULES.txt 
	83 % checked.
	
   FML::Merge::FML4::config_ph 
	support for LOGFILE_NEWSYSLOG_LIMIT and XMLNAME

2006/04/28

   Mail::Delivery::Queue 
	fix open() mode::r -> <

2006/04/22

   7.98.12 released.

   ƥθľ(1) 2006/04/22 - 2006/04/20
	顼ꥻåȤΥߥ󥰤ѹ
	IPv6 бʬΥ顼

   FML::Process::Utils 
   FML::File::Rotate 
	FML::File::Rotate overhaul-ed. access method changed.
	
   variables
	variable name changed due tu overhaul of FML::File::Rotate.
	$log_rotate_size_limit
	$log_rotate_archive_file_total
	
   FML::Process::QueueManager 
   Mail::Delivery::SMTP 
	message modified (unified among modules)
	
   FML::Process::Flow Kernel 
	runs operation on log files (currently log rotation).
	
2006/04/21

   Mail::Delivery::SMTP 
	fix error reset timing.
	show more useful info in log message.
	
   FML::Process::QueueManager 
	log as status=deferred not status=fail when the delivery fails.

2006/04/20

   Mail::Delivery::SMTP 
   Mail::Delivery::Net::INET6 
	try to connect(2) $mta by IPv6 if (1) we can use Socket6 and (2) mta
	is not pure IPv4 syntax (Iv6 syntax or hostname).
	
	IPv6 module, which should be fully rewritten in the future, exports
	parse_mta6() and is_pure_ipv4_syntax().  rewritten to use them.
	
2006/04/18

   FML::Header::MessageID 
	$Counter -> $global_counter, easily identified as a global
	variable.
	base address is ( $article_post_address || $maintainer ).
	fix style.
	
   FML::Process::Kernel 
	logging system enabled by default
	
2006/04/17

   ߡ rewrite_message_id ᥽åɤ
	TODO: 衢̥ͣꥸʥ Message-Id: Ĥ褦ˤ롣

   FML::Header 
   variables
	define dummy rewrite_message_id() method and the rewrite rule. 
	this method does nothing by default (pass the original message
	id as itself).
	
   FML::Process::Debug 
	define logdebug()

2006/04/16

   ѿ̾ʬ䤹ʤɡ꡼˥

   FML::Filter::TextPlain 
   Mail::Bounce::DSN Postfix19991231 Qmail SimpleMatch 
   Mail::Message 
   Mail::Message::ToHTML Outline 
	nuke ambiguous method and variable name.
	num_paragraph() -> paragraph_total() (XXX see "Code Complete").
	each variable holding this return value is fixed to $total.
	
   FML::Command::User::get 
	clean up variable name style.
	
   Mail::Message::ToHTML 
	fix variable name syntax::_num_attachment ->  _num_attachments
	
   Mail::Delivery::SMTP 
	fix variable name::num_rcpt -> rcpt_total
	
   FML::Article::Spool 
	fix variable names:
	num_file -> num_files
	num_dir  -> num_dirs
	
2006/04/11

   ƻ⤷ϥޥɥ᡼νʥꥯȤ̵뤹ǥ
   쥯ƥ֤񤱤褦ˤ SPAM ̵뤹뤿ᡣ

   variables
	${article_post,command_mail}_restrictions support
	{ignore,ignore_invalid_request}.
	
   FML::Process::Distribute 
	apply filter system to avoid useless work if distribution is
	allowed. 
	
	temporarily disable logging system before calling
	is_permit_post() at filter check.

   FML::Process::Kernel 
	define log_{enable,disable}() to enable::disable logging
	system. 

2006/04/10

   ƻ⤷ϥޥɥ᡼νʥꥯȤ̵뤹ǥ
   쥯ƥ֤񤱤褦ˤ SPAM ̵뤹뤿

	: ͭʥޥɤǤʤʤ̵롣
	    ᡼ΤǰĤͭʥ᡼뤬ʤֻ֤ʤ
	command_mail_restrictions	=	reject_system_special_accounts
						permit_anonymous_command
						permit_user_command
						ignore_invalid_request
						reject

   FML::Restriction::Post 
	define ignore() and ignore_invalid_request() methods.
	
   FML::Restriction::Command 
	define ignore() and ignore_invalid_request() methods.
	assert
	
   FML::Process::State 
	define restriction_state_set_ignore_reason() and
	restriction_state_get_ignore_reason() methods.
	
   FML::Process::Command 
	enhance restriction checks for invalid contents to determine the
	action against such content.

2006/04/05

   IO::Adapter 
   IO::Adapter::File 
	trylock() (lock( { wait => TIME }) implemented
	
   Mail::Delivery::Queue 
	fix usage of logging.
	trylock() is available, too.
	validate stat() object before using it.
	mask some debug messages
	
   Mail::Delivery::SMTP 
	fix fallback algorithm::we need not do fallback for the queue already
	on the queue.
	
	bug fix loop check counting.
	bug fix queue_directry info handling.
	
	prepare several acess methods::_is_map_in_queue(),
	_set_queue_directory(), _get_queue_directory(), set_not_done(),
	get_not_done().
	
   FML::Mailer 
	modifieid to sync w:::Mail::Delivery::Queue changes.
	+ use recipient_maps as an argument to Mail::Delivery system.
	+ pass queue object to Mail::Delivery system.
	+ check if delivery is DONE or not by get_not_done().
	
   FML::Process::Kernel 
	queue_flush() takes no argument

   FML::Process::Distribute 
	modifieid to sync w:::Mail::Delivery::Queue changes.
	+ more fast lock
	+ pass log function pointers.
	+ pass queue object to Mail::Delivery system.
	+ check if delivery is DONE or not by get_not_done().

   FML::Process::QueueManager 
	modifieid to sync w:::Mail::Delivery::Queue changes.
	pass log function pointer to Mail::Delivery system.
	
2006/04/04

   Mail::Delivery::Queue 
	define set_sleep_count, get_sleep_count, set_retry_count and
	get_retry_count.
	rewritten by using them.
	
   FML::Process::QueueManager 
	queue validation logic modified.

2006/04/03

   Mail::Delivery::SMTP 
	check the number of effective MTA.
	tune retry max limit (XXX a lot of todo around this).
	fix retry handling (now we use cost penalty by rollback).
	style::not use $_xxx in loop
	
   Mail::Delivery::Queue 
	ensure lock::unlock return value
	bug fixed to lock new or lock queue file, not active queue.
	
   IO::Adapter 
	consider context switch
	
   FML::Mailer 
	enable fallback

2006/04/02

   Mail::Delivery::SMTP 
	overhaul.
	o subroutine-ify.
	o more error check and assertion.
	o fix comments. et.al.
	fix error handling (do not trap normal condition)
	
   Mail::Delivery::Queue 
	fix typo.
	check lock status.
	
   FML::Log 
	clean up input buffer (nuke \s+$)

2006/04/01

   Mail::Delivery::Queue 
	overhaul

2006/03/29

   Mail::Message::ToHTML 
	change monthly_index.html's table output in 
	_update_id_montly_index_master().
	see also fml-devel 798.
	
2006/03/26
	
   Mail::Delivery::Base 
	define [sg]et_address_validate_function()
	
   FML::Mailer 
   FML::Process::Distribute 
	use $curproc->log() as log_info and $curproc->logdebug() as log_debug
	in Mail::Delivery, by passing log_debug function pointer to
	Mail::Delivery class.
	
   Mail::Delivery::Net::INET4 INET6 
	fix arguments:
	+ connect{4,6}() accepts $mta.
	+ remove not used arguments.

2006/03/25

   Mail::Delivery::Base 
	fix comments.
	fix usage of ->log*()

2006/03/24

   Mail::Delivery overhaul (1).

   Mail::Delivery 
	fix comments.
	
   Mail::Delivery::Net::INET6 
	overhaul.
	+ more use of access methods.
	+ change method name to more proper one.
	
   Mail::Delivery::Net::INET4 
	overhaul.
	use $self->log*() instead of Mail::Delivery::Utils.
	
   Mail::Delivery::Queue SMTP 
	overhaul.
	more access method based.
	
   FML::Mailer 
   FML::Process::Distribute QueueManager 
	rewritten to use access methods to sync w:::Mail::Delivery overhaul.

2006/03/23

   Mail::Delivery::SMTP 
	if EHLO fails, try HELO.

2006/03/21

   FML::Mailer 
   FML::Process::Distribute 
   Mail::Delivery::SMTP 
	validate format of recipient within smtp transaction.
	
   Mail::Delivery::ErrorStatus 
	define {set,get}_error()
	
   Mail::Delivery::Queue 
	fix type in queue_id generator
	
   Mail::Delivery::SMTP 
	bug fix starting position in fallback process.

2006/03/20

   FML::Merge::FML4::RULES.txt 
	56.5 % verified. status and rules updated.
	
   FML::Merge::FML4::config_ph 
	fix conversion for address variables.
	add conversion of REJECT_ADDR and SKIP_FIELDS.
	fix HOST and PORT handling.
	apply _fix_path() for *_FILE variables.
	add conversion of INCOMING_MAIL_SIZE_LIMIT with ATOI suport.
	
    etc/compat/fml4/default_config.ph 
	
	by default, define ___NULL___ for the following variables:
	$PERMIT_POST_FROM
	$REJECT_POST_HANDLER
	$PERMIT_COMMAND_FROM
	$REJECT_COMMAND_HANDLER
	$REMOTE_ADMINISTRATION_REQUIRE_PASSWORD
	$USE_DISTRIBUTE_FILTER
	$FILTER_NOTIFY_REJECTION
	$FILTER_ATTR_REJECT_COMMAND
	$FILTER_ATTR_REJECT_2BYTES_COMMAND
	$FILTER_ATTR_REJECT_INVALID_JAPANESE
	$USE_ERRORS_TO
	$APPEND_STARDATE
	$AUTO_HTML_GEN
	$USE_NEW_HTML_GEN

2006/03/19

   fml 4  fml 8 ؤѴ
	56.5 % ǧ

   variables
	define $article_header_list_software
	define $mail_header_default_list_software
	$default_umask -> $system_default_umask
	
   FML::Header 
	List-Software: and X-MLServer: is set as 
	${mail_header_default_list_software} or
	${article_header_list_software} by definition.

	sort definition order: _get_header_type(), ...

   FML::Process::Distribute 
	$use_smtp_log enable/disable smtp transaction logging.

2006/03/12

   variables
	define $maintainer_signature (not used now).
	define $article_header_* and $mail_header_default_* variables.
	rewritten to use $mail_header_default_* for outgoing_*.

   FML::Process::Kernel 
	pass {mode => default} parameters to FML::Header object by default.
	
   FML::Header 
	rewrite logic to generate list-* header field to sync w:::new variable
	definitions::article_header_list* et.al.
	
   FML::Merge::FML4::Makefile 
	define printok::print_ok rules

   FML::Merge::FML4::config_ph 
	save default value for later use in evaluating default_config.ph.
	overhaul algorithm to fix path.
	changed to use _fix_path() if needed.

2006/03/06

   variables
	define $use_admin_command_mail_fucntion ("no" by default).

2006/03/05

   refactoring: use of command context object based.

   FML::Command::User::admin 
   FML::Process::Command State 
   FML::Restriction::Command 
   FML::Context::Command 
	command context information switched to use of
	FML::Context::Command object. 

   FML::Command::Admin::*
   FML::Command::User::*
   FML::Command Error 
   FML::Article::Spool 
   FML::CGI::List ML User 
   FML::CGI::Skin::Base 
   FML::Command::Auth DirUtils FileUtils Message SendFile Syntax 
   FML::Context::Command 
   FML::Fault::Address 
   FML::ML::Control 
   FML::Process::Command Configure 
   FML::Process::CGI::Kernel 
   FML::User::Control 
	$command_args -> $command_context (OBJ), method style
	changed to command_context object based.
	
   FML::Command::User::admin 
	duplicate FML::Context::Command object by object dup method
	not by myself. 
	
   FML::Context::Command 
	implement dup() method.
	
2006/02/18

   FML::User::Control 
	always update user infomation db.
	update gecos and action date if operation runs under MTA, but
	update only date in other cases.
	
   FML::User::DB 
	define add() and set()
	
   FML::User::Info 
	rename method::add(HASH_REF) -> set_header_info($address)

2006/02/15

   FML::Error 
   FML::Command::Admin::reviveml rmcl rmml 
   FML::Error::Analyze 
   FML::Error::Analyze::histgram simple_count 
   FML::ML::Control 
   FML::MTA::Control 
   FML::MTA::Control::Postfix Procmail Qmail Sendmail 
   FML::Process::Error Kernel Utils 
   Mail::Message::Utils 
	fix method name::remove -> delete
	
   Mail::Delivery::Queue 
	define delete() as an alias of remove()
	
2006/02/05

   FML::Header 
	implement raw level insert_message_id_cache() method to access
	cache more directly.
	rewritten to use it.
	
   FML::Process::Kernel 
	add a new message-id to the outgoing message fml8 generates and cache
	it in our message-id database for further loop check.
	
   FML::Process::CreateOnPost 
	ignore *-ctl and *-admin addresses as a ML one.
	implement reject_list_header_field derective.
	
   FML::Process::CreateOnPost 
	comments on _is_ml_address() logic: if you create xxx-ctl or
	xxx-admin ML, it should be allowed.

   variables
	$createonpost_sender_restrictions += reject_list_header_field

2006/02/04

   CREATE-ON-POST implemented.
	CREATE-ON-POST ϡưŪˣ̤ͣפȤߤǤ

	¸ߤʤ̤ͣƤ fault fault handler 
	̤ͣԤʤɥ쥹Ͽ fault ǹԤʤ
	ᥫ˥ȤƤ fml4 ߥ졼 fallback Ʊ

		ml fault	¸ߤʤ̤ͣʤ顢̤ͣ

		address fault	ɥ쥹ϿƤ뤫Ĵ
				̤ϿξˤϿ򤹤
				(Ϥ᤿ץ fault )

   variables	
	define CREATE-ON-POST function.
	
   FML::Config 
	context switch safe
	fix comments (FNF)
	
   FML::Header 
	return <> for error mail sender
	
   FML::PCB 
	context switch safe
	
   FML::ML::Control 
   FML::MTA::Control 
	implement createonpost function dispatcher
	
   FML::MTA::Control::Postfix 
	Postfix specific CREATE-ON-POST operations.
	
   FML::MTA::Control::Qmail 
	qmail_install_alias() install ~fml::.qmail-* files not qmail_setup()
	method.
	
   FML::Process::Utils 
	define several methods around $0 handling, address fault handling and
	context switching.
	+set_process_title()
	+get_process_title()
	+set_address_fault()
	+get_address_fault()
	+is_address_fault()
	+set_address_fault_list()
	+get_address_fault_list()
	+context_switch_get_context()
	+context_switch_set_context()

   FML::Process::Distribute 
   FML::Fault::Address 
	address fault handling
	
   FML::Process::Configure 
	use $curproc->{ml_name,ml_domain}() method.
	$command_args includes ml_domain info.
	
   FML::Process::Kernel 
	initialize context information when constructor runs.
	
   FML::Process::Switch 
	prefer $hints if specified for argv, ARGV and options.
	support context switching in executing new (child) process.
	
   FML::Command::Admin::rmml 
	use $command_args->{ ml_name } and $command_args->{ ml_domain };
	
   FML::Command::Admin::newml 
	use $command_args->{ ml_name } and $command_args->{ ml_domain };
	not udpate alias relates information if update-alias = no specified.

2006/02/03

   FML::Config 
	define {set,get}_context() method.

2006/01/24

  Ƽƥȡۡ

2006/01/19

  ȥ쥷ԡs񤯡񤯡񤯡

  fml4 emulator tool added. 

2006/01/15

  ȥ쥷ԡs񤯡񤯡񤯡

   FML::Process::Utils 
	implement policy_ignore_this_message(), policy_reject_this_message().

2006/01/13

   FML::Process::Utils 
	is_config_cf_exist() evals the statements.
	
	implement is_fml8_managed_address() which checks the given address is
	either of fml8 managed ml addresses.

2006/01/12

   ɥ: Reply-To: hacks 򤤤񤤤Ƥޤ

   FML::Demo::Calendar
	on the format of files in ~/.schedule/ directory.

2006/01/09

   FML::Header 
	add rewrite_subject_tag() equal to rewrite_article_subject_tag().
	rewrite_reply_to_enforce_article_post_address()
	fix comments.
	
   variables
	$article_header_rewrite_rules supports more 2 rules:
	+ rewrite_subject_tag
	+ rewrite_reply_to_enforce_article_post_address

2006/01/08

   FML::Merge::FML4::config_ph 
	add prototype to translate PERMIT*_FROM and REJECT_*_HANDER
	combinations.

2006/01/07

   variables
	+chaddr_command_operation_mode  	=       automatic
	+subscribe_command_operation_mode       =       automatic
	+unsubscribe_command_operation_mode     =       automatic

   FML::Command::User::subscribe chaddr unsubscribe 
   FML::Command::Message 
	move location of reseting compare_level.
	
	rewritten to call FML::Command::Message->send_notification() not
	direct reply_message() calls in Command::User:::class.
	
	send_notification() works differently according to the value of
	$XXX_command_auth_type variable.
	
   FML::Command::User::confirm 
	Accoding to ${command}_command_operation_mode, it works differently.
	
	1. XXX_command_operation_mode == automatic, fml8 do subscription
	et.al. automatically.
	
	2. XXX_command_operation_mode == manual, notify "the request is
	confirmed" to $maintainer, who do actual subscription et.al.
	
   FML::User::Control 
	use reply_message() in chaddr operations to send back log.

2006/01/04

   fml 4 -> 8 Ѵ롼ץΥХ

   FML::Merge::FML4::config_ph 
	change diff() return value to ($config, $diff), ARRAY of HASH_REF's.
	add debug codes.
	
   FML::Merge::FML4::Rules 
	regen::converter fixed.
	
   fml4to8::configtest.pl 
	follow change of diff() return value.
	croak() if eval() fails.
	
   gen_rules.pl 
	2nd generation prototype::check diff between default_config.ph and
	config.ph and translate rules bsaed on config.ph vlaues.
	
	fix copyright of module header template.
	
	modify private function names.
	fix bug of output indent level.
	croak() if unknown rule found.
	
	modify initialization logic.
	add missing comments.
	check the current key in appling if() conditions.

   modules
	updated to File::MMagic 1.25

2006/01/02

   FML::Merge::FML4::RULES.txt 
	new keyword system.
	fix some rules.
	
   FML::Merge::FML4::Rules 
	regen

2006/01/01

   ޤƤǤȤޤǯɸ official release ʤ
   ɡ
    fml 4 ľܥߥ졼ʳǤƤĤʤ

   remove not-used modules.
	Class::NamedParms
	Class::ParmList
	AsciiDB::*

   FML::Merge::FML4::config_ph 
	pass $config to translation*() methods.
	support MODERATOR_MEMBER_LIST, ADMIN_LOG_DEFAULT_LINE_LIMIT.
	implement translate_not_yet_implemented().
	clean up.
	modify comments.

2005/12/31

   fml 4 to 8 СΥ롼롼ϴְäƤޤ
   档ߵ٤ľ뤫ʡ

2005/12/19

   ǥ졼⡼ɤΥХȤ

   FML::Process::Distribute Kernel 
	change is_permit_post() retruns action string not number to
	support 3 permit/ignore/deny states.
	
   FML::Moderate 
	remove moderation queue if distribution succeded.
	
   FML::Restriction::Post 
	permit_forward_to_moderator() returns (matched, ignore)

   ǥǡΥ᡼ʤƤ̿ɲá
   ͤѤˤäƤϰñʥ᡼ޥϤȤɤ(侩Ϥʤ)

   FML::Credential 
	implement is_moderator_member()
	
   FML::Restriction::Post 
	implement permit_moderator_member_maps().

2005/12/18

   ǥ졼⡼ɤδŪʼԤʤ

   variables
	fetchfml_queue_dir = $var_dir/mail/queue-fetchfml
	define moderation definition::enable, queue_dir

   Mail::Delivery::Queue 
	enhanced dup_conent() to take two arguments.
	
   FML::Process::Switch 
	NewProcess() takes hints as args to overload configuration in
	a new process. 
	
   FML::Process::Utils 
	comment on incomplete dup_command_args
	
   FML::Restriction::{Command,Post}
	implement permit_forward_to_moderator.
	
   FML::Command::User::confirm 
	pass _confirm_id information to called process.
	support "moderate" command.
	
   FML::Process::Kernel 
	workaround::unlock() call lock object via IO::Adapter if saved
	object undefined.
	
	bug fix loop check functions to check enabler variable definition.
	
   FML::Moderate 
	o fix comments.
	o if (defined ) { .. open .. }
	
   FML::Confirm 
	implement id(), set(), get()
	
   FML::Command 
	add more debug codes

2005/12/17

   FML::Process::FetchFML Switch 
	not need to pass $args to FML::Process::Switch::NewProcess() which
	fake $args by $curproc->dup_curproc_args().
	
   FML::Process::Utils 
	implement dup_curproc_args() template

2005/12/16

   FML::Command::User::digest 
	fix duplicated definition.

2005/12/10

   FML::Credential 
   IO::Adapter::PCRE 
	pass hints to IO::Adapter to return matched address.

2005/12/09

   IO::Adapter 
   IO::Adapter::PCRE 
	pcre: support

2005/12/01

   FML::Process::Utils 
	define credential() method

   FML::Command::Admin::changepassword addrecipient digest 
                        off on addmember 
   FML::Command::User::admin chaddr digest off on subscribe unsubscribe 
   FML::Command::Auth 
   FML::ML::HomePrefix 
   FML::Process::Command Distribute Kernel QueueManager 
   FML::Restriction::Command Post 
   FML::Filter Error 
   FML::Process::Digest Error Utils 
	use $curproc->credential();
	
   FML::Credential 
	use $address_compare_function_domain_matching_level


2005/11/19

   ɥơ
	쥷԰褦ˤƤߤޤ
	FML Х֥פΥ쥷ԥ쥯򻲹ͤˤƥ쥷Ԥɲ
	Ǥ̤ΤΤ̤Ƚ񤤤Ƥޤ

   fml/utils/bin/listup_recipes.pl 
	generate list of recipes

2005/10/29

   variables
	change naming of $article_thread_outline_rules. fix comments.
	add $article_thread_outline_*

   ɥơ
	FML Х֥פΥ쥷ԥ쥯򻲹ͤˤƥ쥷Ԥɲ

2005/09/17

   FML::Filter::TextPlain 
	is_signature() and is_citation() switched to
	Mail::Message::String based.
	
   FML::Article::Thread 
	eval use ..
	
   FML::Article::Outline 
	check method existence before calling.
	rename method names.

2005/09/13

   FML::Article 
   FML::Article::Outline 
   FML::Process::Distribute 
	changed to FML::Article->add_outline($tdb_args) style.

2005/09/11

   åɤޤβ¤

   variables
	rename: $*_overview -> $*_outline
	
   Mail::Message::Thread 
	define DESTROY()
	
   Mail::Message 
   Mail::Message::Outline 
   Mail::Message::Language::Japanese::Outline 
	move thread outline generator codes to Mail::Message::Outline.
	correct error messages (Mail::Message).
	
   FML::Process::Distribute 
   FML::Article::Outline 
	move thread outline generator to FML::Article::Outline

2005/09/01

   FML::Article::Thread 
	remove obsolete codes.
	
	private-ify::psw_*() -> _psw_*().
	
	use article_summary cache as coudl as possible. To clean up
	around the codes, some codes are separeted to _generate_summary().
	
	fix comments and documents.
	
	strict check of $status code.
	
	implement get_overview($id, $thread_args). It returns string holding
	article short summaries of a thread for this article $id.
	
   FML::Process::Distribute 
	article_thread_overview support.
	
   variables
	preliminary definitions for article thread overview.
	+article_thread_overview_greeting
	+article_thread_overview_greeting_en
	+article_thread_overview_greeting_ja
	+article_thread_overview_rules
	+use_article_thread_overview

2005/08/31

   Mail::Message 
	implement new method prepend(), append() and
	whole_message_body_tail(). 
	fix charset() logic to handle plural header field lines.
	
   Mail::Message::DB 
	implement find_head_key().
	add() updates article_summary database, too.
	
   FML::Article 
	implement append() and prepend() methods.
	
   FML::Process::Utils 
	langinfo_get_charset() uses Content-Type::information as a hint
	when Accept-Language::is not specified.

2005/08/27	

   Mail::Message::DB 
	define open() and close()
	
   FML::Filter::TextPlain 
	use $msg->message_chain_as_array_ref() instead of $mp->{ next } form.
	
2005/08/25

   Mail::Message::Thread ToHTML 
	renamed::db->analyze() => db->add()
	
   Mail::Message::DB 
	renamed methonds:
	o analyze  -> add
	o db_open  -> _db_open
	o db_close -> _db_close

2005/08/23

   IO::Adapter 
	add PostgreSQL support.
	add LDAP support.
	
   IO::Adapter::MySQL 
	$sql_server -> $sql_servers.
	enhanced to handle a list of dsn.
	fix comments.
	
   IO::Adapter::DBI 
	change dsn to form "DBI:$driver:dbname=$database;host=$host".
	always $dbh->commit();
	enhanced to handle a list of dsn and to retry sql servers if needed.
	DBI->connect with { AutoCommit => 0 } option.

   FML/Command/Admin::reviveml
	revive a removed ML.

   FML::CGI::ML 
	add & enable reviveml in cgi

   FML::Process::FetchFML 
	handle $fetchfml_pop_servers
	
   FML::MUA::POP3 
	remove message when the message retrival succeeded.

   FML::Log 
	$log_syslog_host -> $log_syslog_servers

   variables
	$log_syslog_host -> $log_syslog_servers
	$sql_server -> $sql_servers

2005/08/20

   FML::Filter::MimeComponent 
   FML::Header::Subject 
   Mail::Message::Language::Japanese::Subject 
   Mail::Message::Subject 
	cut_off -> cutoff
	
   FML::Config 
   FML::Config::Menu 
	merge_to_file -> merge_into_file
	
   FML::Merge::FML4::config_ph 
	var_dump -> dump_variable
	
   FML::Error 
	deluser() -> remove_address()

2005/08/19

   Mail::Message::DB ToHTML Utils 
	convension::from_to_name -> from_address_to_name
	
   FML::Filter 
	convert_to_mail_address($list); -> address_resolve($list);
	
   FML::Command::Admin::log 
	$curproc->output_{set,get}_print_style().
	
   FML::Header::Subject 
	bug fixed (forgotten import of module ;-)
	
   FML::Process::Kernel 
   FML::Process::CGI::Kernel 
	set_print_style() -> output_set_print_style()
	
   FML::Process::Utils 
	which_map    -> map_to_term
	which_map_nl -> map_to_term_nl
	
	convert_to_mail_address -> address_resolve
	
	set_print_style  -> output_set_print_style
	get_print_style  -> output_get_print_style
	
   FML::User::Control 
	which_map    -> map_to_term
	which_map_nl -> map_to_term_nl
	
	set_print_style  -> output_set_print_style
	get_print_style  -> output_get_print_style
	
   FML::Process::FetchFML 
   FML::MUA::POP3 
	FNF::pick_up_queue -> pickup_queue
	
   FML::Article::Summary 
   FML::Header 
   FML::Command::DataCheck 
   FML::Filter::TextPlain 
   FML::Header::Subject 
   FML::Process::Error Kernel State 
   Mail::Bounce::DSN Exim Postfix19991231 Freeserve GOO Qmail
                 SimpleMatch Smtpfeed
   Mail::Delivery::Queue 
   Mail::Bounce 
   Mail::Message::DB Address 
	XXX_clean_up() -> XXX_cleanup()

2005/08/18

   FML::ML::Control 
	check ::etc::passwd only in the case of default domain.
	follow changes of ml_home_dir_removed_path() arguments.
	
   FML::Process::Utils 
	change ml_home_dir_removed_path() and
	ml_home_dir_find_latest_removed_path() argument order:
	e.g. ml_home_dir_removed_path($curproc, $ml_home_prefix, $ml_name);
	
	removed_path format is changed to $ml_name.YYYYMMDD.COUNT style.
	
   FML::Header::Subject 
	exclude explicit code e.g. euc-jp and use
	Mail::Message::Charset instead. 

   FML::MTA::Control::Postfix 
	fix typo

2005/08/17

   FNF: adjust method naming convension.

   FML::Article::Thread 
   FML::Command::Admin::thread 
   FML::Command::HTMLify 
   FML::Process::Distribute 
	$curproc->thread_db_args(); -> $curproc->article_thread_init();
	
   Mail::Message::Encode 
	str_dump() -> dump_string()
	
   FML::CGI::Calendar Thread 
   FML::CGI::Skin::Base 
   FML::Command::Admin::log 
   FML::Command::SendFile 
   FML::Process::CGI::Kernel 
	langinfo_XXX() e.g. langinfo_get_charset()...
	
   FML::Command::Admin::addmoderator addadmin delmoderator deladmin 
                        addrecipient digest off on subscribe unsubscribe 
                        addmember 
	follow changes of FML::User::Control::userXXX() -> user_XXX()
	
   FML::User::Info 
	import_from_mail_header() -> add() with args changed (nuke $curproc).
	
   FML::User::Control 
	align methond name user_XXX::changed userXXX() -> user_XXX().
	follow FML::User::Info changes (import_from_mail_header() -> add()).
	
   FML::MTA::Control::Postfix Procmail Qmail Sendmail 
	template_files_dir_for_newml() -> newml_command_template_files_dir();
	
   FML::Cache::Ring 
	import_data_from() -> add().
	
   FML::ML::Control 
	template_files_dir_for_newml() -> newml_command_template_files_dir()
	removed_ml_home_dir_path()     -> ml_home_dir_removed_path()
	
   FML::Process::Fake 
	change {set,get}_emul_XXX() to internal use (_method)
	
   FML::Process::Kernel 
	follow changes of FML::Cache::Ring.
	
	use langinfo_XXX().
	
	moved lang_to_charset() and remove_too_old_files_in_dir() from
	FML::Process::Utils to here and change lang_to_charset() and
	remove_too_old_files_in_dir() to module internal use.
	
   FML::Process::Utils 
	removed_ml_home_dir_path        -> ml_home_dir_removed_path
	find_latest_removed_ml_home_dir -> ml_home_dir_find_latest_removed_path
	template_files_dir_for_newml    -> newml_command_template_files_dir
	
	set_language_hint        -> langinfo_set_language_hint
	get_language_hint        -> langinfo_get_language_hint
	set_charset              -> langinfo_set_charset
	get_charset              -> langinfo_get_charset
	set_accept_language_list -> langinfo_set_accept_language_list
	get_accept_language_list -> langinfo_get_accept_language_list
	
	thread_db_args   -> article_thread_init
	
	changed to internal use.
	language_of_html_file -> _language_of_html_file
	
	move lang_to_charset() and remove_too_old_files_in_dir() to
	FML::Process::Kernel.

2005/08/15

   FML::Log 
	use sprintf instead of "${name}[${pid}]:" to avoid error in
	perl 5.6.x.

2005/08/10

   FML::Process::CGI::Kernel 
   FML::Process::Calendar Addr Alias ConfViewer Command 
		 Distribute Configure Digest DocViewer Error HTMLify 
		 Kernel Emulate Utils Fake PGP FetchFML 
	config_files_XXX() -> config_cf_files_XXX() to clarify the meaning.

   FML::Process::Emulate 
	FNF: 	generate_config_cf_from_config_ph -> 
		config_cf_generate_from_config_ph
	
   FML::Error 
   FML::Error::Analyze 
   FML::Error::Analyze::histgram simple_count 
	module internal variables are changed.
	o summary() -> get_summary()
	o removal_address() -> get_address_to_be_removed()
	
   FML::Config::Menu 
   FML::Filter::External::clamscan 
   FML::Filter::MimeComponent 
   FML::Process::Flow Kernel 
	s/temp_file_path/tmp_file_path/g;
	s/tmp_files_clean_up/tmp_file_cleanup/g;
	
   FML::Process::Flow Kernel 
	s/incoming_message_queue_clean_up/incoming_message_cleanup_queue/g;
	
   FML::Process::State 
	current_process_ml_name_init() -> current_process_init().
	
   IO::Adapter::DBI 
	$sql_QUERY -> $sql_query_QEURY

   variables	
	$sql_QUERY -> $sql_query_QEURY

2005/08/09

   FML::Filter 
   FML::Filter::MimeComponent 
	FNF: rename read_filter_rule_from_file() -> read_filter_rule_file().
	
   FML::MUA::POP3 
   Mail::Delivery::Queue 
	FNF: content_dup2() -> dup_content()

   Mail::Message::ToHTML 
	fixed function name:
	o htmlfy_rfc822_message() -> htmlify_rfc822_message().
	o html_begin() ->  html_start()

2005/08/08

   FML::Process::Kernel 
	FNF: if (defined $queue) { $queue->open( ... );}
	
   FML::Header 
	fix comments.
	fix $addr_for_post -> $article_post_address.
	enforce use of "return $value" form.

2005/08/06

   Mail::Message::Utils 
	define get_time_from_header() method (moved from Mail::Message::DB).
	
   Mail::Message::ToHTML 
	switched to use Mail::Message::Utils::get_time_from_header.
	
   Mail::Message::DB 
	overhaul:
	[sg]et_db_module_name() -> [sg]et_db_module_class().
	get_time_from_header() -> _get_time_from_header().
	mov get_time_from_header() to Mail::Message::Utils class.
	clean up. remove not used variable.
	fix db_close().
	fix comments.
	
   FML::Process::PGP 
	bug fix: -h -> -l

2005/08/03
   7.98.3 English document revised.

2005/07/01

   FML::Process::Kernel 
	garbage collection runs only when valid ml_home_dir found.
	
2005/06/27
   7.98.3 Japanese document revised.

	ܸΥɥȤ򥪡Сۡ뤷ޤ	

2005/06/04

   7.98.2 bug fix method naming convension (FNF).

   FML::MUA::POP3 
	bug fix::check queue_id value itself, too
	
   FML::Process::Kernel 
	define _get_debug_level(), moved from FML::Process::Utils and
	made private.
	
   FML::Process::Fake 
	switched to use FML::Process::Switch::NewProcess().
	bug fix pcb handling.

   FML::Process::Kernel QueueManager Error 
	$curproc->OBJ_METHOD() form (FNF):
	[sg]et_event_timeout() -> event_[gs]et_timeout().
	
   FML::CGI::User 
	moved get_address_list(), called only at this module, from
	FML::Process::Utils to here. Also, it is changed to the private
	method; get_address_list() -> _get_address_list().
	
   FML::Process::CGI::Utils 
	move get_ml_list definition, used only here, to this module.
	also it is changed to private.
	
   FML::Process::Utils 
	remove get_ml_home_prefix_maps() definition, which is not used.
	
	move definitions to proper module::get_ml_list(), get_address_list()
	and get_debug_level().
	
   FML::Mailer 
   FML::Article::Sequence 
   FML::Command::SendFile 
   FML::Config::Menu 
   FML::Process::Addr Alias Calendar Command ConfViewer 
                 Configure Digest Distribute DocViewer Error FetchFML 
                 Flow HTMLify PGP State Kernel Emulate Fake Utils
   FML::Process::CGI::Kernel 
	method naming fixed to $curproc->OBJ_METHOD() form (FNF).
	get_article_id                 -> article_get_id
	set_article_id                 -> article_set_id
	config_files_append_to_list    -> config_files_append
	append_to_config_files_list    -> config_files_append_to_list
	get_config_files_list          -> config_files_get_list
	load_config_files              -> config_files_load
	set_config_files_list          -> config_files_set_list
	verify_sender_credential       -> credential_verify_sender
	get_current_process_ml_name    -> current_process_get_ml_name
	set_current_process_ml_name    -> current_process_set_ml_name
	fix_perl_include_path          -> env_fix_perl_include_path
	parse_exception                -> exception_parse
	parse_incoming_message         -> incoming_message_parse
	clean_up_incoming_queue        -> incoming_message_queue_clean_up
	get_cui_menu                   -> menu_get_cui_config_file_path
	get_gui_menu                   -> menu_get_gui_config_file_path
	resolve_ml_specific_variables  -> ml_variables_resolve
	outgoing_message_open_channel  -> outgoing_message_cache_open
	open_outgoing_message_channel  -> outgoing_message_open_channel
	inform_reply_messages          -> reply_message_inform
	prepare_file_to_return         -> reply_message_prepare_template
	clean_up_tmpfiles              -> tmp_files_clean_up
	reset_umask                    -> umask_reset
	set_umask_as_public            -> umask_set_as_public

2005/06/03

   7.98.2 queuing system revised.

	塼󥰥ƥ

	POP/IMAP ˤ MTA+ML ߥ졼򥵥ݡ (fetchfml)

	μȤǡߤΥ塼󥰤ӥå奷
	ब뤫ɤʬޤܹ¤ϡΤޤޤǤ
	ǡܼŪˤѤäƤޤ󤬡γĥɬפǤ

   FML::PCB 
	fix dump_variables() for context based switching.
	define {set,get}_current_context().

   fetchfml
	FML::Process::FetchFML added.
	FML::MUA::POP3 added.
	etc/command_line_options modules install.cf.in 
		add fetchfml definitions.

   variables
	define fetchfml related variables.	
	$fetchfml_*_hook added.

   Mail::Delivery::Queue 
	fix args and comments of *_dir_path().
	implement local_{dir,file}_path(), content_dup2(), open() and close().
	queue_id = second + microsecond + pid + counter.
	now other module can extend class for local use.
	
   FML::Process::Switch 
	alloc shared memory area in $args (shared_hash_get() uses).
	implement NewProcess().
	
   FML::Process::Kernel 
	incoming queue system revised.
	o move some log to logdebug.
	o not use queue file directly. instead use $queue->open() method.
	o use incoming_message_set_current_queue() instead of
	mail_queue_set_incoming_queue().
	o clean up incoming queue removal code.
	
   FML::Process::Utils 
	implement helper functions for incoming cache::queue system.
	o incoming_message_set_current_queue()
	o incoming_message_get_current_queue()
	o incoming_message_stack_queue_for_removal()
	o incoming_message_remove_queue()
	
	shared memory for IPC between parent and child $curproc processes.
	o shared_hash_get()
	
   FML::Process::State 
	remove mail_queue_set_incoming_queue($queue),
	mail_queue_get_incoming_queue().
	XXX alternative methods available in FML::Process::Utils.
	
   FML::Article 
	switched to use $curproc->incoming_message_get_cache_file_path();

2005/06/02

   MIME-Base64 removed.

2005/05/31

   FML::Process::Kernel 
	"my $path = $obj->cache_file_path();" is wrong. old implementation
	saves the FML::Cache::Ring file path for later use. But it is
	ambiguous. When many processes (> modules) runs simultaneously, $path
	may be overwritten by the next content.  Instead, use $queue_file
	since $queue_file (queue::incoming::ID) is unique.
	
   FML::Process::Kernel Utils 
   FML::Restriction::Post Command 
	fix naming convension (FNF).
	set_incoming_message_cache_file_path -> 
		incoming_message_set_cache_file_path
	get_incoming_message_cache_file_path -> 
		incoming_message_get_cache_file_path

2005/05/30

   Mail::Message::ToHTML 
   FML::Filter::TextPlain 
	use Mail::Message::Encode not MIME::Base64.
	
   Mail::Message::Encode 
	switch to use MIME::Base64::Perl not MIME::Base64 module.
	define raw_decode_{base64,qp}().

2005/05/29

	: PGP/GPG Żҽ̾򸵤ˤǽˤ

   variables
	o define PGP related variables
		pgp_config_dir gpg_config_dir path_gpgv path_gpgsplit
	o define editors: vi, ng, mule, emacs, xemacs

	+path_gpgv
	+path_gpgsplit

	remove $gpg_config_dir, $pgp_config_dir.
	
	define $article_post_{auth,encrypt}_{pgp,gpg}_config_dir and
	${admin_,}command_mail_auth_{pgp,gpg}_config_dir.
	
	add $fmlpgp_*_hook

   etc/command_line_options
   etc/modules 
   etc/install.cf
	define fmlpgp fmlpgp5 fmlpgpe fmlpgpk fmlpgps fmlpgpv fmlgpg
	fmlgpgv.

   bin/ utilities added.
	bin/*	
	etc/command_line_options modules 
	etc/install.cf.in 

	add fmlgpg fmlgpgv fmlpgp fmlpgp5 fmlpgpe fmlpgpk fmlpgps
	fmlpgpv.

   FML::Process::PGP 
	For convenience, create a conventional named dir (e.g. pgp-admin) and
	symlink to the current style dir.
	For example::pgp-admin@ -> pgp-admin-command-mail-auth
	
   FML::Restriction::Post 
	define check_pgp_signature, which permits article post when the
	article has proper PGP::GPG signature.

	For example:

	article_post_restrictions =	reject_system_special_accounts
					check_pgp_signature
					reject

	setup and reset environment more strictly.
	etc/{pgp,gpg}-$role style naming ("_" -> "-").

   FML::Command::User::admin 
   FML::Restriction::Command 
	${admin,}command_mail_restrictions support "check_pgp_signature" rule.
	Both restrictions uses same rule name but which needs different
	keyring directories. So, we need to handle carefully the context of
	two restrictions.
	
   FML::Process::State 
	definie command_context_set_try_admin_auth_request(),
	command_context_reset_try_admin_auth_request() and
	command_context_get_try_admin_auth_request() to handle context of
	$*command_restrictions.
	
2005/05/26-27

	fml-devel  fml 7.98.1 Ȥ롣
	åɥƥľ 7.99.x ͽꡣ

   variables
	o define $use_article_spool (as ${ues_spool:-yes}).
	o log: define syslog related variables
	o command:
		$use_command_mail_reply_preamble = yes
		$use_command_mail_reply_trailor  = yes

   ErrorStatus 
	FML::Filter not use this module.
	
   FML::Article 
	use_spool -> use_article_spool
	
   FML::Log 
	preliminary syslog extension support.
	
   FML::Article::Summary 
	FNF.
	$fh -> $rh
	
   FML::Command::Auth 
	log errors more.
	
   FML::Command::User::subscribe unsubscribe 
	$curproc->allow_reply_message() -> $curproc->is_allow_reply_message().
	
   FML::Process::DocViewer 
   IO::Adapter::AtomicFile 
   Mail::Message::ToHTML 
   FML::Command::DirUtils 
   FML::Config::Convert 
   FML::Filter::MimeComponent 
   FML::Config::Tiny 
   FML::Header::MessageID Subject 
   FML::MTA::Control::Procmail 
   FML::Process::DocViewer 
   IO::Adapter::AtomicFile 
   Mail::Message::ToHTML 
	FNF: not use str.str

   FML::Filter::External::clamscan 
	fixed to work.
	
   FML::MTA::Control::Postfix 
	not use str.str.
	white space clean up of alias file path.
	_remove_postfix_style_virtual() -> remove_postfix_style_virtual().
	
   FML::MTA::Control::Sendmail 
	fix the comment of virtual file.
	not use str.str.
	_remove_postfix_style_virtual() -> remove_postfix_style_virtual().
	
   FML::Process::Configure 
	fix comments (FNF).
	$curproc->allow_reply_message() -> $curproc->is_allow_reply_message().
	
   FML::Process::Flow 
	remove _xxx() methods among modules::rename _XXX() to sysflow_XXX().
	
   FML::Process::Utils 
	fix comments (FNF).
	remove is_safe_syntax(), which is not used.
	rename allow_reply_message() to is_allow_reply_message().
	
   Mail::Delivery 
	fix typo::EMTP -> ESMTP.
	
   Mail::Bounce::Exim Freeserve GOO Qmail Smtpfeed 
	clean up.
	FNF.
	use self->address_clean_up($addr, $addr) to clean up address if could.

   FML::Demo::Calendar 
	fixed::_Calender -> _calender
	
   FML::IPC::Queue 
	set umask(077) in creating a tmp file.
	
   FML::MTA::Control 
	rename _remove_postfix_style_virtual() to
	remove_postfix_style_virtual(), which is used among plural
	modules. 
	not use str.str form.
	
   FML::Process::Command 
	$use_command_mail_reply_preamble toggles off::on to show the preamble
	of command reply.  $use_command_mail_reply_trailor toggles command
	processing summary.
	
   FML::Process::Distribute 
	more strict error handling.
	more comments.
	
   FML::Process::Fake 
	fix comments.
	fix error handling.
	
   FML::Process::CGI::Kernel 
	remove the duplicated code.
	use Mail::Message::Date instead of `date`.
	fix comments.
	
   FML::Restriction::Command 
	croak() -> logerror().
	fix comments.
	
   Mail::Delivery::Queue 
	add randam factor into exponential back off.
	back off is upper limited by 4000 sec.
	
   Mail::Delivery::Net::INET4 
	set timeout for socket(2).
	
   Mail::Message::Encode 
	use Jcode always.
	
   Mail::Message::MH 
	sort the output for a,b,c style input.

   FML::Filter::External Header Size TextPlain 
   FML::Filter::ErrorStatus 
   FML::Filter 
	use FML::Filter::ErrorStatus instead of ErrorStatus.

   FML::Process::Kernel 
	fml-devel YYYYMMDD -> fml $version (7.9x.y-YYYYMMDD)
	
	modified to use incoming_message_header(), temp_file_path() et.al, to
	avoid raw descrptions.
	
	bug fix config.cf search algorithm.
	
	defne sysflow_XXX() methods used in FML::Process::Flow.
	
	not use str.str form.
	
	clean up.
	
   Tie::JournaledDir 
	fix comments, error messages.
	
   Tie::JournaledFile 
	fix comments, error messages.
	more defined() checks.
	
2005/05/01

	ߤΥɤ fml 7.98.1 (cvs tag fml-7-98-1)롣
	ʤåɤΥɤ fml 7.99.1 Ȥ롣

2005/01/19

   FML::Merge::FML4::RULES.txt 
   FML::Merge::FML4::Rules 
	
	update rules
	
   FML::Process::QueueManager 
	logwarn() -> logdebug() for "... try later." message.

2005/01/01

   FML::Header 
	handle X-Stardate::and Precedence: header field
	
   FML::Process::Error 
	override Reply-To::and Errors-To: header fields to rewrite the address
	the error message sent to in forwarding.
	
   FML::Process::Kernel 
	enhanced general reply message system.
	o add X-Stardate:, Precedence::and Errors-To: header fields.
	o enhance Reply-To::field handling.
	
   FML::Merge::FML4::config_ph 
	system_timezone = +0900
	
2004/12/30

   variables	
	define $outgoing_mail_header_x_ml_name
	
   FML::Header 
	rewrite_errors_to use $outgoing_mail_header_errors_to to rewrite
	Errors-To: header field ($maintainer by default).

   FML::Merge 
	cosmetic changes: $VARIABLE format, "\n".
	
   FML::Merge::FML4::RULES.txt 
   FML::Merge::FML4::Rules 
	fix definitions
	
   FML::Merge::FML4::config_ph 
	enhanced to handle variables properly.
	o Errors-To:
	o time zone.
	o handle old definitions e.g. subject tag, old variables in fml 2 age.
	o "ignore" operation print out comments.
	o fix content of *_dir and *_map variables.

2004/12/29

   FML::Process::Kernel 
	verify config.{cf,ph} existence
	
   FML::Merge::FML4::config_ph 
	handle use_fml8_value definitions.
	translate outgoing_address.

   FML::Merge::FML4::RULES.txt and FML::Merge::FML4::Rules
	convert OUTGOING_ADDRESS
	care for a few old configurations

2004/12/23

   FML::CGI::Calendar 
   FML::Process::Calendar 
   FML::Demo::Calendar
   Calendar::Lite is removed.
	move Calendar::Lite to FML::Demo::Calendar since this module needs
	FML::* class.

2004/12/19

   FML::Process::Emulate 
	emulate fml4's mead.pl and msend.pl
	
   FML::Process::Kernel 
	$debug_module_regexp_list restricts debug regions.

2004/12/18

   ǥХå⡼ɤǥνѤ褦ˤޤ
	
   variables
	define $use_debug to control log messages.

   FML::Process::Kernel 
	logdebug() works if debug = yes defined.

2004/12/15

   Mail::Delivery::Queue 
	randomize queue list more in fair-queue mode.
	implement clean_up() method
	
   FML::Process::QueueManager 
	log delay time in success of delivery.
	
   FML::Process::Utils 
	implement remove_too_old_files_in_dir() method.
	
   FML::Process::Kernel 
	remove too old files in tmp/ and incoming queue.

   FML::Merge::FML4::RULES.txt 
	fix/update rules
	
   FML::Merge::FML4::Rules 
	regen.

   FML::Merge::FML4::config_ph 
	support more special conversion rules

2004/12/09

   FML::Merge 
	enhance arguments of translate() call to pass $diff.
	
   FML::Merge::FML4::config_ph 
	FML::Merge::FML4::Rules based version.
	implement fallback mechanism to support complicated cases.
	
   FML::Merge::FML4::RULES.txt 
	keywords changed
	
   FML::Process::Emulate Kernel 
	run fallback to generate config.cf when config.ph is newer
	than config.cf.

   etc/compat/fml4
	use -i option to generate default_config.ph
	
   FML::Merge::FML4::RULES.txt 
	fix rules
	
   FML::Merge::FML4::Rules 
	rules fixed.
	
   FML::Merge::FML4::config_ph 
	enhance special handlings to support more rules

2004/12/08

   Mail::Message 
	implement message_chain_as_array_ref() method.

2004/12/05

   FML::Article Digest Error Filter Mailer Merge Parse 
   FML::Article::Sequence 
   FML::Command::Auth Filter HTMLify SendFile
   FML::Command::User::admin 
   FML::Error::Analyze 
   FML::Error::Analyze::histgram 
   FML::Process::Command Configure Distribute Error Kernel
			QueueManager State Utils
   FML::Process::CGI::Kernel 
   FML::Restriction::Command Post 
   FML::User::Control 
	define logdebug() to disable log messages.
	modified to use proper log$role().
	bug fix log messages if needed.


2004/11/25

   fml4  fml.pl  fml8  fml.pl 촹ǽȤ
	/usr/sbin/sendmail (sendmail ߴޥ)ߤʰǤ͡

	fml.pl (fml8) ư줿 config.cf Ĥʤȡ
	̤ͣΥۡǥ쥯ȥˤ config.ph  config.cf 
	ȤȤ fml8 ץȤưޤ

	եμưѴǽϰϤϸ¤Ƥޤfml4 
	˥塼ǽ(ñ)Τʤ鼫ưѴƲȤʤ褦
	ˤʤäƤޤ

   variables
	defind $compat_*
	
   FML::Install 
	define install_compat_dir() method to install
	etc/compat/ dir for fml4 compatibility codes.
	
   FML::ML::Control 
	implement install_config_cf() method to install only config.cf.
	
   FML::Command::Admin::mergeml 
	clean up around set_target_system()
	
   FML::Process::Utils 
	o mkdir()::bug fix defined check for specified mode.
	o implement default_config_cf_filepath() method.
	
   FML::Merge 
	speculate_default_config_ph_path() returns specified location of
	default_config.ph if ::usr::local::fml::default_config.ph not found.
	
   FML::Process::Emulate Kernel 
	implement fallback function in resolve_ml_specific_variables().
	
	when resolver fails, resolve_ml_specific_variables calls fallback if
	specified.
	
	FML::Process::Emulate uses this fallback mechanism to generate a
	config.cf from fml4's config.ph file at the first time.

2004/11/24

   FML::Command::Admin::mergeml 
	generate merge() method by separeting codes.

2004/11/23

   FML::Process::Kernel 
	fix white space cosmetics.
	
   FML::Process::Emulate 
	re-implement fml.pl as fml4 emulator which emulates fml8's
	article_post or command_mail functions by following the arguments.
	
	TODO::when config.cf not exists, convert fml4 configurations to fml8
	ones on the fly.

2004/11/21

   ˥塼ѹǽˤ
	ޤ CUI ǤƤʤȤꤢȤ뤱ɽʳ

   variables
	define $fml_default_{cui,gui}_menu for configuration interfaces.

   installer
	install menu
	
   FML::Config 
	dump_variables can return results as HASH_REF if get_diff_as_hash_ref
	mode specified.
	
	implement merge_to_file() method to dump hash values into
	configuration file.
	
   FML::Process::Kernel 
	import default_{cui,gui}_menu from main.cf name space.
	
   FML::Process::Utils 
	implement get_{cui,gui}_menu() methods.
	
   FML::Config::Menu 
	fix menu path from testbed one.

2004/11/14

   Mail::Message::ToHTML 
	add monthly thread index

   FML::Restriction::Post 
	define $article_post_article_thread_lifetime anyway (hmm, valid?)

   variables
	article_post_article_thread_lifetime ?
		åɤ³Ǥû֤Τ
		From: ˴ؤ餺ƤץΡɻ֡ɤꤹ롣
		Ǥ⡢ѿ̾Ǥʤ

2004/11/03

   äȥ꡼˥

    etc/dot_htaccess 
	add dummy configuration for convenience:
	AuthUserFile "/dev/null" by default.

   FML::Process::Distribute 
	rename private method::_distribute -> _deliver_article_prep

2004/10/31

   ꡼˥

   Mail::Message::Thread 
	bug fix comment::fixed return value
	
   FML::Article::Thread 
	sort, clean up.

2004/10/28

	(ޤǤǤ)ƻˡåɤ³Ǥû 
	From: ˴ؤ餺ƤץɲäޤϿ
	ʳΥɥ쥹顢Ȥž褫ǤƤȤ
	ˤǤ

	ǥեȤǤϡȤޤ(Ū꤬ɬ)

   FML::Restriction::Post 
	implement "check_article_thread" operation.
	Itt allows post from someone who reffers articles within one weeks.
	
   FML::Article 
	update article message-id cache if article is saved successfully.
	
   FML::Header 
	bug fix and enhance reference extranction logic.

2004/10/27

   variables
	add $article_message_id_cache_dir variable.
	allow check_article_thread in $article_post_restrictions.

2004/10/09

   CGI skin selection
	CGI θɤ٤褦ˤޤ
	ޤΤȤmenu.cgi δconfig.cgi 
	fml8 ǥեȤΥơ֥١ΤΤǤ

   FML::Process::CGI::Kernel 
	show "back to top" menu in old fashion skin case.
	
   FML::CGI::Menu is removed. 

   FML::CGI::Admin::Menu 
   FML::CGI::MLAdmin::Menu 
   FML::CGI::Admin::MenuOld 
   FML::CGI::Skin::Base OldFashion Wizard 
	implement plural GUI skins.
	
	create FML::CGI::Skin::* class. remove FML::CGI::Menu.
	FML::CGI::Menu -> FML::CGI::Skin::Base and create sub classes
	inheriting Base.
	
    etc/modules
	Menu -> MenuOld for *::menu.cgi

2004/10/06

   ɥȤΥХۡ

   libexec/loader.in 
	chop -> chomp
	
   FML::Process::Kernel 
	modify configuration error check:
	o validate the value of $maintainer and $ml_address variables.
	o disable checks for *.cgi processes.

2004/10/03

   newdomain  rmdomain ޥ
	newdomain  rmdomain ޥɤ/ե
	ѡߥå

   FML::Process::Utils 
	implement chown() method for convenience.

2004/09/29

   󥹥ȡν

   etc/
	define new variable $group_writable_config_dir.  make configure
	controll $group_writable_config_dir and $primary_ml_home_prefix_map.
	
   FML::Install 
	set up $group_writable_config_dir.

2004/09/06

   fml 4  8 Ѵ륳Сν

   FML::Merge 
	replace "::tmp::default_config.ph" with
	speculate_default_config_ph_path() method.
	
   FML::Command::Admin::mergeml 
	launch warning on site_init.ph and site_force.ph if needed.
	
2004/09/03-04

   塼󥰥ƥν 

   FML::Process::Kernel 
	implement is_process_time_limit() method to warn that end of process
	life time comes soon.
	
   Mail::Delivery::Queue 
	bug fix queue strategy info file hanling.
	implement log(), {set,get}_log_function().
	log more and more.
	log messages in removing queue
	is_valid_queue() returns ok if the specified queue exists in active or
	deferred queue.
	
   FML::Process::QueueManager 
	set log function for qmgr.
	reset queue list fter rescheduling.
	pull up $max_count to 100.
	resolve lock confliction in queue manipulation.
	fix message::remove too old queue ...
	targets cleanup() operatites are non active queues.
	
   FML::Command::Admin::mailq 
	print only valid queue
	show all entries not only within active queue.

2004/08/30

   2004/08 μפѹϥ塼󥰥ƥγĥ/Ǥ
	ĹٲǱѤȤ file system full Ū˵
	Ȥä¸򷫤֤ƤޤޤΤȤפǤ

	ְäƤ̿ŪʤȤʤΤǡƤ
			
	[TODO]
	⤦ޤä塼νν֤ʤɸɬפޤ

	deferŪdefer/active뤿hold塼
	Υ塼ͥ椹Ȥ

2004/08/20

   Mail::Delivery::Utils 
	eval q{}

2004/08/15

   塼󥰥ƥγĥ
	e.g. ٱξ exponentail back off 򤪤ʤ

   FML::Process::QueueManager 
   Mail::Delivery::Queue SMTP 
	implement voluntary sleep::wakeup queue mode switching.
	o implement queue management utilities.
	o move queue from active to deferred if delivery failed.
	o rename *_strategy to *_policy
	o overhaul::clean up internal style.
	
   FML::Process::QueueManager 
	specify queue strategy to get proper queue list.
	currently we use "fair-queue".
	bug fix condition that empty queue or not
	
   Mail::Delivery::SMTP 
	log $recipient_limit info if limit != 1000
	
   Mail::Delivery::Queue 
	implement basic queue management strategy.
	
   FML::Article 
	log more info in failing over.
	
   FML::Process::Distribute 
	warn "not queue flush due to MTA fatal error.".
	
2004/08/14

   塼󥰥ƥ򤤤

   FML::Process::Kernel 
	clean up mail queue periodically.
	ensure initial value to be defined.
	
   FML::Process::QueueManager 
	process 2 requests in one process (temporary solution).
	XXX-TODO::enhance qmgr more cleverly.
	
	change arguemnts for new() and send().
	implement template of cleanup() method.
	
	change cleanup() logic:
	get all queue id list and remove too old invalid queue.
	
   Mail::Delivery::Queue 
	clean up new().
	
	list() can take an argument for $class if needed.
	
	implement is_valid_queue() and get_class_list() methods.
	
	implement list_all(), last_modified_time().
	remove get_class_list().
	
   FML::Filter::External 
   FML::Process::{Distribute,State}
	temporal failure when external filter process timeouts.
	
	if external filter process timeouts, notify it to $curproc layer, and
	distribution process exit(75) for temporal failure.
	
	implement filter_state_{set,get}_tempfail_request().
	
   FML::Command::Admin::mailq 
	show number of requests if requests > 0
	
   IO::Adapter::File 
	back up sequence file before operation.
	rollback file itself in emergency if could.

2004/08/12

   FML::Process::Kernel 
	define default subject used if unspecified
	
2004/07/27

   FML::Install 
	implement message_nl() and modified to use it.
	
   FML::Process::Kernel 
	log error message::exit(EX_TEMPFAIL) to retry later.

2004/07/25

   FML::Command::HTMLify 
	rewritten to use $curproc->thread_db_args() method for code sharing.
	
   FML::Process::Utils 
	thread_db_args() returns htmlifier parameters with subject tag hints.
	
   Mail::Message::ToHTML 
	handle subject tag separetely in string escaping.
	
   Mail::Message 
	implement get_print_mode()
	
   Mail::Delivery::SMTP 
	override print mode of Mail::Message object to "raw" in fallbacking.

2004/07/23

   OVERHAUL ...

	FML::Confirm 
		modified to clarify that db is opened.
		ensure initialized value.
		fix comments (FNF).
		
	FML::Error 
		fix comments (FNF).
		clarify error messages.
		
	FML::Filter 
		fix comments (FNF).
		clarify messages.
		
	FML::Header 
		fix comments (FNF).
		ensure initial value.
		defined check more.
		
	FML::Install 
		bug fix existence of destination file.
		
	FML::PCB 
		use "return ..." always.
		
	FML::Article::Sequence 
		fix comments (FNF).
		use ::::o if could.
		
	FML::Article::Spool 
		$dir -> $entry
		fix comments.
		
	FML::CGI::ML 
		fix comments.
		fix error messages.
		
	FML::Command::DirUtils 
		fix typo of error messages.
		
	FML::Command::Admin::subscribe 
		fix comments (FNF).
		ensure initial value.
		
	FML::Command::Admin::subscribe 
		fix comments (FNF).
		ensure initial value.
		
	FML::Command::Admin::unsubscribe 
		fix comments (FNF).
		ensure initial value.
		
	FML::File::Rotate 
		remove not used variables.
		
	FML::Filter::MimeComponent 
		fix comments.
		fix error messages.
		
	FML::Filter::Size 
		ensure initial value.
		
	FML::Filter::TextPlain 
		fix comments.
		use ::::o if could.
		
	FML::Header::MessageID 
		fix comments.
		use "return ..." always.
		
	FML::Header::Subject 
		fix style (FNF).
		use ::::o if could.
		
	FML::IPC::Message 
		check input data.
		
	FML::Process::Command 
		fix comments and error messages.
		
	FML::Process::Error 
		fix comments.
		ensure initial value.
		check $maintainer value.
		
	FML::Process::QueueManager 
		add qmgr::prefix to log messages.
		
	FML::Command::HTMLify 
		fix comments.
		use ::::o if could.
		
	FML::Command::Admin::changepassword 
		fix error messages
		
	FML::Command::Admin::mergeml 
		fix error messages
		
	FML::Process::CGI::Param 
		fix error upcall
		
	FML::Restriction::Base 
		fix comments.
		
	FML::User::Control 
		fix error messages.
		ensure initial value.
		
	FML::User::Info 
		fix typo
		
	Mail::Message::Date 
		fix comments.
		modify variable name to clarify the role.
		
	Mail::Message::Encode 
		bug fix arguments.
		
	FML::Process::CGI::Kernel 
		fix typo.
		show nl error message if could.
		
	FML::Process::Utils 
		fix comments, style and add loop label, ... (FNF).
		ensure initial value.
		
	FML::IPC::Queue 
		change constructor argument (but not used yet).
		fix error messages.
		fix comments.
		
2004/07/18

    imported im-147.

2004/07/11

   ХۡҤĤŤ»Ǥ

   Calendar::Lite 
	fix comments.
	fix "a"."b"  -> "ab" form.
	
   IO::Adapter 
   IO::Adapter::AtomicFile DBI File MySQL 
	fix comments.
	explicitly use "return".
	modify error messages.
	ensure initialized value.

2004/07/07

   Mail::Message::Address 
	put back initializtion code to 1.3 one.
	
2004/07/06

   FML::Command::User::subscribe unsubscribe 
	always ignore arguments of {subscribe,unsubscribe} command
	mail requests to ensure more correct confirmation.
	
2004/07/01

   FML::Process::Distribute 
   Mail::Message::ToHTML 
	reduce error messages

2004/06/30

   Сۡ» (2004/06/27 - )

   FML::Command::Admin::digest digestoff digeston on spool 
   IO::Adapter 
   IO::Adapter::Array ErrorStatus NIS UnixGroup 
   Mail::Bounce 
   Mail::Bounce::DSN Exim FixBrokenAddress Freeserve GOO 
                 Postfix19991231 Qmail SimpleMatch Smtpfeed 
   Mail::Bounce::Language::Japanese 
   Tie::JournaledDir JournaledFile 
	overhaul:
	fix comments and messages. validate initial value.

2004/06/29

   FML::Process::Distribute 
	mark by stop_this_process() when submission denied.

   Сۡ
	FML::Command::Admin::chaddr off 
	FML::Command::User::admin digest unsubscribe 
	Mail::Message::Address 
	Mail::Delivery 
	Mail::Delivery::ESMTP ErrorStatus QueueUtils 
	Mail::Delivery::Net::INET4 INET6 
		[overhaul]
		o fix comments.
		o fix messages/error messages.
		o use //o if could.
		o specify initial value.

2004/06/27

   FML::Filter::External::clamscan 
	fix typo
	
   FML::Cache::Journal 
	overhaul:
	o fix comments.
	o defined() check.
	
   FML::Cache::Ring 
	overhaul:
	fix comments.
	x.y -> sprintf(format, x, y)
	fix return value.
	change variable name to be more readable.
	
   FML::Command 
	overhaul:
	fix comments.
	use ::::o if could.
	bug fix notice_cc_recipient handling.
	reverse command_mode check code.
	
   FML::Command::Auth 
	fix comments.
	quotemeta search key.
	
   FML::Command::Syntax 
	fix comments.
	my (@var) = ... style.
	
   FML::Command::Admin::edit 
	fix comments.
	warn() -> ui_message().
	
   FML::Command::Admin::get 
	fix comments.
	bug fix reset of $command_args values.
	
   FML::Command::Admin::list 
	fix comments.
	change private method name.
	modify sanity check a little.
	
   FML::Command::Admin::log 
	fix comments.
	change default::tail -100 by default.
	
   FML::Command::User::chaddr 
	bug fix::implement verify_syntax().
	
   FML::User::Control 
	tune IO::Adapter::close() timing.
	
	use TERM_NL(map) style not which_map_nl() where TERM_NL() can handle
	charset dependent map name translation.
	
   FML::Process::Utils 
	re-implement which_map()
	
   FML::Process::Kernel 
	TERM_NL() macro support in message translation.

   Mail::Message 
   Mail::Delivery::Queue SMTP 
   FML::Process::Distribute 
	queue system debug::trace number of bytes written.
	
   Mail::Delivery::Queue 
	validate if message object supports write_count() method.
	
   IO::Adapter::AtomicFile 
	close() allows 0 byte file e.g. in the case so that all content is
	removed.
	
   IO::Adapter::File 
	bug fix delete():
	o not apply quotemeta() for key.
	o autoflush(1)
	o check the number of matching, return error if no any matched line.

2004/06/25

   FML::Filter::External::{bogofilter spamc clamscan}
   FML::Process::Distribute State 
	preliminary support of build-in virus/spam checker.
	
   FML::Command::Admin::dir 
	clean up.
	handle CUI case (ok?)
	
   FML::Process::QMail 
	nuke old style FML::Log use.

2004/06/23

   Mail::Message::Subject 
	bug fix::delete_dup_reply_tag() runs always. (fml-devel: 711)

2004/06/17

   ѥåΤѹäȴְäƤ _o_
   FML::Install 
	fix message of $default_config_dir installation when
	install_root specified. 
	fix install path of $ml_spool_dir when install_root specified. 

2004/06/14

  ᡼륭塼󥰤λȤߤ򡢤äΤˤޤ

	ȤСե륷ƥब줿ǽʸ¤ꡢ
	Ԥʤ褦ˤʤޤ

	Τɤʳ file system full ˤʤäˤä
	MTAfmlƤֽФݤΥȥ饤fmlȤˤʤɤ
	Ŭʤޤ	

	路ϡ塼ȥꥢΥȥ֥륷塼ƥ󥰤
	񤤤ƤޤȤƲ


   Mail::Message::ToHTML 
	bugfix @indexs use my $indexs = \@indexs;
	
   FML::Process::Kernel 
	defined($header) check before calling update_message_id_cache.

2004/06/13

   Mail::Message::ToHTML 
	set $main::opt_mimedecodequoted at
	_print_li_filename(),_format_safe_header()
	
   Mail::Message::DB 
	null check $key at _db_set()
	
   Mail::Message::ToHTML 
	select index files using @indexs

2004/06/09

   FML::Header 
   FML::Process::Kernel 
	separate message-id duplication check and cache updating.
	cache updating when process ends.

2004/06/08

   ѥåƥΤ˥󥹥ȡĥ
	ѥåݤˡɤŪʥǥ쥯ȥ
	٥󥹥ȡ뤹ɬפʤ顢

		make install install_root=/some/where

	ȤäƲ/ Τ /some/where ʲ
	󥹥ȡ뤵ޤ󥤥󥹥ȡ뤵ƥե
	ޤƤѥ /some/where ʬʤ֤ΤΤǤ

	: ¾ΥƥǤ

		make install prefix=/some/where
		make install DESTDIR=/some/where (äBSDʿͤǤ礦)

	ʤɤȤ뤳Ȥ⤢ޤѥåƥͤˤ
	طʤȡ configure --prefix Ȥޤ路Ȥ
	ͳˤꡢprefix ǤϤʤɤȤäƤޤ

   install.pl.in 
   FML::Install 
	enhanced to enable "make install install_root=::prefix" for
	package system. 

	install_root is the prefix that is prepended to the pathnames
	of installed files.
	
	[IMPORTANT]
	
	In a lot of systems, "make install prefix=::prefix" is used.
	But it is confusing against usage of othre software e.g.
	".::configure --prefix=::prefix".  So, we avoid this confusion
	to use other keyword, which is same as Postfix.

2004/06/02

   Mail::Bounce::SimpleMatch 
	add yahoo.co.jp
	change ybb.ne.jp end pattern

2004/05/28

   FML::Article 
	When we fail to create article file, we try to save the original
	message at least.

2004/05/25

   ᡼륭塼ȥ顼ꥫХγĥ

   loader
	define global variable $ERROR_EXIT_CODE for emergency handling.
	run exit($ERROR_EXIT_CODE) if error.
	
   FML::Process::Kernel 
	implement exit_as_tempfail()
	
	firstly queue in. Secondarly parse it after writing of the queue is
	verified.
	
	implement clean_up_incoming_queue(), which is run at the last of
	process.
	
   FML::Process::QueueManager 
	modify log message format a little.
	$q->valid() changed to $q->valid_active_queue().
	
   FML::Process::Flow 
	call $process->clean_up_incoming_queue();
	
   FML::Process::Distribute 
	exit(EX_TEMPFAIL) when we cannot update article sequence.
	
	if setrunnable() for the current article queue failed,
	try to deliver it on the fly anyway.
	
	new FML::Filter $curproc;
	bug fix my() usage.
	change log message around queue id.
	
   FML::Process::State 
	fix comments (FNF).
	
	add methods:
	filter_state_set_error()
	filter_state_get_error()
	mail_queue_set_incoming_queue()
	mail_queue_get_incoming_queue()
	
   FML::Article::Sequence 
	more strict write error tracking
	
   FML::Article 
	more strict write error handling.
	
	
   FML::Cache::Ring 
	import data from file directly.
	Actually, link(2) $src to cache file.
	
   Mail::Delivery::Queue 
	check write error more strictly.
	
	define incoming queue.
	implement new method::incoming_file_path(), incoming_dir_path().
	
	not set transport (not touch transport info file) by default.
	
	more rigid write error tracking.
	
	rename valid() -> valid_active_queue() to clarify the role.
	
   Mail::Message 
	\*HANDLE -> *HANDLE{IO}.
	imlement error*().
	write error track.
	
   IO::Adapter::File 
	more strict write error tracking.
	sequence_increment verifies if the value is writtern.
	
   IO::Adapter::AtomicFile 
	check temporary file is non-zero.

   variables
	define variables around article_spam_filter and article_virus_filter.
	
   FML::Filter 
	preliminary external spam::virus checker support.
	new() takes $curproc as an argv.
	use filter_state_set_error() to save determined action for later use.

   FML::Process::Command 
	new FML::Filter $curproc;
	
2004/05/22

   HOOK̾ܤ롣

   variables
	error_analyzer_day_limit -> error_mail_analyzer_day_limit
	error_analyzer_cache_dir -> error_mail_analyzer_cache_dir
	error_analyzer_cache_type -> error_mail_analyzer_cache_type
	error_analyzer_cache_mode -> error_mail_analyzer_cache_mode
	error_analyzer_cache_size -> error_mail_analyzer_cache_size
	error_analyzer_function_select_list -> error_mail_analyzer_function_select_list
	error_analyzer_function -> error_mail_analyzer_function
	error_analyzer_simple_count_limit -> error_mail_analyzer_simple_count_limit
	
   FML::Process::Command 
	add $command_mail_filter_{start,end}_hook hooks.
	rename $command_*_hook -> $command_mail_*_hook.

   FML::Error 
   FML::Command::Admin::error 
   FML::Error::Analyze::histgram simple_count 
   FML::Error::Cache 
	rename variable::$error_* -> $error_mail_*

   FML::Process::Error 
	rename hooks::$error_*_hook -> $error_mail_analyzer_*_hook
	
   FML::Process::Distribute 
	add $article_post_XXX_hook but $distribute_XXX_hook is available too.
	add $article_header_rewrite_{start,end}_hook
	add $article_filter_{start,end}_hook
	
   FML::Process::Digest 
	rename hook::digest_*_hook -> article_digest_*_hook


2004/05/21

   FML::Process::Distribute 
	shorten lock period in delivery

2004/05/19

   FML::Process::Switch 
	getopts case SENSITIVELY
	
   FML::Process::Distribute 
	not process _deliver_article() when error set by stop_this_process().
	
   FML::Process::Kernel 
	-o overwrite options runs twice to ensure overwrite.
	
   variables
	$use_article_delivery        =       yes
	$article_delivery_transport  =       smtp
	
   Mail::Delivery::Queue 
	handle transport infomation.
	fix comments.

2004/05/18

   ƥ⥭塼󥰥١ذܹԤ
	ǡ٤Ƥ٥᡼륭塼˽񤯥ѥˤʤä

   FML::Article 
	bug fix::avoid duplicated initialization.
	change $curproc->{ article }->{ KEY } style to method-based.
	
   FML::Process::Distribute 
	enable mail queue based delivery
	
   Mail::Delivery::Queue 
	support lock({ lock_before_runnable => yes }) extension.
	
	FML::Process::Distribute needs such option to own the current article
	delivery by itself to distinct it from queue flush system on other
	processes.
	
   FML::Process::State 
	implement set_article_id(), get_article_id(),
	smtp_server_state_set_error() and smtp_server_state_get_error().

2004/05/17

   ƥ Сۡ롢ĤŤ

   Mail::Delivery::Utils 
	implement {set,get}_map_status()
	ensure numeric value

   Mail::Delivery::SMTP 
	implement fallback when it fails to send the mail to all MTA's.
	failed message is inserted into mail queue for later delivery retry.
	
	Also, shorten retry count $max_loop_count since fallback is
	implemented now.
	
	define {set,get}_last_command(), {set,get}_send_command_status().
	modified to use them.
	
	rename::socket_is_connected -> is_socket_connected
	
   FML::Process::Distribute 
	enable delivery fallback
	
   FML::Mailer 
	pass params $smpt_servers and $smtp_recipient_limit into
	delivery system

2004/05/16

   ƥ Сۡ

   FML::User::Control 
	enhance print_userlist() for command mail.
	
   Mail::Delivery::SMTP Utils 
	rollback if DATA error occurs.
	rename _get_*() -> get_*(), _set_*() -> set_*() since private methods
	should not be shared over modules.
	remove private method.
	s/_rollback_map_position/rollback_map_position/g;
	s/_reset_mapinfo/reset_mapinfo/g;
	
   Mail::Delivery::Utils 
	not export _smtplog

   Mail::Delivery::SMTP 
	clean up message, log.
	fix retry logic.
	define $MAP_ERR_OPEN.
	log status of done or not (log only yet).

   FML::Command::Admin::list 
	remove is_cgi related codes.

2004/05/02

   variables
	+html_archive_default_charset
	+html_archive_charset_ja
	+html_archive_charset_en
	+path_bogofilter           = @BOGOFILTER@
	+path_clamscan             = @CLAMSCAN@
	
   FML::Process::Utils 
	remove language_default().
	language_of_html_file() return $html_archive_default_charset.

   ޥɤɲ(о򤷤䤹뤿)
	admindel
	moderatoradd
	moderatordel

2004/05/01

   оΤΥ桼楳ޥɤ򿧡ɲä롣			
		add2active
		add2actives
		add2member
		add2members
		add2recipient
		add2recipients
		addactive
		addactives
		addmember
		addmembers
		addrecipient
		addrecipients

   FML::Header 
	modify List-* header message and condition a little.

2004/04/30

   ޥɤΤ긷顼å

   FML::Command::Admin::{digest,off,on}
	more restrict error checks.
	
   FML::Command::Admin::changepassword 
	more restrict error checks.
	fix rewrite_prompt().
	
   FML::Command::User::admin 
	call command specific rewrite_prompt() if could.
	
   FML::User::Control 
	return error messages more.
	call croak() if critical error.

2004/04/27
	
   variables
	define $etc_dir and fixed to use it.
	newml command creates $etc_dir.

   IO::Adapter θ API 򾯤ѹ
	IO::Adapter ¦ quotemeta() οۤ򤹤Ȥʤ
	Ϥ줿 $regexp 򿮤ΤǡƤӽФ¦ǹθʤȤʤ 

   IO::Adapter 
	use $regexp as itself, not quotemeta()-ify.

   FML::Process::Debug 
	move quotemeta($regexp) from IO::Adapter to here.
	compare domains case insensitively.
	
   FML::ML::HomePrefix 
	bug fix search logic.
	move quotemeta() from IO::Adapter to here.
	
   FML::Credential 
	implement is_same_domain().
	move quotemeta() from IO::Adapter to here.
	
   FML::Process::Utils 
	method-ify some module internal functions.
	bug fix search logic of ml_home_prefix.
	move quotemeta() from IO::Adapter to here.
	
   FML::User::DB 
	move quotemeta() from IO::Adapter to here.
	
   FML::Process::Kernel 
	fix comments.
	use $str->charcode_convert_to_external_charset(), remove
	hard-coded 'jis'.
	
   FML::Command::Auth 
	bug fix search logic.
	move quotemeta() from IO::Adapter to here.
	
   FML::Header::Subject 
	remove _delete_subject_tag().
	method-ify delete_subject_tag().

2004/04/23

   BUG FIX: ѥɥեνХ

   FML::Command::Auth 
	bug fix: we need to touch etc/passwd-admin file firstly.

2004/04/22

   ޥɥ᡼ֻ򡢤äŤ

   FML::Command::User::confirm 
	when unsubscribe command, stop the current process since
	no more processing is required.
	XXX ? hmm, wrong in some cases e.g. unsubscribe + guide.
	XXX   but ignore it ;-)
	
   FML::Process::Command 
	check $context if it is well defined. if ok, call command. 
	check value by command_context_get_normal_stop() to stop this
	process. 
	
   FML::Process::State 
	command_context_init() returns empty HASH_REF where it includes valid
	command as the first valid argument.

	define command_context_set_normal_stop(),
	command_context_get_normal_stop(). 

   FML::Article::Sequence 
	bug fix::need open() before getline()
	
2004/04/21

   FML::Process::Utils 
	bug fix mkdir()::str to octal handling bug

2004/04/20

   FML::Command::Admin::error 
	-O algorithm= option

   [BUG FIX] makefml ǥ顼ǤΤľ
	ʤե TYPO Ǥ

2004/04/18

   variable name clean up:
	_list -> _select_list

	s/cgi_language_list/cgi_language_select_list/;
	s/cgi_menu_address_map_list/cgi_menu_address_map_select_list/;
	s/error_analyzer_function_list/error_analyzer_function_select_list/;
	s/template_file_charset_list/template_file_charset_select_list/;

	   FML::CGI::List 
	   FML::Command::Admin::error 
	   FML::Process::CGI::Kernel Utils 

   FML::PCB Config 
   FML::Process::State 
	preparation of context switch (preliminary. not yet implemented)

   FML::Restriction::Base 
	remove regexp() method, which not used.
	fix description.

2004/04/17

   log rotation 褦ˤ

	   variables
		define $log_ratate variables
	
	   FML::File::Rotate 
		modified to current fml8 style.
	
	   FML::Process::Utils 
		implement log_rorate()
	
	   FML::Process::Kernel 
		run $curproc->log_rorate() lastly
	
   File::* 饹ݤ롣

   FML::Process::Kernel 
   FML::Cache::Ring 
   File::CacheDir is removed
	imported into FML::* once. File::CacheDir -> FML::Cache::Ring
	
   FML::IPC::Queue 
	use queue on memory by default.

2004/04/15

   Mail::Message 
	Content-Type case-insensitive in _data_type()
	
   File::CacheDir 
	IO::Adapter based sequence operation.

2004/04/13

   FML::Article::Sequence 
	bug fix variable initialization.
	
   FML::IPC::{Message,Queue}
	implement basic handling code of queues on file system.

   FML::IPC::Queue 
	implement rollback()

2004/04/11

   IO::Adapter γĥ
	å sequence 갷εǽ IO::Adapter ذܤ

   IO::Adapter 
   IO::Adapter::File 
   File::SimpleLock 
	import lock mechanism from File::SimpleLock class. Now IO::Adapter
	provides lock() and unlock() metohds though file map only is
	supported.
	
   FML::Article::Spool 
   FML::MTA::Control::Postfix Procmail Sendmail 
   FML::Process::Utils 
	implement copy() and append() methods $curproc provides to remove
	File::Utils class.
	
   FML::Process::Kernel 
	IO::Adapter based lock system

   IO::Adapter 
   IO::Adapter::File 
	implement methods suitable for sequence file operation.
	+ sequence_increment()
	+ sequence_replace()
	
   FML::Article::Sequence 
   FML::Digest 
	switch File::Sequence to IO::Adapter based sequence operation

2004/04/02

   FML::Process::Utils 
	define fml_owner_address()
	
   FML::Process::Error Kernel 
	fix reply_message() system to handle smtp_sender properly.
	moify libexec::error to forward mail which smtp sender is fml_owner().
	
   Calendar::Lite 
	show events with , separator

2004/03/31

   ľ򤷤åɥƥؤ롣

   etc/modules
	switch to FML::CGI::Thread (purge old thread module)
	
   FML::CGI::Thread 
	check existence of $ml_name value.
	use Japanese title.
	
   FML::CGI::Menu 
   FML::Process::CGI::Kernel 
	move config.cgi specific methods run_*() from
	FML::Process::CGI::Kernel to FML::CGI::Menu.

   FML::CGI::Menu 
	use cgi.config.$key as message translation
	
   FML::Article::Thread 
   FML::CGI::Thread 
	modify message output engine.
	enable close operation.
	
   Mail::ThreadTrack is removed.
	Mail::ThreadTrack is obsoleted.

   FML::Command::Admin::thread 
   FML::Process::Distribute Switch 
   FML::CGI::ThreadTrack 
	Mail::ThreadTrack is obsoleted. remove related codes.

2004/03/29

   FML::Command::Admin::thread 
	list sub command do not run print_one_line_summary().
	fix typo.
	
   FML::Article::Thread 
   FML::CGI::Thread 
	preliminary implementation of thread GUI.

2004/03/28

   åκƹ

   Mail::Message 
	implement methods to detect the end of thread:
	has_closing_phrase()
	set_closing_phrase_rules($rules)
	get_closing_phrase_rules()
	
	implement one_line_summary($params) and summary($params) to return
	summarized content.
	
   Mail::Message::String 
	implement is_citation(), is_signature().
	
   Mail::Message::MH 
	check if the sequence is positive value.
	
   Mail::Message::Thread 
	implement get_thread_data(), get_thread_member_as_array_ref().
	
	define new db::thread_status article_status
	
	implement new methods::set_thread_status(), get_thread_status(),
	set_article_status() and get_article_status().

   Mail::Message::DB 
	implement get_thread_data() which return thread data around the
	specified key.
	
	define new db::thread_status article_status
	
	implement new methods::set_thread_status(), get_thread_status(),
	set_article_status() and get_article_status().
	
	bug fix handling of range expanded by Mail::Message::MH module.
	
   Mail::Message::{DB,Thread} 
	define {set,get}_article_summary() and article_summary db to handle
	article summary easily.
	
   FML::Process::Distribute 
	move details of thread manipulation to FML::Article::Thread as could
	as possible.
	
   FML::Header::Subject 
   Mail::Message::Subject 
	fix usage of Mail::Message::Language::Japanese::Subject.
	
   FML::Article::Thread 
	re-implemented for further plan to purge Mail::ThreadTrack.
	
   FML::Command::Admin::thread 
	re-implemented. currently FML::Article::Thread based one.

2004/03/24

   Mail::Message::DB IMPLEMENTATION TODO ToHTML 
	clean up campaign around thread function.
	rename function name:
	o thread_summary        -> get_thread_summary
	o tohtml_thread_summary -> get_tohtml_thread_summary
	o msg_time              -> get_time_from_header

2004/03/23

   etc/command_line_options 
   FML::Command::Admin::spool 
   FML::Process::Utils 
	try to allow -O key=value command line options. Internally each
	function uses cui_command_specific_options() to get the command
	specific options.

   etc/command_line_options 
   FML::Command::SendFile 
   FML::Command::Admin::get 
   FML::Process::Kernel Utils 
	allow CUI(fml,makefml) to send messages.
	this function disabled by default.
	fml and makefml can use --allow-send-message --send-to=ADDRESS
	option for it.
	
   FML::Command::DirUtils 
	modified for "--allow-send-message --send-to=ADDRESS" option.


2004/03/20

   FML::Merge 
   FML::Merge::FML4::List 
   FML::Merge::Config 
	switched to FML::Merge::Config based coding.

2004/03/15-17

   fml4  fml8 ΤΤȾưѴġ
   implement basic fml4 to fml8 converter.

	: Ѵ롼ϡޤޤ塼˥󥰤ɬס

   FML::Merge::* 
	implement preliminary config.cf translator.

   FML::Merge 
	tune key output order.
	postpone some variables e.g. *_HOOK.

   FML::Merge::FML4::config_ph 
	bug fix article_subject_tag conversion rule
	oops, fix missing escapes
	
   FML::Merge::FML4::Config 
	install some files to be used continuously e.g. seq, summary,
	log, ...

   FML::Command::Admin::newml 
	implement {set,get}_force_mode().
	modified to use it.
	
   FML::Command::Admin::merge 
	disable_include_files() -> disable_old_include_files()

   * several bug fixes

   FML::Credential 
	run _reconfigure in constructor, too.
	delay $config evaluation

   IO::Adapter::File 
	modify touch() to use FileHandle not IO::File

   FML::Process::Distribute 
	implement toggle of filter function by $use_article_filter

2004/03/14

  ޥɥ᡼ޤľʤΣ  

  variables
	fix $command_mail_restrictions by using new rules:
	permit_anonymous_command, permit_user_command rules.
	
   FML::Process::Kernel 
	remove permit_command().
	
   FML::Process::State 
	implement the following methods:
	restriction_state_init()
	restriction_state_set_deny_reason()
	restriction_state_get_deny_reason()
	restriction_state_reply_reason()
	error_message_set_count()
	error_message_get_count()
	
	change some code to "... if $debug".
	
	implement command_context_set_ml_name() and
	command_context_get_ml_name().
	
	This is preliminary codes for more extension so that we need
	to care authentication differs among ML's when we enhance
	command processor for listserv emulation.

   FML::Process::Distribute 
	use restriction_state_reply_reason() to shling code size.
	clean up.
	
   FML::Process::Command 
	modify command analyze logic. currently, apply
	$command_mail_restrictions for each command line, if ok,
	execute the commmand via FML::Command.
	
   FML::Restriction::Post 
	modified to use restriction_state_*().
	move permit_anonymous_command_mail() to FML::Restriction::Command.
	
   FML::Restriction::Command 
	implement permit_user_command() and permit_anonymous_command()
	methods. 

	inherit methods from FML::Restriction::Post class if needed.
	
	implement permit_admin_member_maps and
	check_admin_member_password in FML::Restriction::Command class.
	
	modify $admin_command_mail_restrictions to switch to use them.

   FML::Command::User::admin 
	fix comments (FNF).
	renamed to _apply_{old,new}_admin_command_mail_restrictions().
	
	implement permit_admin_member_maps and
	check_admin_member_password in FML::Restriction::Command class.
	
	modify $admin_command_mail_restrictions to switch to use them.

2004/03/13

   makefml/fml extension
	makefml --mode=user --allow-send-message $command $ml ...
	    fml --mode=user --allow-send-message $ml $command ...

	¾ΥץȤȼCGI顢subscribeunsubscribe
	confirmꤿΤȤͤơʲΥץɲä

	    fml --mode=user --allow-send-message $ml subscribe ADDRESS

	¹ԤСޥɥ᡼subscribeƱɤư
	confirm᡼ ADDRESS 褦ˤʤ롣

	fmlޥɤmakefmlޥɤadmin⡼ɤΥޥɤ¹Ԥ
	󥿡եγĥΥݥȤϥ桼⡼ɤ 
	subscribe ޥɤ¹Բǽˤ뤳Ȥǥޥɥ᡼Υߥ
	졼򤷤ƤȤˤ롣

	ʤǥեȤǤϡ;פʥ᡼뤬Фʤ褦ˡ᡼ǤΥ
	(: Ͽޤ)CUI̵뤷Ƥ롣Τᡢ
	--allow-send-message ץŪˡ᡼桼
	Ȥؼ򤹤ɬפ뤳Ȥա

  command_line_options 
	fml     --allow-send-message --mode=user
	makefml --allow-send-message --mode=user
	
   FML::Process::Digest Error Kernel 
	prepare credential area more early stage (within constructor).
	so remove later object creation.
	
   FML::Credential 
	implement set_sender() and get_sender().
	
   FML::Process::Utils 
	implement allow_reply_message() method.
	
   FML::Process::Kernel 
	use $curproc->allow_reply_message() to check if we should send back
	messages.
	
   FML::Process::Configure 
   FML::Command::User::subscribe unsubscribe 
	fml --allow-send-message allows makefml::fml sends reply messages.
	currently user mode "subscribe" and "unsubcribe" support this style.

2004/03/12

   variables
	rename $reply_message_* -> $report_mail_*
	change default vale of $log_command_tail_starting_location

	[*_program -> *_function]
	
	$use_command_mail_program   -> $use_command_mail_function
	$use_digest_program         -> $use_article_digest_function
	$use_distribute_program	    -> $use_article_post_function
	$use_error_analyzer_program -> $use_error_mail_analyzer_function
	
	[command list]
	
	$commands_for_stranger   -> $anonymous_command_mail_allowed_commands
	$commands_for_user            -> $user_command_mail_allowed_commands
	$commands_for_privileged_user -> $admin_command_mail_allowed_commands
	$commands_for_admin_cgi	      -> $admin_cgi_allowed_commands
	
	[restrictions]
	
	$post_restrictions -> $article_post_restrictions
	$post_restrictions_reject_notice_data_type
	-> $article_post_restrictions_reject_notice_data_type
	
	$command_restrictions -> $command_mail_restrictions
	permit_commands_for_stranger -> permit_anonymous_command_mail
	
	$admin_command_restrictions -> $admin_command_mail_restrictions

2004/03/04

   ޥɥ᡼ΥɤŪ˽ľ

   new command mail framework
	FML::Command 
	FML::Command::Auth 
	FML::Command::Admin::password 
	FML::Command::User::admin 
	FML::Process::Command 
	FML::Restriction::Command 
	FML::Process::State 

   FML::Process::Command 
	fully rewritten. a lot of codes are moved to under
	FML::Command:::class. 
	
   FML::Restriction::Command 
	method-fy.
	
	syntax check is applied to each entry of space separeted command
	string.
	
   FML::Command 
	implement verify_syntax(), simple_syntax_check() and
	safe_regexp_match(). 
	
	remove auth() method call for FML::Command::$MODE::$COMMAND,
	which is not used.

   FML::Command::Auth 
	show detalis of error messages more.

   FML::Command::Admin::password
	implement verify_syntax() method.
	
   FML::Command::User::admin 
	now, user mode "admin" command becomes entrance for priviledged
	command world.
	
	The main part of $admin_command_restrictions is moved from
	FML::Process::Command to here.
	
	implement verify_syntax(), which is a wrapper for other admin
	commands. 
	
	implemnt need_lock().

   FML::Article::Summary 
	charcode_convert() -> charcode_convert_to_external_charset().
	
   FML::Restriction::Base Command 
	prepare and use command mail specific definitions.

2004/02/29

   Mail::Message::Language 
	accept_language_list() return [] not [*] if not found.

2004/02/27

   ޥɤֻ֤ݤˡԤʤ
   ɬפʤ(ȤȽǤĤʤʤ)ʣθ֤

   FML::Process::Kernel 
	fix comments on reply_message() around.
	reply_message() handles request when the current process runs
	under MTA. fix regexp optimization.

	define __convert_message_nl() and use it.
	allow loader program uses reply_message() method.
	
	select proper language for reply message based on Accept-Language,
	Content-Type and language preference order.
	use plural languages if needed.
	
   FML::Process::Utils 
	define lang_to_charset().
	fix return value for some methods.
	use "print if $debug" in some cases.


2004/02/26

   variables
	define $language_preference_order
	
   etc/command_line_options 
	new option -o key=value which overrider configurations.
	you can use duplicated -o options e.g. -o key1=value1 -o key2=value2.
	
	remove not used -params options
	
   FML::Process::Kernel 
	new option -o key=value which overrider configurations.
	you can use duplicated -o options e.g. -o key1=value1 -o key2=value2.

	more proper charset handling based on Content-Type::field.
	
	change Mail::Message::Encode to Mail::Message::String in
	message handling. 

	implement get_preferred_languages() method.

   FML::Process::Utils 
	get_charset: fix default charset handling
	implement set_language_hint(), get_language_hint().
	get_accept_language_list() returns [] not [*] when no data.

   FML::Error::Cache 
	firstly, constructor() expires too old cache.
	
   Mail::Message 
	enhance trap regexp for charset=...
	
   Mail::Message::Charset 
	fix comments
	
   Mail::Message::Language 
	handle X-Accept-Language:

   Tie::JournaledDir 
	new() expires too old cache files.

2004/02/15

   FML::Article::Spool 
	check input data more.
	
   Mail::Message::String 
	add new methods:
	+charcode_convert_to_internal_code().
	+charcode_convert_to_external_charset().
	
	we need to ignore original charset in some cases.
	So, if "=?sjis=..." is input, we return it as "=?iso-2022-jp...".
	
	more debug codes.
	
   FML::Process::Kernel 
	ui_message() prefers $msg_args->{level} if specified.

2004/02/13

   FML::Article::Summary 
	ensure initial value of $min and $max

2004/02/06

   FML::Header 
	expand special regexp in tag before tag substitution.
	
   Mail::Message::Subject 
	update $subject only if subject is rewritten.
	
   FML::Article::Summary 
	switch to new Mail::Message::* framework.
	
   Mail::Message::Charset 
	implement message_charset_to_language() method.
	
   Mail::Message::String 
	use mothod-style more even internally.
	speculate in and out code::charset as could as possible.
	implement method::charcode_convert(), get_charcode().

2004/02/04

   FML::Command::User::chaddr 
	vaildate address type variables.
	
   Mail::Message::String 
	change in-core internal variables.
	implement set(), get(), set_mime_charset(), get_mime_charset
	and unfold().
	
   Mail::Message::Address 
	modify on-memory variable naming.
	implement as_str(), substr().
	
   Mail::Message::Date 
	new() can handle both unix time and Date::style string.
	
	implement set(), unixtime().
	speculate_timezone() -> _speculate_timezone().
	
	yet another style methods::as_mail_header_style(),
	as_YYYYMMDD(), as_YYYYxMMxDD(), as_current_time(),
	as_precise_current_time(), as_stardate(), and as_unixtime().
	
   FML::Article::Summary 
   FML::Header 
	modified to use new Mail::Message::* framekwork.

2004/02/03

   IO::Adapter 
   IO::Adapter::File 
	fix meta escape needed in finding key.

2004/02/01

   variables
	add $log_command_tail_starting_location
	$article_non_mime_filter_rules = reject_empty_content_type permit
	
   FML::Config 
	fix checking code of defined value.
	
   FML::Article::Sequence 
	$sequence_file -> $article_sequence_file
	use //o if could.
	
   FML::Command::Admin::log 
	use $log_command_tail_starting_location.
	fix comments.
	
   FML::Command::Admin::{chaddr,changepassword,digest,subscribe}
	validate input address by FML::Restriction::Base.
	
   FML::Command::Filter 
   FML::Filter 
   FML::Filter::Header MimeComponent Size TextPlain 
	new FML::Command::Filter $curproc;
	fix::update comments::messages.
	rename method::rules() -> set_rules().
	use ::::o if could.
	
	fix var name:
	$article_none_mime_filter_rules -> $article_non_mime_filter_rules.
	
	implement reject_empty_content_type rule (non mime filter).

2004/01/31

   FML::Error::Cache 
	validate input address.

   FML::Process::{Addr,Alias,Calendar,Command,ConfViewer,Configure}
   FML::Process::{Digest,Distribute,DocViewer,Error,Fake,HTMLify}
   FML::Process::CGI::Kernel 
	not use "$cf_list = $curproc->get_config_files_list();".
	$curproc->load_config_files($cf_list);
	->
	$curproc->load_config_files();
	
   Calendar::Lite 
	print() -> print_as_html()
	
2004/01/22
   *** Хۡ륭ڡ ***

   FML::Command 
	fix comments.
	define $default_lock_channel and modified to use it.
	
   FML::MTA::Control::Procmail 
	fix $fh->close() usage.
	fix comments.
	cosmetics.

2004/01/21
   *** Хۡ륭ڡ ***

   FML::Restriction::Base 
	define $number_regexp , $address_regexp.
	modified to use it.
	
   FML::Process::CGI::Kernel 
	more todo comments.
	remove 'use FML::Log' which is not used.
	
   FML::Filter::Size TextPlain 
	check input data type.
	more todo comments.
	white space cometics.
	
   FML::Header 
	cosmetics: spaces, unroll one line to plural ones.
	
   FML::Command::HTMLify 
	fix comments.
	add missing loop label.
	
   FML::Filter::Header 
	fix comments.
	check input data type.
	cosmetics.
	FNF.
	
   FML::Filter::MimeComponent 
	define $recursive_max_level in file scope.
	fix comments.
	cosmtics: sort initialization order, location.
	=~ "" -> =~ //
	
   FML::User::DB 
	fix comments.
	close output channel before exits from within loop.

2004/01/18
   *** Хۡ륭ڡ ***

   FML::Confirm 
	update comments.
	clean up.
	if (defined $db) { ...->open::close ... }
	
   FML::Config 
	fix comments.
	change variable name::$mode -> $op in some cases.
	change argument order of __update_config().

2004/01/14

   FML::Process::Calendar 
	bug fix handling of $args within $curproc for further reference.
	
   Calendar::Lite 
	clean up.
	show summary next 3 days above calender this month.

   FML::Process::Kernel 
	load_config_files() not need the argument.
	load_config_files() do sanity checks for mta and cgi processes.

2004/01/01-2004/01/04

	*** 2003 ǯ  2004 ǯ Хۡ륭ڡ ***

   clean up
	$curproc ȥڥˤʤäƤ $args ۤȤɤΥ饹ǤϺ
	$args ؤΥ FML::Process::Utils Υ᥽åɷͳ
	ΤߤȤ롣

   FML::Process::Utils 
	+set_config_files_list()
	+append_to_config_files_list()
	+get_config_files_list()
	
   FML::Digest 
	fix lock algorithm.
	clean up.
	fix comments.
	
2003/12/31

   2003 ǯ  2004 ǯ Хۡ륭ڡ

   ѿ
   FML::ML::Control 
	*_private_dirs -> *_private_directories
	
   FML::Command::Admin::newdomain newml rmdomain rmml 
   FML::Process::Addr Alias 
   FML::ML::Control HomePrefix 
   FML::MTA::Control 
   FML::MTA::Control::Postfix Procmail Qmail Sendmail Utils 
	clean up class hierarchy.
	o FML::HomeDir::Prefix -> FML::ML::HomePrefix;
	o FML::MTAControl      -> FML::MTA::Control
	o move main codes in newml and rmml to FML::ML::Control class.
	
   FML::Process::Switch 
	bug fix initialization.
	update comments.
	clarify function role by renaming::ProcessSwitch() -> load_module()
	Process::Switch
	sort.
	
   FML::Process::Kernel 
	save incoming_message cache file path on memory for later use.
	import $default_ml_home_prefix from main.cf name space.

   FML::Process::Utils 
	implement {get,set}_incoming_message_cache_file_path().
	bug fix get_incoming_message_cache_file_path()
	
   FML::Process::Fake 
	experimental implementation done.
	
   Mail::Delivery::Queue 
	define *_file_path() methods.
	bug fix use of *_{dir,file}_path() functions.
	validate $value (ARRAY_REF).
	update comments.
	
   Mail::Delivery::Net::INET6 
	fix label name
	
   File::CacheDir 
	implement cache_file_path()
	
   FML::Cache::Journal 
	import $directory_private_mode if could
	
   FML::Error 
	update comments.
	clean up.
	use methods not direct editing of $self as could as possible.
	use $curproc->{ credential }
	reset address comparison level after main routine.
	
   FML::Header::MessageID 
	get() return null string if the value is undefined
	
   FML::Command::Auth 
	validate $address input as data.
	$cred = $curproc->{ credential };
	update comments.
	
   FML::Command::Admin::addadmin 
	update comments.
	define and use $maplist.
	
   FML::Command::Admin::addmoderator 
	update comments.
	define and use $maplist.
	
   FML::Command::Admin::check 
	update comments.
	implement check_ml_home_dir() and modify rules.
	
   FML::Command::Admin::edit 
	update comments.
	use $curproc->ml_*() methods if could.
	reset $ENV{'PATH'} while running editor.
	
   FML::Command::Admin::mailq 
	update comments.
	more readable method and variable names.
	
   FML::Command::Admin::rmml 
	update comments.
	use $curproc->ml_*() methods if could.
	modify local variable names to be more readble.
	
   FML::Command::Admin::list 
	update comments.
	clean up.
	modify routine names to be more readable.
	remove not used variables.
	bug fix cgi_menu() initialization phase.
	
   FML::Command::User::chaddr confirm digest off on unsubscribe 
	update comments on $primary_*_map use.
	use $curproc->{ credential } not call "use FML::Credential ...".
	
   FML::Command::User::digest 
	update comments::messages.
	use $curproc->{ credential }
	
   FML::Command::User::chaddr subscribe 
	update comments.
	use $curproc->{ credential }
	reset address comparison level after main routine runs.

2003/12/25

   FML::Process::Utils 
	bugfix default $use_address_mask and $address_mask_type in
	thread_db_args()
	
   Mail::Message::ToHTML 
	add from-address for not use address_mask in
	_print_li_filename()
	
   FML::Process::Distribute 
	add log at htmlify article end

2003/12/24

   etc/{command_line_options,install.cf.in,modules}
   FML::Process::Fake 
	add and enable libexec::faker
	
   FML::Process::Utils 
	implement is_need_ml_name()
	
   FML::Process::CGI::Kernel 
	use is_need_ml_name() not $args->{ ... }
	
   FML::Process::{Addr,Alias,Calendar,ConfViewer,Digest,
		  Distribute,DocViewer,Kernel}
	remove the direct use of $args
	instead, use utility methods via $curproc

2003/12/22

   Mail::Delivery::Queue 
	define the following methods and modified to use it:
	new_dirpath deferred_dirpath active_dirpath info_dirpath
	sender_dir_path recipients_dir_path
	*_dirpath() -> *_dir_path().

2003/12/21

   variables
	+ $list_command_default_maps
	+ $newml_command_ml_admin_default_address

   etc/install.cf.in 
   FML::Install 
	remove hard-coded language dependent information by moving it to
	$nl_template_files in install.cf.in.

2003/12/20

   FML::Command::Admin::list 
	use $list_command_default_maps not hard-coded value.
	change default map to $recipient_maps not $member_maps.
	
   FML::Command::Admin::newml 
	use $newml_command_ml_admin_default_address as $ml-admin value.
	if unspecified, use the default fml owner value.
	
   FML::Command 
	define get_mode() and set_mode() and modified to use it.

2003/12/10

   Mail::Message::DB 
	quick hack for trouble making html indexs and working
	distribute.

2003/11/30

   variables
   FML::Credential 
   FML::Command::Auth 
   FML::Process::{Command,Distribute}
   FML::Restriction::Post 
	rename: $system_accounts -> $system_special_accounts.

2003/11/29

   ʤӡνϷ򥫥ޥ)䤹Ϥ
   ץꤳࡣ

   --log-computer-output ޥɥ饤󥪥ץ
   $use_log_computer_output  $log_computer_output_engine 롣
   եޥåȤ $log_computer_output_engine ǻꤹ⥸塼
   Ƥʡ

   etc/command_line_options 
   FML::Process::Kernel 
	support --log-computer-output option

   FML::Process::{Command,Configure,Distribute,Error,Kernel}
   FML::Log::Print::Simple 
	define $use_log_computer_output.
	modify FML::Process::* to use it.
	
	FML::Process::Kernel supports customization by
	$log_computer_output_engine definition.
	
	$curproc->log_message_init() is called within prepare() method
	of each	program.

   FML::Process::Debug 
	implement config() method.
	
   FML::User::DB 
	use $curproc->config() to get config object.
	
   variables
   FML::Header 
	x_ml_name -> outgoing_mail_header_x_ml_name

2003/11/27

   FML::User::Control 
	check if $buf retruned from IO::Adapter is defined.
	
   IO::Adapter::File 
	bug fix get_key_values_as_array_ref()

2003/11/26

   list ޥɤγĥ map ɽǽˤ

   FML::Command::Admin::list 
	try to list up arbitorary map if could.
	FML::User::Control::{userlist -> print_userlist}
	
   IO::Adapter::{Array,DBI,File}
	implement get_key_values_as_array_ref() to return key and all values
	as ARRAY_REF.
	
   FML::User::Control 
	rename method::userlist -> print_userlist
	
	cal get_key_values_as_array_ref() of IO::Adapter to get key and all
	values.
	
	So, print_userlist() print out "key values ...".

   ɥ쥹Ӥؿʸʸ̤/ʤȤǽ
   ޤߴΤᡢǥեȤ case insensitive (̤ʤ)ѹ

   variabes
	address_compare -> address_compare_function
	
   FML::Credential 
	bug fix variable overload
	
2003/11/25

   FML::User::Control 
	remove debug condition
	
   FML::Credential 
   variables
	implement switch to toggle case sensitive check of mail address.
	+use_address_compare = yes
	+address_compare_type = user_part_case_insensitive

2003/11/24

   FML::Process::Switch 
	ensure valid exit code

2003/11/23

   FML::Confirm 
   FML::Command::User::{chaddr,confirm,off,on,subscribe,unsubscribe}
   FML::Cache::Journal 
   FML::Data::Deadline 
	separete database part in FML::Confirm to FML::Cache::Journal
	which can be shared between other modules.
	
	change FML::Confirm::new() to take $curproc.
	
   FML::Command::Admin::{addadmin,addmoderator,chaddr,deladmin,
                         delmoderator,digest,list,off,on,
                         subscribe,unsubscribe}
   FML::Process::Utils 
	create FML::User::* class to manipulate user database.
	1. move FML::Command::UserControl to FML::User::Control class.
	2. implement FML::User::DB (committed later).
	
   variables
	define the folloging variables:
	+ $primary_user_db_gecos_map
	+ $primary_user_db_subscribe_date_map
	+ $user_db_gecos_maps
	+ $user_db_subscribe_date_maps
	
   Mail::Message::ToHTML 
	try to mask raw addresses in signature.
	rename::_who_of_address() -> _address_to_gecos()
	
   FML::User::DB 
	avoid duplication.
	
   FML::User::Control 
   FML::User::Info 
	run FML::User::Infoal->import_from_mail_header() to save user info
	included in the header for further use.

2003/11/18

   FML::Confirm 
   FML::Command::User::confirm 
	fix argument FML::Confirm::is_expired($id) from time to id.
	
   FML::Credential 
	implement is_user_part_case_sensitive() and modified to use it.
	we should attach $self internal directly even if within the
	same module. 

2003/11/16

   ɥᥤΰ(ǥեȤӥСɥᥤ)γĥ(Σλ)

   FML::Command::Admin::newdomain rmdomain 
   FML::Process::Utils 
   FML::HomeDir::Prefix 
	switched to new ml_home_prefix framework, which is enhanced virtual
	domain operation. See fml-devel in 2003::10.
	
   FML::Command::Admin::newdomain rmdomain 
   FML::Process::Configure 
	fixed argument handling to support:
	o makefml method domain
	o fml domain method

   FML::Process::Debug 
	we use this module as simplified FML::Process::Kernel for debug.
	define simplified version of some following methods:
	+mkdir
	+log
	+logwarn
	+logerror
	+ml_home_prefix
	
2003/11/11

   FML::Header::MessageID 
	change message-id format to match RFC2822

2003/11/08

   Mail::Message::Encode 
	disable Encode use even on >= 5.008 since we are not ready.

	perl 5.8 Ǥ Encode Ĥ٤ʤɡ Jcode 
	ȤɤʤΤǡif 5.8 ġפʬöȤʤ
	Ȥˤ롣
	
   FML::Command::UserControl 
	call croak() if address to remove not found

2003/11/07

   Mail::Message::ToHTML
	Mail::Message::ToHTML γĥ 
	add $versionid
	add new comment tag at html_begin() for file magic
	change @header_field remove same information (X-xxx) and add
	Message-Id

2003/11/05

   ɥᥤΰ(ǥեȤӥСɥᥤ)γĥΤϤޤ

   FML::Process::Kernel 
   etc/main.cf.in 
	define $primary_ml_home_prefix_map in main.cf.
	FML::Process::Kernel imports it.

2003/11/02

   FML::Process::Utils 
   FML::Process::CGI::Kernel 
	move safe_cgi_action_name from FML::Process::Utils to
	FML::Process::CGI::Utils.

   FML::Process::Kernel Utils 
	debug_level() -> get_debug_level().
	sort definitions::{set,get}_print_style().

2003/11/01

   ѿηϤΥ꡼˥: ع¤̿̾§

	ꥷƥޥƥåѿ̿̾롼ͤƤȡǤ⡢
	쥯饹ȷѾȤͤʤ١Ƴ褤Ȼפ
	褦ˤʤޤ

	Τ̩ˤȵդˤ櫓ʬʤΤۤɤˡ

	㡧
		mail_Ȥ
		mail_default_Ȥ

		use_incoming_mail_Ȥ
		incoming_mail_Ȥ

		use_outgoing_mail_Ȥ
		outgoing_mail_Ȥ

		use_report_mail_Ȥ
		report_mail_Ȥ

	Ǥ⡢̩ˤ outgoing_report_mail Ȥ٤ʤǤ
	ɡޤǤϤʤΤۤɤۤɤäƤȤǤ礦͡

2003/10/30

   variables
   FML::Process::Kernel 
	header_loop_check_rules -> incoming_mail_header_loop_check_rules
	use_header_loop_check   -> use_incoming_mail_header_loop_check
	body_loop_check_rules   -> incoming_mail_body_loop_check_rules
	use_body_loop_check     -> use_incoming_mail_body_loop_check
	body_cksum_cache_dir    -> incoming_mail_body_cksum_cache_dir

   variables
	has_* -> system_has_*

2003/10/29

   import im-146.

2003/10/26

   FML::Install 
   etc/install.cf.in
	To remove hard-coded file list to install as sample,
	define $sample_cf_files in install.cf and use it.
	
   FML::Process::Kernel Switch 
   etc/main.cf.in 	
	define $site_default_config_cf to remove hard-coded
	site_default_config.cf. sort entries in main.cf.

2003/10/22

   variables
   FML::CGI::User 
	change address list shown on the cgi menu from member to
	recipient. 

2003/10/17

   ѿ̾ѹ
	command_prompt       -> command_mail_reply_prompt
	cgi_menu_map_list    -> cgi_menu_address_map_list
	cgi_menu_default_map -> cgi_menu_default_address_map

	command_prompt -> command_mail_reply_prompt

	summary_file                  -> article_summary_file
	summary_format_style          -> article_summary_file_format_style
	summary_format_address_length -> article_summary_file_format_address_length

	default_file_mode      -> file_default_mode
	default_directory_mode -> directory_default_mode
	
	move *_mode definitions from basic.cf to file.cf.
	
	remove duplicated $default_directory_mode.

   FML::Process::CGI::Kernel 
   Mail::Message::Charset 
	Mail::Message::Charset has tables on code, charset and languge.
	FML::Process::CGI::Kernel is modified to use it.

   FML::Command::Admin::log 
	define log_file_*_charset and modify log module to use it.

2003/10/16

   charset μ갷ĥ	
   resutructure/enhance charset definitions:
	${category}_default_charset and ${category}_charset_{ja,en,...}

   FML::Process::CGI::Utils 
	cgi_var_language() returns '' not 'japanese' if language info
	not found. 
	
   FML::Process::CGI::Kernel 
	bug fix _cgi_resolve_ml_specific_variables() for correct ml_*
	handling. 
	
	follow HTTP_ACCEPT_LANGUAGE information.
	fix log_file when admin::*.cgi runs.
	add $domain_local_log_file
	add $domain_local_log_file

   FML::Process::CGI::Kernel 
   FML::CGI::ThreadTrack Calendar Menu 
   FML::Command::Admin::log 
	language_of_cgi_message() -> get_charset("cgi")
	
   FML::Process::Kernel 
   Mail::Message 
   Mail::Message::Language 
	consider Accept-Language::(but not used yet now ;-).
	
   FML::Process::CGI::Utils 
	FNF::add comments
	
   FML::Process::CGI::Kernel 
	bug fix charset handling.
	
   FML::Command::SendFile 
   FML::Digest 
	messager::rfc822 part not need charset ;)
	
   FML::Process::Utils 
	bug fix masking variable definition
	
	remove language_of_cgi_message()

	implement set_accept_language_list() and
	get_accept_language_list().
	
	remove obsolete language_of_reply_message().
	
	get_charset() can handle accpet-language::and charset requested by
	other module via PCB.

2003/10/15

   FML::Digest 
   FML::Command::SendFile 
   FML::Process::Kernel Utils 
	implement get_charset() and set_charset().  modified to use it to
	treat current charset changed dynamically on the fly.
	
   FML::Process::CGI::Kernel 
	enable languge change function
	
   variables
	define $default_cgi_language, $cgi_language_list

2003/10/14

   fml/share/message/ is translated to English.
	euc-jp/* is translated to corresponding us-ascii/*.

   FML::Process::Kernel 
	if (defined $pcb) { ...}
	
   FML::Process::CGI::Kernel Utils 
	define cgi_var_language() and use it
	
   Mail::Message::DB 
	oops, remove debug message output
	
   FML::Filter::MimeComponent 
	recursive multipart checks
	
   FML::Process::CGI::Kernel 
   FML::CGI::List ML Menu User 
	implement cgi_hidden_info_language() and modified to use it.
	It holds language info within CGI operations.

2003/10/07

   FML::Command::Admin::log 
	fix html style:
	<pre>str1<::pre> <pre>str2<::pre> ... -> <pre>str1\nstr2 ... <::pre>

2003/10/06

   FML::Process::Distribute 
   Mail::Message::DB ToHTML 
	handle article subject specilly where the key in db is
	"article_subject".
	
   FML::Command::Admin::log 
	
	fix printing_style value::cgi -> html

2003/09/30

   Mail::Message::DB 
	create article_$header db too.

   FML::Restriction::Base 
	define language regexp

2003/09/29

   FML::Process::Distribute
	disable _old_thread_check()

2003/09/27

   natural language extension in cgi menu.

   FML::CGI::Admin::{List,ML,User} -> FML::CGI::{List,ML,User}
	
   FML::Process::CGI::Utils 
   FML::CGI::List ML User 
	define new methods::cgi_var_address_map() cgi_var_address_map_list()
	cgi_var_action() cgi_var_frame_target()
	
	switched to use cgi_var_*().
	
	sort::cleanup initialization parts in each cgi_menu().
	
   FML::CGI::ML 
	cgi_var_ml_name_list($ml_domain) -> cgi_var_ml_name_list()
	
   FML::CGI::User 
	fix selected_key name
	
   FML::CGI::List 
	add reset button
	
   FML::Config 
	bug fix expand_variable_in_buffer() to match as many as could.
	
   FML::Process::Kernel 
	make message_nl() handle enable language translation
	
   FML::Process::CGI::Utils 
	define methods::cgi_var_navigator_title(), cgi_var_fml_project_url().

2003/09/26

   ml-admin/*/*.cgi Ѳǽˤ

   variables
	define $commands_for_ml_admin_cgi
	
   FML::Process::CGI::Kernel 
   FML::CGI::Admin::Menu 
   FML::Command::Admin::newml 
   FML::CGI::Menu 
   FML::CGI::MLAdmin::Menu 
   FML::Process::CGI::Utils 
	change *::CGI:::class architecture.
	
	FML::CGI::*Admin::Menu inherits FML::CGI::Menu.
	
	methods in FML::Process::CGI::* returns the value by checking the
	current cgi mode (admin or ml-admin).
	
   FML::CGI::Admin::ML 
   FML::CGI::Admin::User 
   FML::Command::Admin::list 
   FML::Process::Utils 
	change arguments of get_ml_list() to remove $args.

   FML::Process::CGI::Kernel 
	use cgi.*.top for top level help

2003/09/20

   FML::Process::Switch 
	define _find_longest_matched_entry() function and use it to
	find more specific entry for getopt parameters and module
	definitons.

2003/09/19

   FML::Process::Switch 
	implement _filespec_splitdir() which split filename to
	@filepath but it uses File::Spec only in > perl 5.6.1.
	
	more specific match for $0 to resolve module we should use.

   FML::Process::Utils 
	fixed to avoid uninitialized ...
	
   etc/command_line_options 
	define --log-dup anyway
	
   FML::Header 
   FML::Header::MessageID 
   FML::Process::Kernel 
	new Header->add_message_id()
	change Header::MessageID->gen_id() Args
	change in Process::Kernel->_add_info_on_header() add add_message_id()

2003/09/16

   update CPAN
	updated to File-Spec-0.85_03.
	Jcode updated to 0.83

2003/09/14

   FML::MTAControl::Procmail 
	typo
	
   FML::Process::{Flow,Kernel,Switch}
	Process::Flow and Process::Switch classes need to know $curproc
	pointer each other.
	
	fix log message duplication mechanism.
	
	define global_tmp_dir_path(), be_quiet() in FML::Process::Kernel.

2003/09/13

   etc/modules
   FML::Process::Switch 
	extension: compare $0 against entry etc::modules by
	considering subdir. 
	
   FML::Process::Switch 
	fix $0 handling for *.cgi:
	program_fullname => $ENV{ 'SCRIPT_FILENAME' } || $0
	
   FML::Process::CGI::Kernel 
	use $curproc->config_cf_filepath().
	
   FML::Process::Kernel 
	implement ui_message().
	change label of log() from ok to info.
	
   FML::MTAControl 
   FML::Command::Admin::{edit mailq newml rmml} 
   FML::MTAControl::{Postfix,Procmail,Qmail,Sendmail} 
	use $curproc->ui_message() instead of "print STDERR ...".
	
   FML::Filter::MimeComponent3 
   Mail::Message 
	fix variable initialization to avoid undefined reference warning.
	
   FML::Process::Configure 
	remove close_stderr_channel_if_quiet_option_specified().
	
   FML::Process::Utils 
	implement is_cgi_process(), is_under_mta_process().


2003/09/11

   FML::Command::Admin::newml 
	clarify error messages more.
	
   FML::MTAControl::Postfix 
	handle default::virtual domain properly.

2003/09/08

   Mail::Message
   Mail::Message::{ToHTML,Encode}
	=?shift_jis? ... ᡼μ갷
	ƥ֥Ȥˤ charset  encoding ΰ

2003/09/06

   ̤ͣξõˡγĥ
	̤ͣäݡǥ쥯ȥ̾ĤΤΤˤ롣
	ǡ١äƤסäơʤ˲٤äʡ

		/var/spool/ml/elena
			->
		/var/spool/ml/@elena.20030906

   FML::Command::Admin::rmml 
   FML::Process::Utils 
	use removed_ml_home_dir_path() method to determine the dir
	path used as the removed $ml_home_dir.

2003/09/05

   FML::Process::Utils 
	escape $curproc in eval
	
   FML::Process::Kernel 
	bug fix::we should not use $main_cf in this module.
	clean up.
	more comments.

2003/09/04

   FML::Command::Admin::get newml rmml 
	use $curproc->config()

2003/09/02

   FML::Process::Calendar 
	bug fix wrong lvalue

2003/08/30

   use $curproc->config(), pcb() not { config }, { pcb } respectively.
	
   FML::Process::Kernel 
	add simple log message queue logic as a prototype.

2003/08/24

   Mail::Message::ToHTML 
	print STDERR ... if $debug.
	
   FML::Config 
	print STDERR ... -> carp(...)
	
   File::Rotate 
   IO::Adapter::DBI File 
	remove debug::print STDERR ..
	
   FML::Process::CGI::Param 
	remove debug
	
   FML::Process::ConfViewer 
	save $@ via logwarn() not print STDERR ..

2003/08/23

   use log*() methods	
	define $curproc->log, logwarn, logerror and log_message() methods.
	modified to use $curproc->log*() interface.
	
   Mail::Message::Checksum 
	use croak() not FML::Log()
	
   FML::Process::Kernel 
	sort function definitions.
	
   FML::Process::QueueManager 
   FML::Mailer 
	new FML::Mailer $curproc;

   FML::{Article,Digest,Error,Filter,Header,Mailer}
   FML::Article::{Sequence,Summary,Thread} 
   FML::Error::Cache 
   FML::Filter::MimeComponent3 
   FML::Process::Utils 
   FML::Restriction::Post 
	modified to use $curproc->log*() methods.

2003/08/20

   FML::Process::Utils 
   Mail::Message::ToHTML 
	define the detail of address masking against spammers.
	$use_html_archive_address_mask	=	yes
	$html_archive_address_mask_type	=	all

   new variables
	use_html_archive_address_mask  =       yes
	phtml_archive_address_mask_type =       all

2003/08/18

   --quiet ץ (fml  makefml ޥɤ)

   FML::Process::Configure Kernel 
	support --quiet options for makefml and fml.
	It closes STDERR before the main routine begins.
	
	define close_stderr_channel_if_quiet_option_specified().
	
   etc/command_line_options 
	--quite option for fml and makefml.
	clean up.

2003/08/16

   FML::Process::Kernel 
	check whether $ml_home_dir not exists in _init_lock().

   Mail::Message 
	modify logic to find the start point of multipart.
	correct handling of the first dash-boundary.
	XXX this logic is effective but wrong.

2003/08/15

   FML::Process::Utils 
   Mail::Message::ToHTML 
	test html_archive_address_mask mask or nomask
	address_mask use To and Cc

2003/08/06

   Mail::Bounce::Freeserve 
   Mail::Bounce::Language::Japanese 
	moved Japanese contnet to Mail::Bounce::Language::Japanese.
	bugfix regexp

   Mail::Bounce 
	enable freeserve.en.jp
	
   FML::Process::Distribute 
	clarify old::new thread engine routines.
	rename htmlify() to _htmlify() to clarify it is private.

2003/08/05

  Mail::Bounce::Freeserve

2003/08/03

   FML::Process::Distribute 
	fix arguments used in the case of key
	"error.reject_notice_preamble" (PR by fml-devel:503).

2003/08/02

  Document translation to English completed up to 70 % ?

   Mail::Message::ToHTML 
	reduce warning if missing from or subject at sub
	_print_li_filename()

2003/08/01

   FML::Restriction::Post 
	deny_reason not over write

2003/07/24

  Document translation to English completed up to 40 % ?

	etc/default_config.cf and etc/config.cf are translated.

2003/07/23

  Document translation to English starts 

2003/07/22

   Mail::Message::Language::Japanese::Subject 
	nuke todo::method-ify done.
	
   Mail::Message::Date 
	implement speculate_timezone() to remove hard-coded timezone
	+0900 :-). 
	
   FML::Process::Kernel 
	use our own Date::field when we use Mail::Message::Compose
	(MIME::Lite). 
	
   Mail::Message::Encode 
	detect_code() should not call croak() but return 'unknown'.
	we can handle Japanes and English, so fixed comments.

2003/07/21

   import Time-modules-2003.0211 to use Time::Timezone.

   clean up ...

   Tie::JournaledDir JournaledFile 
	clean up.
	
	change the match conditoin parameter name to "match_condition".  You
	should specify "first" or "last" as match_condition in
	Tie::JournaledFile::new() method.
	
	Tie::JournaledFile::change default match condition to "last match".
	
   Mail::ThreadTrack::Analyze 
   FML::Article::Summary 
   Mail::Message::Date 
	method-ify date_to_unixtime() of Mail::Message::Date.
	
   Mail::Message::Checksum Utils 
	import search_program() into Mail::Message::Utils module.
	modified Checksum to use it.
	
   FML::Header::Subject 
   Mail::Message::Language::Japanese::Subject 
	method-ify cut_off_reply_tag()

2003/07/20

   Mail::Message::DB 
	comment on analyze()

	restrict demand copying only for the previous messages before
	the current one.

   Mail::Message::ToHTML 
   Mail::Message::Thread 
	moved analyzer dispatcher to ::Thread module to use analyzer
	independetly.

   Mail::Message::Thread 
	analyze() accpets $id if specified.
	
   FML::Process::{Distribute,Utils} 
	separete thread_db_args() routine prepares thread information.
	pass $aritcle_id to analyze().

2003/07/19

   Mail::Message
	merge udb branch to switch to the new thread engine
	fixed to co-work with udb well.

   variables
	defined $udb_base_dir

2003/07/03

   Mail::Message::ToHTML 
	change regexp $url$trailor

2003/06/29

   FML::Command 
   FML::Command::SendFile 
   FML::Command::User::get 
	check the number of request in get commands.

   update messages

2003/06/26

   FML::Header Filter 
	add $debug for debug message to Log at only debug-mode

2003/06/24

   Mail::Message[udb]::ToHTML 
	pass $old_db_base_dir to DB module

   Mail::Message[udb]::DB 
	save all values of fields.
	
	for filtering system, save other header fields::return_path posted
	x_posted sender x_sender received x_received.
	
	demand copying from old db to udb if needed(demaned) when _
	db_get() called.

	bug fix negative cache handling et.al.

2003/06/23

   variables
	remove $system_message_charset and $system_message_subject,
	which are not used.

   Mail::Message::ToHTML 
	bugfix at debug

2003/06/21

   Mail::Message 
	bug fixed::message_text() should be able to handle differenct
	type $data. 

2003/06/15

   variables	
	add check_date to $article_header_filter_rules (PR by
	fml-devel:478).

2003/06/14

   Mail::Message::DB [udb]
	implement separete method _save_header_info() to handle header info.
	
	implement get_as_array_ref() and get_table_as_hash_ref().
	fixed to cooperate with ToHTML module.
	add more print debug codes.

	thread_summary() return more info::id, html_*
	move thread_summary generator wrapper from ToHTML to DB
	
   Mail::Message::ToHTML [udb]
	modified to use Mail::Message::Encode::decode_mime_string().
	rewritten based on new DB module.
	remove ndb_key(), which is not used.
	fix filename to use db value.
	fix filepath of thread links.
	add a lot of printf debug.
	move thread_summary generator wrapper from ToHTML to DB.
	remove __str2array().
	$self->{ _thread_list }->{ $id }       (STR) changed to
	$self->{ _hint_ref_key_list }->{ $id } (ARRAY_REF).

   Mail::Message::{DB,ToHTML,Utils} [udb]
	implement Mail::Message::Utils::from_to_name() and modified modules to
	use it.
	
   Mail::Message::Utils [udb]
	fixed to use Mail::Message::Encode

2003/06/11

   FML::Filter::Header 
	add check_date() for missing date field

2003/06/06

   Mail::Message::MH 
	against longloop for underrun and overrun

2003/06/04

  import im-145

2003/06/03

   Mail::Message[udb]::DB 
	monthly_to_key_list -> month_to_key_list
	
   Mail::Message[udb]::ToHTML 
	remove _address_clean_up(), which is not used.

2003/06/02

   Mail::Message::IMPLEMENTATION [udb branch]
	update idea::sync with current implementation
	
   Mail::Message::ToHTML [udb branch]
	modified to use DB::thread_summary($id).
	rename method to be more easy for eyes.
	remove not used variables.
	FNF a little.

2003/06/01

   åɥǡ١κ߷
	̥֥ǤäƤΤ source-changes ML ˤư
	Ȥϻפ

   Mail::Message::ToHTML [udb branch]
   Mail::Message::DB [udb branch]
	move main db manipulation code from ToHTML to DB.
	XXX caution::but the index generator not works now.

   Mail::Message::DB [udb branch]
	implement thread_summary().

2003/05/28

   variables
	error_analyzer_function::error_continuity -> histgram
	define $error_analyzer_function_list
	
   FML::Error 
   FML::Error::{Analyze,Cache}
   FML::Error::Analyze::{histgram,simple_count}
	restructuring under FML::Error class to be more extensible.
	
	move main part of print() to FML::Error::Analyzer::* modules.
	So, print() format depends on FML::Error::Analyzer::* class.
	
   FML::Command::Admin::error 
	list up summary for each algorithm defined in
	$error_analyzer_function_list.

2003/05/27

   Mail::Message::ToHTML 
	print text in "unknown MIME encoding" case.
	try to validate key and value in hash operation but ... (?)

2003/05/26

   IO::Adapter::{Array,DBI,File}
	remove not used method:
	- get_value_as_str()
	- get_value_as_array_ref()

2003/05/20

   FML::Command::Admin::error 
	disable lock since FML::Error locks itself if needed.
	
   FML::Command::Admin::error 
   FML::Error 
	move the status dump code from FML::Command::Admin:error to
	FML::Error.

2003/05/16

   Mail::Message::ToHTML 
	bug fix masking of raw From::address

2003/05/14

   FML::Filter 
   FML::Process::Command 
   FML::Filter::Size 
	implement size limit filter for both article and command mail.

	ϤФ륵¥ե륿ޤ

2003/05/13

   FML::Filter 
   FML::Process::Distribute 
	use $_arg_address not $_arg_sender
	
	use "reject_notice_preamble" in filter rejection notice.
	it describes:
	o the reason why we do not use mime::multipart.
	o this message is not from you but somebody forged.

	ե륿Ƥս񤭤Ĥ롣

   FML::MTAControl::Postfix Sendmail 
	check the existence of path_* programs

2003/05/12

   FML::Command::Auth 
   FML::Command::Admin::chaddr changepassword deladmin delmoderator 
		        digest off on unsubscribe 
	we should operate only $primary_*_map not $*_maps in deleting the user
	address.

	᡼륢ɥ쥹륳ɤν
		 primary_*_map ˤΤɲ/Ԥʤ

2003/05/08

   FML::Filter 
	add $msg_args at article_filter_reject_notice()

   Mail::Message 
	whole_message_as_str():
	o indent is null by default.
	o fix the trailing indent replace.

2003/05/05

   variables and configure
	search spamassassin, spamd and spamc, and set path_${it} for further
	extension.

2003/05/04

   Mail::Bounce::SimpleMatch 
	E500 SMTP Mail Service ?

2003/05/03

   FML::Process::Error 
	fix comments (FNF).
	
   FML::Header 
	style, aligned with FNF.

2003/05/01

   variables	
	define article_filter_reject_notice_data_type
	
   FML::Process::Utils 
	fix typo::maitainer->maintainer
	
   FML::Filter 
	forward the rejected message by string or multipart?
	It is determined by $article_filter_reject_notice_data_type.
	
   Mail::Message 
	implement whole_message_header_as_str()

	remove whole_message_as_string_ref().
	
	implement whole_message_as_str() to extract the first part of this
	message as a string.

2003/04/29

   FML::Restriction::Base 
	permit user+ext@domain

   libexec/error 顼åžǽˤ
	ž $maintainer_recipient_maps ˽ǥեȤ̤

   variables
	define $maintainer_recipient_maps
	
   FML::Process::Error 
	define sender as $maintainer as a dummy sender to avoid
	unexpected error.

	if $maintainer_recipient_maps defined, forward error message
	to it.
	
   FML::Process::Kernel 
	permit use of reply_message() for libexec::error
	
   FML::Command::Admin::mailq 
	modify format to be more similar to usual mailq output.

2003/04/21

   FML::Header 
	obsolete mime_boundary() (same Mail::Message
	_header_mime_boundary())

2003/04/20

   FML::Article 
	not *path() method but spool_in() creates subdir if needed.

2003/04/19

   etc/default_config.cf.ja.in 
   etc/src/config.cf.ja/acl.cf 
   FML::Error 
	we should handle addresses used by fml such as elena@fml.org,
	elena-ctl@fml.org et.al. exceptionally in handling errors.

	̤ͣȤɥ쥹( elena Ȥ elena-ctl )̵뤷ʤȤ

   Mail::Bounce
	enhance smtp32 rules

   FML::Command::Admin::newml 
   FML::Config::Convert 
   etc/aliases
   etc/postfix_virtual 
	fix virtual domain handling (fml-devel:417)

	СɥᥤΥƥץ졼ȤְäƤΤǽ
	ޤǺäƤ postfix  virtual ƥץ졼Ȥ
	ޤ褦ˤ

2003/04/18

   etc/command_line_options	
	define menu.cgi
	
   FML::Command::Admin::newml 
	mkdir $ml_home_prefix if not found

   Mail::Message 
	_header_mime_boundary() boundary detect no quote string case

2003/04/16

   article_filter_reject_notice_recipients
	change attribute names of recipient used in filter rejection
	notice: admin -> maintainer

   FML::Header 
	rewrite_received() outside loop $header->delete($org) for bad
	count

2003/04/15

   Mail::Delivery::Queue 
	reset alarm after flock()

   FML::Header 
	mime_boundary() boundary detect change short match and add no
	quote string

2003/04/09

   FML::Header 
	add rewrite_received() for replace Received::to X-Received:

2003/04/07

   Mail::Bounce::SimpleMatch 
	add analize ybb.ne.jp and Webshield

2003/04/04

   ե륿ƤΥå֤褬̯˴ְäƤΤ
   FML::Process::Kernel 
	reply_message_add_header_info() should pass $msg_args to
	reply_message().

2003/03/28

   rename method: article_id_max() -> article_max_id()

2003/03/24

   img/ is updated to im-144.

2003/03/18

  ڽס giant lock ʤγ٤κ٤åذܹԤ

   FML::Command::Admin::edit get mailq 
   FML::Command::User::deny guide help objective 
	not need lock
	
   FML::Process::Kernel 
	more logs around locks.
	add deadlock warning.
	reuse lock object if could.

   FML::Command::UserControl 
	modify chaddr algorithm::"del() and add()" -> "add() and del()".

2003/03/17

   Υǡ¤ؿǤ󤹤٤¤
	åγ٤٤뤿

   FML::Process::Kernel 
   Mail::Delivery::Queue 
	fix that setrunnable() of Mail::Deliver::Queue returns the
	correct value and FML::Process::Kernel logs the value.
	
   FML::Process::Distribute 
	use new lock channel article_spool_modify to exclusive lock for both
	sequence updating and spool writing.  In addition, locks at channel
	article_sequence and article_spool are also done in each critical
	section.
	
   FML::Command::Admin::chaddr 
	move the main code to FML::Command::UserControl.
	modified to use FML::Command::UserControl.
	
   FML::Command::Admin::changepassword 
	move the main code to FML::Command::Auth.
	
   FML::Command::Auth 
	implement change_password().
	
   FML::Process::Utils 
	get_address_list() uses get_user_list() in FML::Command::UserControl.
	
   FML::Command::UserControl 
	implement user_chaddr() and get_user_list().

2003/03/16

   removed "fmlthread".
	instead of these, use the following commands: 
		makefml thread $ml [options]

   FML::Article 
   FML::Article::Sequence 
	define new lock channel::article_spool
	move id related functions to FML::Article::Sequence	

   FML::Article::Thread 
	fixe to meethod style.
	FNF::fix comments.
	
   FML::Command::SendFile 
	use $curproc->article_id_max() to get the last article id.
	
   FML::Command::Admin::spool 
	need no giant lock.
	FML::Spool -> FML::Article::Spool
	fix argument handling.
	
   FML::Digest 
	define lock channel for digest_sequence_*.
	use $curproc->article_id_max() if could.
	clean up handling of digest_sequenc_file.

   FML::Error 
   FML::Process::Error 
	clean up lock on error cache.
	move lock mechanism into only FML::Error module.
	XXX lock channel name is changed but hard-coded yet now.
	
   FML::Error 
	fix lock channel name
	
   FML::Process::Utils 
	article_id_max() is just a wrapper for FML::Article::id().

2003/03/15

   removed "fmlspool".
	instead of these, use the following commands: 
		makefml spool   $ml

   File::Sequence 
	return 0 if sequence file not found
	
   FML::Process::Command 
	specify the definition on $command_args HASH STRUCTURE.

2003/03/14

   removed "fmlerror", "fmlsummary" and "fmlsuper".
	instead of these, use the following commands: 
		makefml error   $ml
		makefml summary $ml
		makefml mailq   $ml

   FML::Process::Utils 
	imlement debug_level()
	
   FML::Process::{Flow,Kernel}
	define finalize() at the last of flow.
	finalize() is only used for debug now.

   FML::Header::Subject 
   Mail::Message::Date 
	validate input
	
   FML::Article::Summary 
	validate input.
	implement dump() method to show the whole summary_file.

2003/03/11

   FML::Sys::Alias
	basic functions to deal with aliases file

   FML::Process::Switch 
   FML::Config::Tiny 
	main.cf Υǥե(С¸) /etc/fml/main.cf 
	ޡɾ롣ʤȿѿ̤ˤʤʤ
	Թ礬ФƤ롣
	
	we use FML::Config::Tiny, which just reads and parses the file.
	It is a tiny version of FML::Config module.

   /etc/fml/	
	install main.cf at $default_config_dir/

2003/03/09

   Mail::ThreadTrack::Print::HTML 
	$action  = $curproc->safe_cgi_action_name()

2003/03/06

   variables
	$use_article_filter_reject_notice
	$article_filter_reject_notice_recipients
	
   etc/main.cf, etc/install.cf	
	define $default_module_config
	define $default_command_line_option_config

   FML::Process::Distribute 
	
   FML::Process::Distribute 
	enable switch by $use_article_filter_reject_notice
	FNF: use get_as_array_ref()
	
   FML::Process::Addr 
	switched to use FML::Sys::User
	
   FML::Restriction::Command 
	nuke is_valid_mail_address() which is not used.
	
   FML::Process::Kernel 
	validate From::syntax in credential updating.
	FNF: use get_as_array_ref()

   FML::Process::Kernel 
   FML::Restriction::Post 
	moved main codes of _check_restrions() to methods defined in new
	FML::Restriction::Post module.
	switched to use FML::Restriction::Post.

   FML::Process::Scheduler 
	remove dummy modules::queue_in() and exits()
	
   FML::Error::Cache 
	modified not to use _new().
	removed _new().
	
   FML::MTAControl::Procmail 
	clarify *virtual* functoins are dummy.
	These module do not need to handle virtual issue since
	ml_name@ml_domain is explicitly written in procmailrc.
	
   FML::Process::Switch 
	remove hard-coded module specific configuraitons.
	resolve module name and the options based on etc::modules.
	
	use $default_config_dir/modules to resolv map between prorame
	name and class (+ options).
	
	use etc::command_line_options to resolve getopts() parameters.
	default_module_maps -> default_module_config.

   FML::Filter 
   FML::Process::Utils 
	implment new method convert_to_mail_address() and use it
	to expand {admin, sender, ...} to the corresponding mail address.

2003/03/05

   FML::Header 
	do not show List-Help::unless $use_command_mail_program specified.
	implement rewrite_errors_to()

   FML::Process::Command Distribute 
	return header for debug in error
	
   FML::Process::Kernel 
	implement reply_message_add_header_info().

	disable reply_message() in _check_restrictions().
	
	add "$curproc->caller_info($msg, caller) if $debug;" at a few places.
	implement caller_info().
	
   FML::Filter 
	֥ե륿Ƥ줿פȥå֤ (ץȥ)
	
   messages
	֥Сʤ׻Υå
	륹衩ʤɤȥҥȤ⤹롣

2003/03/03

   FML::Article 
	bug fix::try to mkdir $dir ($subdir) when $use_subdir enabled.
	
   Mail::Message::Spool 
	bug fix::check value not by defined()

2003/02/18

   FML::Error 
   FML::Process::Error 
	use FML::Error->db_open() not FML::Error::Cache for cache db open.

   FML::Filter 
	fix typo
	
2003/02/16

   clean up campaign of codes

   variables
	+summary_format_address_length
	+cgi_menu_map_list
	+cgi_menu_default_map
	
   FML::Config 
	check the existence in load_file()
	nuke ^\s* and \s*$ in array expantion.
	yes() and no() compares the value case insensitively
	bug fixed to work both FIRSTKEY() and NEXTKEY().
	add debug code.
	
   FML::CGI::Calendar ThreadTrack 
   FML::CGI::Admin::Menu 
   FML::Command::HTMLify 
   FML::Command::Admin::log 
   FML::Process::Distribute 
	use language_*() method to determine $charset
	
   FML::Article::Summary 
	modified to use $summary_format_address_length.
	it determines address length in summary file.
	
   FML::Command::User::get 
	update comments and nuke todo.
	
   FML::Process::CGI::Kernel 
	use language_*() to determine $charset.
	remove hard-coded.
	we ensure cgi_try_*() returns safe value.

   FML::CGI::Admin::List 
	nuke hard-coded and use config basd value.
	add more syntax checks before main work.
	
   FML::Process::Utils 
	implemente the following methods:
	is_safe_syntax()
	language_default()
	language_of_cgi_message()
	language_of_reply_message()
	language_of_html_file()

2003/02/15

   FML::Command::UserControl 
	use FML::Restriction::Base
	
   FML::Process::Utils 
	implement safe_cgi_action_name()
	
   FML::CGI::ThreadTrack 
   FML::CGI::Admin::List ML Menu User 
   FML::Process::CGI::Kernel 
	switched to use safe_cgi_action_name()

2003/02/14

   FML::MTAControl::Procmail 
	fix code to find ml_name in procmailrc

2003/02/13

   Mail::Message 
	use module global print_mode parameter not private one within
	object.

   FML::Command::Admin::off 
	fixed to use $config->get_as_array_ref().
	
   FML::Command::UserControl 
   FML::Command::Admin::{digest,off,on,subscribe,unsubscribe}
	user{add,del}() checks input $address.
	nuke the corresponding TODO.
	
   FML::Command::Admin::check 
	validate $ml_name existence firstly.

2003/02/11

   switch INSTALL.sh to install.pl
	󥹥ȡ shell script  perl script ѹޤ

   FML::Install 
	define default value (null) for md5 checksum result

   FML::MTAControl 
   FML::MTAControl::{Postfix,Procmail} 
   Mail::ThreadTrack::Print::{HTML,Text} 
   Mail::Delivery::Queue 
   Mail::ThreadTrack::Print::Message 
   Mail::Message::ToHTML 
	FNF: not use $_

2003/02/10

   solaris 9 Ǥ⤦ (^^)

2003/02/08

   variables
	$command_run_*_hook added

   etc/dot-qmail*
	change args::ml_home_dir  -> ml_name@ml_domain

2003/02/07

   Mail::Message::ToHTML 
	quick hack at sub sub _print_inline_object_link() URL Link

2003/02/05

   FML::Process::Command 
	add $command_run_{start,end}_hook

2003/02/03

   FML::Process::Command
   FML::Process::Error
	stop_this_process() ᥽åɤ̣ʤ褦˽
	 hook Τ

2003/02/01

   ֻ֤ѹ ()
	ȤǤϤʤ١ǥåޤȤ

   FML::Process::Utils
	implement unique()
	
   FML::Process::Kernel
	unique recipient array before queuing.
	implement another strategy of recipient based ququeing (for test).
	
   FML::Command::UserControl
   FML::Command::Admin::chaddr
   FML::Command::User::{chaddr,subscribe,unsubscribe}
	try exact matching just before changing user.

   IO::Adapter
   IO::Adapter::{Array,DBI,MySQL}
	remove get_next_value() method.
	add todo for get_value_as_* if needed.
	update document.
	
   IO::Adapter
	get_next_value() ᥽åɤ

   FML::Command::Admin::chaddr
	remove address matched by FML::Credential
	in the case of $old_address
	
   FML::Config
	FNF
	bug fix wrong argument for chomp().
	
   FML::Credential
	implement matched_address() method
	
   FML::Command::UserControl
	try to remove address matched by $cred->has_address_in_map(), not
	address specified by the function argument.

   FML::Command::Auth
	use FML::Crypt not Crypt::UnixCrypt directly.

   variables	
	enable changepassword, chpass, initpass and passwd as admin
	command.

2003/01/31

   fix typo: rename Calender to Calendar ;)

2003/01/29

   FNF-ify (update/clean up documents, coding style ...)
	FML::Install
	File::CacheDir Utils.pm
	IO::Adapter::AtomicFile

   FML::Command::Admin::newml
   FML::MTAControl::Utils
	in newml, we should check if $ml_name already exists as a user
	name or not.
	
   FML::MTAControl
	add FML::MTAControl::Utils into @ISA

   FML::Process::Calender
	prepare() loads default configuration to use $path_* info.
	w3m -> $path_w3m
	cat -> $curproc->cat() method (XXX temporary use).
	
   FML::Process::Utils
	implement cat() method for convenience
	
   FML::Command::Admin::unsubscribe
	use $config->get_as_array_ref() method.

   install.pl.in
   FML::Install
	implement is_run_as_root().
	we verify install.pl runs as root.

2003/01/28

   FML::Config
	expand ${variable}
	
   FML::Header::Subject
	decode() returns tag info, too
	
   FML::Install
	At the first time, do not ask if upgrade or not loader.
	bug fix checks in copy_dir().
	copy_dir() install files by preserving [am]time.

   installer perl version
	fml/etc/install.cf.in
	install.pl.in

2003/01/27

   FML::Command::Admin::{deladmin,byeadmin}
	mv real codes from byeadmin to deladmin module.
	now, byeadmin is a forwarder to deladmin.
	
   FML::Command::Admin::delmoderator
	sync with deladmin codes

2003/01/26

   FNF-ify (update/clean up documents, coding style ...)

   FML::Command::DirUtils
	use FML::Restriction::Base::regexp_match() to check command
	line options.
	FNF: remove $_
	
   FML::Restriction::Base
	define 'command_line_options' regexp.
	
   FML::Command::Admin::byeadmin
	bug fix target maps to handle.

2003/01/25

   FNF-ify (update/clean up documents, coding style ...)

   FML::Command::Utils
	removed since it is not used.

   FML::Process::Utils
	get_ml_list() checks arguments matched with regxp provided by
	FML::Restriction::Base.
	
   FML::Error
   FML::Command::DirUtils FileUtils.pm
   FML::Command::Admin::dir file.pm
   FML::Process::Kernel
   FML::Restriction::Base
	implement FML::Restriction::Base::regexp_match() and
	switched to use it.
	
   Calender::Lite
   FML::Restriction::Base
	implement FML::Restriction::Base::regexp_match() can handle special
	class "fullpath" not based on regexp.
	
	switch Calender::Lite to use this method for checking of fully path-ed
	directory.

2003/01/10

   mime component filter ˼εǽŹߤޤ

	1) multipart ΥåȤʤʤ顢
	   ΥѡȤڤΤƤ

	2) ⤷٤ƤΥѡȤ̵ʤ顢reject 

	: ᡼ξꤷΤǤ
		text/plain ()
		application/ms-word (virus Ĥ)

	application/ms-word  content filter Υ롼Ǻ졢
	̵̣ text/plain ϺεǽǺ졢
	ͭʥѡȤʤΤ reject (ʤ)

	ȤꤢεǽϥǥեȤ on Ǥ

   Mail::Message
	fix next/prev link of object chain
	implemenet is_multipart() method
	
   FML::Filter::MimeComponent3
	when $opt_cut_off_empty_part is non zero, we cut off empty part.
	Also, reject this message if no effective part in multipart.
	
	XXX $opt_cut_off_empty_part = 1; by default now.

2003/01/09

   FML::Filter::MimeComponent3
	fix wrong logic of handling determined $action vs default_action.
	corerct messages.

2003/01/08

   FML::Filter::MimeComponent3
	sync default rule w/ etc/mime_component_filter

2003/01/07

   variables
	postfix_verp_delimiters	=	+=
	qmail_verp_delimiters	=	-=
	
   FML::Command::UserControl
	shorten log messages
	
   FML::Process::Spool
	change argument style

2003/01/05

   add new utility
	fmlerror
	fml

   variables
	$fmlerror_*hook added
	
   FML::Process::Switch
	add fmlerror, fix fmlsuper getopt
	
   FML::Error
   FML::Error::Analyze
	
	implement get_data_detail()

2003/01/04

   FML::MTAControl
	add && enable FML::MTAControl::Sendmail.
	
	implement _remove_postfix_style_virtual(), which moved from
	FML::MTAControl::Postfix.
	
   FML::MTAControl::Postfix
	postfix_find_key_in_alias_maps()::find system aliases and fml defined
	aliases irrespective of the result by postconf. This search uses newly
	implemented _find_key_in_file() but it is a bug since it handles file
	search only.
	
	modified to use _remove_postfix_style_virtual().
	
   FML::Error::Analyze
	add analize day limit
	
	change day checkpoint at simple_count
	add simple_count2() error_continuity2() for error type 4xx
	
	bugfix missing my at day check values

2003/01/03

   variables
	add admin_member_maps into member_maps
	
   FML::Command
	define $debug.
	more error messages.
	
   FML::Restriction::Base
	implement regexp() method.
	FNF-ify.
	
   FML::Error
	modified use FML::Restriction::Base->regexp().
	
   FML::Command::{DirUtils,FileUtils}
   FML::Command::Admin::{dir,file}
	modified to use FML::Restriction::Base->regexp().
	modify messages.
	
   FML::Command::Admin::{newml,rmml}
	get_as_array_ref() to get $newml_command_mta_config_list values.
	
   FML::Process::Command
   FML::Command::Auth
	modify log messages.
	hide messages for debug mode.
	
   FML::Process::{Addr,Alias}
	fix help message.
	nuke not used variables.

2003/01/02

   fmlsuper ޥɤɲä롣
	塼ΤΡäȤޥɤˤĤꡣ

   update configure
	add fmlsuper

   variables
	add $fmlsuper_*hook
	
   FML::Process::Switch
	enable fmlsuper using FML::Process::Super
	
   FML::Process::Spool
	fix description

2002/12

	Сۡ롦ڡǤ


2002/12/31

   Mail::Bounce::SimpleMatch
	bug fix trap pattern for more accuracy.

   variables
	+path_sum                  = @SUM@
	+path_gzcat                = @GZCAT@
	+path_makemap              = @MAKEMAP@
	
	define $newml_command_mta_config_list
	define $rmml_command_mta_config_list
	define $sendmail_virtual_map_file
	
	change $domain_sendmail_config_dir
	$domain_mail_config_dir -> $domain_config_base_dir::sendmail

   FML::MTAControl::Postfix
	remove duplicated call "postmap virtual"

   update configure
	search sum, digest, gzcat and makemap, too.

2002/12/30

   Mail::Delivery::SMTP
   Mail::Message
	enhance Mail::Message::set_log_function() to override the global log
	function within Mail::Message name space.  Thie enables all objects
	within the current Mail::Message space uses the same log function.
	
	We need this function to enforce all objects in a chain to use the
	same log output channel.
	
	So, Mail::Delivery enhanced to use this function to fix the lack of
	log messages for multipart messages.

2002/12/26

   FML::Article
	bug fix: defined check for $sfh

   FML::Mailer
	not set smtp_log_handle to avoid duplication

   FML::Log
	create log file with mode 0600 if could.
	it seems o.k. by "Principle of Least Surprise".

2002/12/25

   FML::Process::Distribute
	not use smtp_log_handle to avoid duplication in
	var/mail/outgoing/ (PR fml-devel:345).

   FML::Process::Command
	fix comments.
	rename::_allow_command() -> _config_allow_command()

2002/12/24

   *Хۡ롦ڡ»

   FML::Process::Command
	rename:
	o _is_valid_command() -> _config_permit_command()
	o _is_valid_syntax()  -> _is_safe_syntax()
	o _auth_admin()       -> _try_admin_auth()
	
	fix changes.
	more log of level exceptions.

2002/12/23

   *Хۡ롦ڡ»

   File::CacheDir
	fix comments.
	check defined() more.
	chop -> chomp.
	
   File::Sequence
	fix comments.
	clean up the return value by removing \s*..
	
   FML::Command::HTMLify
	fix comments.
	aggrege duplicated code.
	
   FML::Command::SendFile
	fix comments.
	rename: _is_valid_argument() -> _get_valid_article_list().
	sort.
	
   FML::Command::User::digest
	fix comments.
	clean up (sort) codes.
	
   FML::Process::Kernel
	clean up.
	fix comments.
	fix label name.
	check address pattern by FML::Restriction.
	//o if could.
	
   IO::Adapter::AtomicFile
	bug fix: $fh->close() -> $fh->SUPER::close().

2002/12/22

   FML::MTAControl::Postfix
	PR (fml-devel:343)
	check the existence of virtual file.
	
   *Хۡ롦ڡ»

   IO::Adapter::AtomicFile
	cometics. fix comments.
	defined() check before $fh->close().
	
   Mail::ThreadTrack::Print::Text
	fix comments.
	add loop label.
	
   Mail::ThreadTrack::Print::Message
	fix comments.
	//o
	modify variable to be more readable::$h -> header
	
   Mail::ThreadTrack::Analyze
	fix comments.
	//o
	defined() check more.
	
   Tie::JournaledDir JournaledFile.pm
	fix comments.
	clean up variable names.
	inform error by croak() more.
	
   FML::Config Confirm.pm
	fix comments.
	add todo(s) as comments.
	//o

2002/12/19

   *Хۡ롦ڡ»
	clean up.
	+ define label or rename label to more appropriate one for loop.
	+ use return().
	+ use qw() if could.
	use ::::o if could.
	fix comments.

   FML::Header
	s/rerply-to/Reply-To/
	more defiend() check.
	
   FML::Command::Admin::log
	fix comments.
	fix typo.
	bug fix the usage of _show_log() method.
	
   FML::Filter::TextPlain
	fix comments. add todo(s).
	rename $m -> $first_msg to clarify variable function.
	remove not used declaration.

2002/12/18

   *Хۡ롦ڡ»

   FML::Header
	clean up comments.
	require() -> use()
	
   FML::Log
	clean up commnets.
	croak() if loading Mail::Message::Date fails.
	
   FML::MTAControl::Procmail
	fix comments and documents.
	use $fh->close() not close($fh).
	
   FML::MTAControl::Postfix Qmail.pm
	fix comments
	
   FML::MTAControl
	clean up comments.
	define is_valid_mta-type() and modified to use it.

   FML::Header::MessageID
	define dummy db_close()
	
   FML::Process::Addr
	clean up comments.
	$fh->close()
	
   FML::Command::DirUtils
	clean up comments.
	modified to define $variable to describe arguments to execute
	and run system($exec).

2002/12/15

   *Хۡ롦ڡ»

   FML::Article
	id() returns data on memory or in sequence_file if not found
	on memory.
	clean up comments.
	use $curproc->config(), $curproc->pcb().
	
   FML::Article::Summary
	redireced to STDOUT if output channel cannot be opened.
	add todo(s) as comments.
	
   ErrorStatus
	clean up comments.
	defined() check.
	forward method::errstr() -> error().
	
   FML::Command::Admin::edit
	print informational mesage
	
   FML::Command::Admin::dir
	fix comments.
	not pass $du_args->{options} to FML::Command::DirUtils module.
	
   FML::Command::Admin::byeadmin
	care for primary_admin_recipient_map
	XXX we should handle *_maps not primary_*_map.

   FML::Restriction::CGI Command.pm
	clean up comments
	
   FML::Restriction::Base
	clean up comments.
	define ${file,dir,command}_regexp. modified to use these regexp(s).
	enhance $command_regexp to include [0-9].

2002/12/13

   File::SimpleLock
	need write permission for flock on solaris (PR fml-devel:331,332)

2002/12/12

   Calender::Lite
	cosmetic changes.
	fix comments.
	fix tag (FILE -> LINE).
	
   FML::Error::Analyze
	defined()

2002/12/10

   updated IM modules to im-142
	Thank Tatsuya Kinoshita <tats@mbf.nifty.com>.

2002/12/09

   update CPAN modules
	import File-MMagic 1.16
	import MIME-Types  1.004
	update MailTools   1.15 -> 1.52

2002/12/01

   FML::Article::Summary
   FML::Process::Distribute
	bug fix article object handling:
	we should not initialize article object under
	libexec::distribute runs. pass $article object to $summary
	object by append($article, $id).

   FML::Article::Summary
	summary date should be sync-ed with article date

2002/11/26

   implement fmlsummary program

   new variables
	define $fmlsummary*hook
	define $summary_file, $summary_format_type
	
   FML::Article::Summary
	FNF-ify.
	clean up.
	nuke debug.
	implement rebuild() to enable "fmlsummary rebuild $ml_name".
	make jcode of summary file "jis-jp".
	implement append($id).

   FML::Process::Summary
	newly added as a main module to run fmlsummary program.
	implement rebuild() to enable "fmlsummary rebuild $ml_name".
	fix help and conditions to show help
	
   FML::Process::Distribute
	update summary file by calling $summary->append($id)

   FML::Process::Kernel
	enable fmlsummary $command $ml_name ...
	more defined() check

   FML::Header::Subject
	define clean_up(), decode(), delete_subject_tag() to separete
	functions.
	
2002/11/24

   variables
	$commands_for_privileged_user += digest
	
	define $commands_for_admin = $commands_for_privileged_user for
	conveninence.
	XXX remove either in the future.
	
   FML::Command::Admin::digest
	clean up
	
   FML::Command::Admin::{dir,file}
	basic_variables() -> basic_variable() for FML::Restriction::Base
	
   FML::Process::Utils
	enable to handle digest_recipient in which_map_nl().

2002/11/20

   FML::Error::Cache
	mkdir $error_analyzer_cache_dir if not exists

   variables
	mkdir $error_analyzer_cache_dir in initialization phase

2002/11/19

   FML::Command::Admin::digest
	init digest on off for admin

   FML::Process::Kernel
	bug fix queue identifier generation
	
   Mail::Delivery::Queue
	input of recipients can be duplicated

   Mail::Message::ToHTML
	bug fix function call::f() => $obj->f()

2002/11/18

   FML::Process::Digest
	correct start id calculation
	enable queue flush to send digest.
	
   FML::Digest
   FML::Process::Kernel
	digest routine can customizes header.
	XXX preliminary support. needs overhaul?

2002/11/17

   new variables
	define $digest_*hook
	$primary_digest_member_map	= $primary_member_map
	$digest_member_maps		= $primary_member_maps
	$primary_digest_recipient_map	= file:$ml_home_dir::recipients-digest
	$digest_recipient_maps		= $primary_recipient_map
	$article_sequence_file (= $sequence_file) for symmetry
	$use_digest_program
	$digest_sequence_file
	$article_sequence_file
	
   FML::Process::Switch
	enable libexec/digest

   File::Sequence
	fix get_id(); not use chomp() but use s::[\s\r\n]*$::::.
	define set_id($id) to update value in the sequence file.
	
   FML::Process::Digest
	newly created for digest delivery program.
	implement _digest(), which is the real function to process digest
	message creation.
	
	XXX mail queue operation is not yet implemented.

   FML::Digest
   FML::Process::Digest Kernel.pm
   Mail::Delivery::Queue
	enabled passing of recipient_maps (ARRAY_REF) into mail queue.
	By this, we can now pass $digest_recipient_maps as digest recipients
	to mail queue system.

2002/11/09

   I-D õwww.fml.org I-D 쥯򸫤褦ˤ

2002/11/07

   FML::MTAControl::Postfix
	postconf -d -> postconf (postfix version dependent ?)
	
   FML::Process::Switch
   FML::Process::Addr
   INSTALL.sh configure configure.in
   fml/bin/fmladdr.in
	implement fmladdr command, which shows all users and aliases.

2002/10/31

   add configura option: --with/without-mime-component-filter
	configure.in
	fml/etc/site_default_config.cf.in
		configure --with/without-mime-component-filter

2002/10/29

   FML::Process::Utils
	fix escape of Log(...) in eval q{}
	
   FML::Command::Admin::newml
	prinf "a b c" -> a, b, c
	
   Mail::Message::ToHTML
	umask escaping like splx():
	mask = umask();
	umask( ...) ; # set up umask here
	do something ...
	uamsk($mask);
	
   FML::Process::Utils
	ensure umask escape in _mkpath_*()
	
   FML::Command::Admin::newml
	handle both public and private directories in initialization phase.
	create variables:
	$newml_command_init_public_dirs $newml_command_init_private_dirs
	
	changed newml codes to use them.

2002/10/28

   FML::Header::Subject
	you can use \U$ml_name\$ in subject tag configuration:)
	
   FML::Process::ThreadTrack
	fix db_update cannot get last_id from _speculate_last_id() use seqfile
	
   File::Sequence
	use chomp at get_id()'s return value

2002/10/27

   FML::Filter::MimeComponent3
	bug fix interface between FML::Filter and MimeComponent3

2002/10/26

   FML::Filter::MimeComponent3
	fix initianlization bug
	
   FML::Filter
	use MimeComponent3 as a test

2002/10/23

   Mail::ThreadTrack::DB
	typofix filepath value at sub db_mkdb()
	
2002/10/22

   FML::Process::Kernel
	handle fmlthread $argv same as makefml one

2002/10/21

   MIME component ե륿ľ

   FML::Filter
	re-enable mime component filter based on
	Filter::MimeComponent2

   FML::Filter::MimeComponent2
	
	fix rule appling algorithm:
	 for rule (rules) {
	    for mp (message) {
	       check mp by $rule
	   }
	 }
	
	enable to read filter rules from the specified file (-c file).
	
	show more debug info.
	
	clean up debug info. debug info changes with debug level

	implement "cutoff" action

	clarify reason in log message
	
	enhance filter rule to use the reverse condition.
	e.g. (whole_type, !type, action).

2002/10/12

   Mail::Message::ToHTML
	rename index.html to index_all.html
	add sub create_top_index()

2002/10/06

   Mail::Message::ToHTML
	add index reverse code at _update_id_monthly_index()

2002/10/04

   variables
	define $html_archive_index_order_type
	
   FML::Command::HTMLify
   FML::Process::Distribute
   Mail::Message::ToHTML
	enabled to handle order in index.html by
	$html_archive_index_order_type.
	
	Mail::Message::ToHTML
	o htmlify_{file,dir}() is changted to normal methods for passing
	arguments.
	
   FML::Filter
	add prototype for $use_article_non_mime_filter
	
   FML::Header::Subject
	workaround to re-encode subject after subject tag handling

2002/09/30

   ե륿󥰤κƹ

	FNF-ify
	
	rename: _load_function() -> _apply_function()
	
	module name renamed:
	o ContentCheck -> MimeComponent
	o HeaderCheck  -> Header
	o BodyCheck    -> TextPlain

2002/09/29

   ե륿󥰤κƹ

   ѿ
	reconstruct filter system.  create a new file "article.cf",
	and gather article_*_filter definitions in it.

   FML::Process::Distribute
	sync w:::FML::Filter reconstruction. rename function name
	
   FML::Filter
	following new variable $article_filter_functions,
	call the following function sequentially.
	o article_header_filter
	o article_non_mime_filter
	o article_mime_component_filter
	o article_text_plain_filter

2002/09/29

   FML::Process::ConfViewer
	"fmlconf $ml $varname" shows "$varname = $value".
	unless $varname specified, dump all variables.

   FML::Config::Convert
	hold file mode. set $dst mode same as $src mode
	
   FML::Confirm
   FML::Header::MessageID
   File::CacheDir
   Mail::ThreadTrack
   Mail::Delivery::Queue
   Mail::Message::ToHTML
   Mail::ThreadTrack::DB
	we should not use hard-coded file::dir mode
	
   FML::Article
	care subdir case more

2002/09/28

   variables
	enable off/on for user use

2002/09/24

   variables
	$article_body_filter_rules add permit as the last resort
	$article_header_filter_rules append permit rule
	
   FML::Filter::BodyCheck
   FML::Filter::HeaderCheck
	define permit rule

2002/09/23

   FML::Filter::BodyCheck
	should not import STR2EUC from Mail::Message::Encode
	bug fixed to use Mail::Message::Encode->convert()

2002/09/14

   FML::Filter::BodyCheck
	add use Mail::Message::Encode at reject_japanese_command_syntax()
	because rejected by filter due to Undefined subroutine
	&FML::Filter::BodyCheck::STR2EUC called
	
   variables	
	define $default_umask and $timezone

2002/09/11

   FML::Log
	not use /dev/stderr

2002/09/09

   INSTALL.sh
	not use "id -p" (PR by fml-devel:241)

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.334 2012/12/30 10:02:53 fukachan Exp $
