#!/usr/local/bin/perl

# make-proceedings.pl: build proceedings out of several files

# order: papers in the order they should be included
# *.ps: papers in postscript form
# creates the files
# - 'pagenumbers' with the start page of each article
# - 'allpapers' with each of the pages individually wrapped

$start_page = 7;		# allow this much for title, etc.

@numbers = ("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", 
	    "ten", "eleven", "twelve", "thirteen", "fourteen");

&main();

sub main {
    my($currentpage) = $start_page;
    open(PAGENUMBERS, "> pagenumbers.tex") || die "cannot open pagenumbers";
    open(ALLPAPERS, "> allpapers.tex") || die "cannot open allpapers";
    
    open(P, "< order") || die("Cannot read the order.");
    my(@papers) = <P>;
    close(P);
    my($number, $paper, $base);

    foreach (@papers) {
	my($paper) = $_;
	chop;
	s/\#.*//g;		# cut "comments"
	if (/^\s*$/) { next; }	# ignore empty lines
	(-f $paper) && die "Cannot open file '$_'";
	if (/stop/) { exit 0; }	# stop here
	
	$paper =~ /^(.*)\.ps/;
	$base = $1;		# basename
	my($pages) = &convert($base);
	
	print PAGENUMBERS "\\renewcommand{\\" . $numbers[$number] . "}{" . $currentpage . "}\n";
	print "$pages pages\n";
	$currentpage += $pages;						   
	$number++;		# paper number
    }
    
    close(PAGENUMBERS);
    close(ALLPAPERS);
}


sub psystem {
    print @_[0], "\n";
    return system(@_[0]);
}


sub convert {
    my($base) = $_[0];

    &psystem("ps2ps $base.ps x.ps");
    my($page)=1;
    while (1) {
	print "psselect -p$page x.ps $base-$page.ps 2>&1\n";
	my($res) = `psselect -p$page x.ps $base-$page.ps 2>&1`;
	if ($res =~ /\s0\s/) { last; }
	&psystem("ps2epsi $base-$page.ps");
	&psystem("rm -f $base-$page.ps");
	print ALLPAPERS "\\pageimage{$base-$page.epsi}\n\\newpage\n";
	$page++;
    }
    &psystem("rm -f x.ps");
    return $page-1;
}
