package Subject; use base Bbs; use strict; sub read { my($f,@l); $f=$_[1] || $_[0]->path('bbs') . $_[0]->file('subject'); open( FH, "<$f" ) || return; flock FH, 2; chomp, $l[$.-1]=$_ while ; close FH; $_[0]->list( 'subject' => \@l ); \@l; } sub remake {my($f,$l,$i);$f = $_[0]->path('bbs') . $_[0]->file('subject');$l = $_[1] || $_[0]->list('subject');$i = 0;open( FH, ">$f" ) || return;flock FH, 2;seek FH, 0, 0;local $\ = "\n";print FH while $_=@$l[$i++];truncate FH, tell FH;close FH;$_[0];} sub move_thread {my $m = $_[0]->from('mail');return $_[0]->Subject::move_age() if $m =~ /^age/;return $_[0]->Subject::move_sage() if $m =~ /^sage/;return $_[0]->Subject::move_age();} sub add_thread {my($l,$dat,$d);$l = $_[1] || $_[0]->list('subject');$dat = $_[0]->from('time').'.dat';$d = $_[0]->conf('delimiter');unshift @$l,"$dat$d".$_[0]->from('subject')." (1)";$_[0];} sub move_age { my($l,$dat,$n,$d,$i,$tmp); $l = $_[1] || $_[0]->list('subject'); $dat = $_[0]->from('key').'.dat'; $d = $_[0]->conf('delimiter'); $i=0; while($tmp=$$l[$i++]){ if ( $tmp =~ /^$dat$d(.*) \((\d*)\)$/o ) { $n = $2; $n = ($n+1 != $_[0]->counter('dat_line')) ? $_[0]->counter('dat_line') : $n+1 ; print STDERR 'read subject : '.$2.' counter dat_line : '.$_[0]->counter('dat_line').' $n : '.$n; splice(@$l, $i-1, 1); unshift(@$l, "$dat$d$1 ($n)"); last; } } $_[0]; } sub move_sage { my($l,$dat,$n,$d,$i,$tmp); $l = $_[1] || $_[0]->list('subject'); $dat = $_[0]->from('key').'.dat'; $d = $_[0]->conf('delimiter'); $i=0; while($tmp=$$l[$i++]){ if ( $tmp =~ /^$dat$d(.*) \((.*)\)$/o ) { $n = $2; $n = $n+1 == $_[0]->counter('dat_line') ? $n+1 : $_[0]->counter('dat_line') ; $$l[$i-1] = "$dat$d$1 ($n)"; last; } } $_[0]; } sub move_soko {} 1; __END__