#!/usr/bin/perl

				# Perl version of mk_doc to extract
				# documentation headers from HI-SCALE
				# software for preparation of the
				# programmer's manual.

require 'find.pl';
my $scratch = '/scr3';
my $scrdir = $scratch.'/'.$ENV{'USER'}.'/smeidocfil';

system "rm -rf $scrdir"; # Do it as a system call as
				      # unlink/rmdir don't have a -r
				      # type option.

mkdir ($scrdir, 0755) || die "Can't make directory: $!\n";

&find ('.');

@filelist = sort @filelist;

FILE:
foreach $f (@filelist) {
    if ($f =~ m#^\./([^/]+)/(.+)/([^/]+)\.pro$#) {
	$td = $1;
	$sd = $2;
	$ss= $3;
    } elsif ($f =~ m#^\./([^/]+)/([^/]+)\.pro$#) {
	$td = $1;
	$sd = "top";
	$ss= $2;
    } elsif ($f =~ m#^\./([^/]+)\.pro$#) {
	$td = "top";
	$sd = "top";
	$ss= $1;
    } else {
	$td="error";
	$sd="error";
	$ss="error";
    }
    print "$f -> $td $sd $ss\n";

    $ss =~ s/__/::/g;
    $ss =~ s/::define/__define/;
    $ss =~ s/_/\\_/g;

    $sdu=$sd;
    $sdu =~ s+/+_+g;

    open (OUT, ">>$scrdir/${td}_${sdu}.tex") ||
	warn "Can't open $td/$sd output: $!\n";
    ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, @rest) = 
	stat(OUT);

    $sd =~ s/_/\\_/g;
    $uf = $f;
    $uf =~ s/_/\\_/g;
    $uf =~ s+^\./++;

#     if ( $size == 0 ) {
# 	print OUT
# 	    '\subsection{',$sd,'}',"\n\n",
# 	    '\subsubsection{\tt ',$ss,'}',"\n\n",
# 	    'Source: {\tt ',$uf,'}',"\n\n",
# 	    '\small',"\n",
# 	    '\begin{verbatim}', "\n";
#     } else {
	print OUT
	    '\subsection{\tt ',$ss,'}',"\n\n",
	    'Source: {\tt ',$uf,'}',"\n\n",
	    '\small',"\n",
	    '\begin{verbatim}', "\n";
#    }
    open (IN, $f) || warn "Can't open $f: $!\n";
  LINE:
    while (<IN>) {
	next LINE unless /^;+/.../^;-/;
	last LINE if /^;-$/ || ! /^;/;
	s/^;//;
	1 while s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; #untabify
	print OUT $_ unless /^\+/ #if $_ ne "\+\n";
    }
    print OUT
	'\end{verbatim}',"\n",
	'\normalsize', "\n\n";

    close (IN);
    close (OUT);
}


sub wanted {
    /^.*\.pro$/ &&
	(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
	    ($filelist[++$#filelist] = $name);
}
