#!/usr/local/bin/perl
#
# cmail-r2c.pl - RMAIL 形式のファイルを chain-mail の Folder の形式に変更する
#           
#  Author: nagano@ose.west.enicom.co.jp ( Takashi Nagano )
#
#  ver 0.2 - Date:   Wed, 10 Nov 93 20:19:00
#   未読の RMAIL ファイルに対するコンバートも可能にし、さらに、その状態
#   に合わせて、chain-mail の status-line を付けるようにした。
#
#  ver 0.1 - Date:   Mon,  8 Nov 93 10:38:00   
#   とりあえず、全て読んだ後の RMAIL ファイルなら、コンバートできるよう
#   にした。

#############################################################################
#
# 固定文字列の初期設定
#
#     各環境にあわせて変更してください。
#
#############################################################################
# rmail の各 mail 間のセパレータ
$PAGE_SEP = "\n";		

# rmail の file の last-border
$LAST_SEP = "";

# rmail の mail-header 部分と本文のセパレータ
$MH_SEP   = "*** EOOH ***\n";	

# cmail の status-line
#   ( これは、cmail の status-line にあわせてください。 )
$CM_RLINE  = "X-cmail-status: Replied\n";   
$CM_ULINE  = "X-cmail-status: Unread\n";  
$CM_ALINE  = "X-cmail-status: Active\n";  

#############################################################################
#
# プログラム
#
#############################################################################

#
# 入力された file が rmail 形式かどうかの check
#
$_ = <STDIN>;
if ( $_ !~ /^BABYL/ ) { 
    die "Input file in not in format of RMAIL.\n"; 
}

#
# rmail の header の skip
#
do { 
    $_ = <>;
} until$_ eq $PAGE_SEP ;
print $PAGE_SEP;

#
# 変換の開始
#
while (<>) {
    # rmail 用の status-line の解釈
    if ( /unseen/ ) {		# 未読の場合
	print $CM_ULINE;	# cmail の status-line の出力 
	while (<>) {
	    last if ($_ eq $MH_SEP);
	} 
	$_ = <>;
    } else {			# 既読の場合
	if ( /(forwarded|answered)/ ) { # 返事を出している
	    print $CM_RLINE;	# cmail の status-line の出力 
	} else {		# 読んだだけで、返事はしてない。
	    print $CM_ALINE;	# cmail の status-line の出力 
	}
	while (<>) {			# mail-header 部分の出力 
	    print;
	    last if ( /^\n/ ); 
	}
	while (<>) {	# mail-header 重複部分の skip
	    last if ( /^\n/ ); 
	}
    }
    # mail 本文の出力
    # (未読の場合は、mail-header と同時に出力される。)
    do { 
	print; 
	$_ = <>; 
    } until ( $_ eq $PAGE_SEP || $_ eq $LAST_SEP );
    print $PAGE_SEP;
}

