#!/usr/bin/perl
# $Id: splitconf,v 1.5 2002/09/11 11:11:13 mdk Exp $
#
# [CH:FINAL] ʥ᡼ʬ䤷ʸ륹ץ.
# Configure.help ϿѤǤ.
#
# [Ȥ]
#
# $ splitconf FILE [DIR]
#
# ҤȤĤΰ[CH:FINAL] ʥ᡼뤫 Configure.help ʳ
# ܸ EUC Ѵե.
#
# դĤΰ(ά)ʬ䤵줿եϤǥ쥯ȥ.
# άϥȥǥ쥯ȥ˽Ϥޤ.
#
# [Х]
#
# ʸäȻĤäƤޤ
# CONFIG_ETRAX_KGDB
# CONFIG_IP6_NF_QUEUE
# CONFIG_MTD_DOCPROBE_ADDRESS
# 
# ڤФʤ
# CONFIG_AGP_HP_ZX1
# CONFIG_FB_TX3912
# CONFIG_SC1200_WDT
# CONFIG_NINO_4MB
# CONFIG_HISAX_AVM_A1_CS
# CONFIG_IA64_SGI_SN_SIM
# CONFIG_IA64_SGI_SN_DEBUG
#

use strict;

if ((@ARGV == 0) or (@ARGV > 2)) {
    die "$0: Usage: splitconf FILE [DIR]\n";
}

my $wdir = '.';
if (-d $ARGV[1]) {
    $wdir = $ARGV[1];
}
my $file = $ARGV[0];
my $header_flag = 0;
my $symbol_flag = 0;
my $trans_flag = 0;
my $blankline = 0;
my $i = 0;
my @trans;
my @conf;
my @sd;
my %count;
mkdir($wdir,0755)  unless -d $wdir;

open(CONFFILE, $file) or die;
while (<CONFFILE>) {
    
    next if /^\#/;   
    
    if (/^(\S.+)$/) {
	if (/^CONFIG.+$/) {
	    $i++ if $conf[$i];	# no title
	    chomp;
	    s/\s.*$//;
	    $conf[$i]  = $_;
	    if (++$count{$conf[$i]} > 1) {
		$conf[$i] .= ".$count{$conf[$i]}"; # add suffix
	    }
	    print_item($sd[$i-1], $conf[$i-1], \@trans, $wdir) if $i > 0;
	    $symbol_flag = 1;
	    $trans_flag = 0;
	    undef @trans;
	} else {
	    if ($conf[$i])  {
		$sd[++$i] = $1;
	    } else {		# no symbol or $i == 0
		$sd[$i] = $1;
	    }
	    $symbol_flag = 0;
	}
    } else {
	if ($trans_flag and $symbol_flag) {
	    push(@trans,$_);
	} elsif ((/^  \(.+$/) and $blankline and $symbol_flag) {
	    push(@trans,$_);
	    $trans_flag = 1;
	} elsif (/^\s*$/) {
	    $blankline = 1;
	} else {
	    $blankline = 0;
	}
    }
}
print_item($sd[$i], $conf[$i], \@trans, $wdir) if $i >= 0;
close CONFFILE;

sub print_item {
    local($_);
    my ($title, $symbol, $content, $dir) = @_;

    unless(defined $symbol){
	warn "`$title' has no symbol.\n";
	return;
    }
    unless(defined $title){
	warn "`$symbol' ˤϥȥ뤬ʤΤǽǤޤǤ.\n";
	warn "ưڤФƤ.\n";
	return;
    }

    open(ITEM, "> $dir/$symbol") or die "Can't open $dir/$symbol\n";
    foreach (@$content) {
	print ITEM;
    }
    close ITEM;
}
