18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#!/usr/bin/perl
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# quick, very dirty little script so that we can put all the
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# information for building a floor book set in one spec file.
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#eg:
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# >floor_44
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# =44c0_s 44c1_s 44c2_s
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# build line_128x4_class0 0-256
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# build line_128x4_0sub0  0-4
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdie "Could not open $ARGV[0]: $!" unless open (F,$ARGV[0]);
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels$goflag=0;
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelswhile($line=<F>){
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    print "#### $line";
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if($line=~m/^GO/){
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$goflag=1;
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	next;
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if($goflag==0){
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	if($line=~m/\S+/ && !($line=~m/^\#/) ){
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    my $command=$line;
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    print ">>> $command";
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    die "Couldn't shell command.\n\tcommand:$command\n"
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels		if syst($command);
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	}
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	next;
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # >floor_44
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # this sets the output bookset file name
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if($line=~m/^>(\S+)\s+(\S*)/){
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	# set the output name
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$globalname=$1;
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$command="rm -f $globalname.vqh";
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't remove file.\n\tcommand:$command\n"
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	next;
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    #=path1 path2 path3
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    #set the search path for input files; each build line will look
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    #for input files in all of the directories in the search path and
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    #append them for huffbuild input
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if($line=~m/^=(.*)/){
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	# set the output name
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	@paths=split(' ',$1);
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	next;
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # build book.vqd 0-3 [noguard]
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if($line=~m/^build (.*)/){
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	# build a huffman book (no mapping)
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	my($datafile,$range,$guard)=split(' ',$1);
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$command="rm -f $datafile.tmp";
638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	print "\n\n>>> $command\n";
648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't remove temp file.\n\tcommand:$command\n"
658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	# first find all the inputs we want; they'll need to be collected into a single input file
688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	foreach $dir (@paths){
698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if (-e "$dir/$datafile.vqd"){
708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels		$command="cat $dir/$datafile.vqd >> $datafile.tmp";
718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels		print ">>> $command\n";
728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels		die "Couldn't append training data.\n\tcommand:$command\n"
738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels		    if syst($command);
748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    }
758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	}
768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	my $command="huffbuild $datafile.tmp $range $guard";
788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	print ">>> $command\n";
798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't build huffbook.\n\tcommand:$command\n"
808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$command="cat $datafile.vqh >> $globalname.vqh";
838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	print ">>> $command\n";
848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't append to output book.\n\tcommand:$command\n"
858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$command="rm $datafile.vqh";
888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	print ">>> $command\n";
898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't remove temporary output file.\n\tcommand:$command\n"
908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	$command="rm -f $datafile.tmp";
938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	print ">>> $command\n";
948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	die "Couldn't remove temporary output file.\n\tcommand:$command\n"
958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	    if syst($command);
968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	next;
978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}
1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels$command="rm -f temp$$.vqd";
1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsprint ">>> $command\n";
1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdie "Couldn't remove temp files.\n\tcommand:$command\n"
1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if syst($command);
1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelssub syst{
1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    system(@_)/256;
1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}
109