		CHANGES
		Last Modified: $Date$

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.53 2002/02/20 14:20:18 fukachan Exp $
