#!/usr/bin/perl
#
# dcnote-ps2gif : 
#
#  ps file を scan image gif に変換する. 
#
#  ●Usage : dcnote-ps2gif [-d output_dir] hogehoge.ps
#
#  ●作成されるファイル
#
#    hogehoge/		 : 作業ディレクトリ. 
#	      001.gif... : gif ファイル. 
#
#  ●必要な小道具
#    convert または netpbm(netpbm-nonfree)
#
#
# 履歴  1998/11/24 竹広真一
#       1999/05/10 林祥介
#       1999/05/13 小高正嗣; perl スクリプトに変更
#       1999/07/19 小高正嗣
#       1999/10/27 竹広真一; カラーに対応. pgm -> pnm
#       1999/12/20 杉山耕一朗; 注釈を加える
#
######################################################################
#
# コマンド等の指定
#
$CONVERT='/usr/bin/X11/convert'   ;
$PPMTOGIF='/usr/bin/ppmtogif' ;

$GIFDENSITY="100x100" ;# gif image の大きさ指定, convert での解像度指定
$DESTDIR='.' ;         # 生成ファイル格納ディレクトリ(初期値)

# オプション: 生成物置場の指定
## @ARGV[0] が - で始まらない場合はループを抜ける. 

while (@ARGV) {
    last unless ($ARGV[0] =~ /^-/);
    $_ = shift;
    if (/^-d/) { $DESTDIR = shift; next; }
    die "unknown option $_";
}

# 前処理:
# 引数に file 名が与えられないとエラーを返す.
#
die "Usage: dcnote-ps2gif [-d output_dir] [ps file].\n" if @ARGV == 0 ;

# メインループ;
# $DESTDIR がなければ作成する.
# サブルーチン makegif を呼ぶ.
#
foreach $file (@ARGV) { 
    $file =~ s/.ps$// ;
    mkdir $DESTDIR, 0777  unless -d $DESTDIR ;
    &makegif($file) ;
}
exit 0;

# サブルーチン;
# gif ファイルを生成する.
#
sub makegif{
    local($file) = @_ ;  # ローカル変数の定義
    $ps ="$file.ps"  ;

    # ps ファイルがない場合, サブルーチンを抜ける.
    if ( ! -e $ps ) {
	print "Warning: $ps not found.\n" ;
	return ;
    }

    # 各ページの gif イメージ作成
    # gif ファイル名は「英数字 3 つ + 拡張子」で与える. 

    print "$CONVERT $ps...\n" ;
    system ("$CONVERT -density $GIFDENSITY $ps %03d.pnm") ;

    opendir(DIR, ".") ;
    @temp = readdir(DIR) ;
    @temp = grep(/^[0-9][0-9][0-9]\.pnm$/, @temp);
    foreach $base (@temp) {
	$base =~ s/.pnm$// ;
	system ("$PPMTOGIF $base.pnm > $base.gif") ;
    }
    closedir(DIR) ;

    # 片付けと格納
    print "clean *.pnm\n" ;
    system ("rm [0-9][0-9][0-9].pnm") ;
    system ("mv [0-9][0-9][0-9].gif $DESTDIR") ;
}
