#! /usr/pkg/bin/perl
#                                                         -*- Perl -*-
# Copyright (c) 2000  Motoyuki Kasahara
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

require 5.005;

use English;
use FreePWING::FullUserChar;
use FreePWING::FPWUtils::FPWUtils;
use Getopt::Long;

#
# コマンド行を解析する。
#
if (!GetOptions('workdir=s' => \$work_directory)) {
    exit 1;
}

#
# fpwutils を初期化する。
#
initialize_fpwutils();

#
# これから出力するファイルがすでにあれば、削除する。
#
unlink($full_char_name_file_name);
unlink($full_char_bitmap_16_file_name);
unlink($full_char_bitmap_24_file_name);
unlink($full_char_bitmap_30_file_name);
unlink($full_char_bitmap_48_file_name);

$full = FreePWING::FullUserChar->new();

foreach $file_name (@ARGV) {
    #
    # 外字の定義ファイルを開く。
    #
    $handle = FileHandle->new();
    if (!$handle->open($file_name, 'r')) {
	die "$PROGRAM_NAME: failed to open the file, $ERRNO: $file_name\n";
    }

    for (;;) {
	#
	# 一行読み込む。
	#
	$line = $handle->getline();
	if (!defined($line)) {
	    last;
	}
	$line =~ s/\r?\n?$//;

	#
	# 空行とコメント行 (`#' が先頭に来ている行) は無視する。
	#
	next if ($line =~ /^\#/ || $line =~ /^$/);

	#
	# 読み込んだ行を引数に分解する。
	# 最低 2 個 (名前と 16ドッと外字) ないとエラー。
	#
	@line_arguments = split(/[ \t]+/, $line);
	if (@line_arguments <= 1) {
	    die "$PROGRAM_NAME: malformed line, at line $NR in $file_name\n";
	}

	#
	# 最初の外字エントリが来た時点で、外字の生成側ファイルを開く。
	#
	if ($full->character_count() == 0) {
	    #
	    # 生成側ファイルを開く。
	    #
	    @full_char_bitmap_file_names = ();
	    push(@full_char_bitmap_file_names, $full_char_bitmap_16_file_name)
		if (2 <= @line_arguments);
	    push(@full_char_bitmap_file_names, $full_char_bitmap_24_file_name)
		if (3 <= @line_arguments);
	    push(@full_char_bitmap_file_names, $full_char_bitmap_30_file_name)
		if (4 <= @line_arguments);
	    push(@full_char_bitmap_file_names, $full_char_bitmap_48_file_name)
		if (5 <= @line_arguments);

	    if (!$full->open($full_char_name_file_name,
			     @full_char_bitmap_file_names)) {
		die "$PROGRAM_NAME: " . $full->error_message() . "\n";
	    }
	}

	#
	# 読み込んだ行に記された外字を追加する。
	#
	if (!$full->add_character(@line_arguments)) {
	    die "$PROGRAM_NAME: " . $full->error_message() . "\n";
	}
    }

    #
    # 外字の定義を記述したファイルを開く。
    #
    $handle->close();
}

#
# 外字の生成側ファイルを閉じる。
# 
if (!$full->close()) {
    die "$PROGRAM_NAME: " . $full->error_message() . "\n";
}

#
# fpwutils の後始末をする。
#
finalize_fpwutils();

exit 0;
