#!/afs/athena/contrib/perl/p

$ATTACH_PATH =	'/bin/athena/attach';
$CREF_LOCKER =	'cref';
$SA_LOCKER =	'olc-stock';
$TOP_DIR =	'/mit/cref/Ref';
$FINAL_FILE =	'/afs/.athena/contrib/consult/lib/cref/cref-tree.el';
$OUTPUT_FILE =	'/tmp/new-cref.el';
$ERR_FILE =	"/tmp/cref_gen_tmp.$$";

open(STDERR,">$ERR_FILE") || die ("Couldn't open $ERROUT: $!");

$retval = system($ATTACH_PATH,'-q',$CREF_LOCKER);
$retval = int($retval/256);
if ($retval != 0) {
    print STDERR "Couldn't attach $CREF_LOCKER: error $retval\n";
    &punt;
}

$retval = system($ATTACH_PATH,'-q',$SA_LOCKER);
$retval = int($retval/256);
if ($retval != 0) {
    print STDERR "Couldn't attach $SA_LOCKER: error $retval\n";
    &punt;
}

if (! open(OUT,">$OUTPUT_FILE")) {
    print STDERR "Couldn't open $OUTPUT_FILE: $!\n";
    &punt;
}

select(OUT);

print "(defvar cref-tree nil)\n";
print '(setq cref-tree (quote ["TOP" nil "" ';
&do_dir($TOP_DIR);
print " nil nil]))\n";

close OUT;
&punt;


#---------------------------------------------------------------------------

sub do_dir {
    print ' (';
    local($current_dir) = @_;
    local($cur_menu_file) = $current_dir . "/.index";
    local(*INDEX);
    if (! open(INDEX,$cur_menu_file)) {
	print STDERR "Couldn't open $cur_menu_file: $!";
	&punt;
    }

    while (<INDEX>) {
	next if /^\s*$/;
	local($type,$title,$loc) = split(/:/);
	$filename = $current_dir . "/$loc";
	$title =~ s/"/\\"/g;
	print STDERR "$filename does not exist\n" if (! -e $filename);
	print "[\"$title\" nil \"$filename\" ";
	if ($type eq "entry") {
	    print "entry";
	} else {
	    &do_dir($filename);
	}
	print " \"cref\" nil]\n";
    }
    close INDEX;
    print ")\n";
}

sub punt {
    close(STDERR);

    if (! -z $ERR_FILE) {
	open(ERR_OUT,"| /usr/lib/sendmail -t");
	select(ERR_OUT);
	print "To: lwvanels\n";
	print "Subject: Error from cref tree build\n\n";
	open(FOO,$ERR_FILE);
	while(<FOO>) {
	    print;
	}
	close(FOO);
	close(ERR_OUT);
	unlink($ERR_FILE);
	unlink($OUTPUT_FILE);
	exit 1;
    } else {
	unlink($ERR_FILE);
	system('mv',$OUTPUT_FILE,$FINAL_FILE);
	exit 0;
    }
}

#
# Local Variables:
# mode: perl
# End:
#
