#!/usr/local/bin/perl

# 
# reqtree: elisp ファイルのツリー構造を表示する
# 
#     [1997/12/05] OSHIRO Naoki. らくだ本の inctree のマネ．
# 
#     $Log:$
#

require "getopts.pl";

foreach (@ARGV) {
    &search_req($_, $reqlev);
}

sub search_req {
    local($_, $reqlev, $up)=@_;
    local(%req, $line);
    local($tmp);

    #print "  " x $reqlev;
    print "$up" if $up;
    $line=$1 if (s/ #(\d+\s*)+$//);
    $_.=".el" if (!/\.el$/);
    print "$_";
    if ($up=~m#/$_#) {
	print "[recursive]\n";
        return;
    }
    unless (open(F, "<$_")) {
	print STDERR "$up:Cannot open '$_'.\n";
	print "[not-exist]\n";
	return;
    }
    print "\n";
    $up.="$_/";
    $line=1;
    while (<F>) {
	$line++;
	next unless /^\s*\(\s*require\s+((['"]+([^\s\(\)]+)["]?)+)(\s*\))+/;
        foreach $tmp (split(/\s+/, $1)) {
            next if ($tmp=~/^(advance-preload)$/);
            $tmp=~s/^['"]//;
            $tmp=~s/"$//;
            $req{$tmp}.="$line ";
        }
    }
    $reqlev++;
    foreach (keys(%req)) {
        &search_req("$_ #$req{$_}", $reqlev, $up);
    }
}
