#!/usr/bin/perl

require "../cgi-lib.pl";
use GD;
ReadParse(*params);

$building_file = "tol_b2.txt";
#$tile_gif = "btiles_0.gif";
$tile_gif = "btiles.gif";
open(BF,$building_file);
$bytes .= $_ while(<BF>);
@bytes = split /[^0-9A-Fa-f]+/,$bytes;
def_buildings();
$bid = $params{bid} || 1;
$pos = $buildings{$bid}{begin};
$end = $buildings{$bid}{end};
my($x,$y) = (0,0);
print "Content-Type: text/html\n\n" if($params{html});
print "From $pos to $end\n" if($params{html});
print "<table><tr>\n" if($params{html});

open(GIF,"$tile_gif") or error("Couldnt open $tile_gif");
$timg = newFromGif GD::Image(GIF) or error("Couldn't parse tile gif");
close GIF;

$img = new GD::Image(32*$buildings{$bid}{width},32+32*(($end-$pos+1)/$buildings{$bid}{width}),1);
$img->fill(1,1,color(255,255,255));

while($pos<=$end) {
    $vcol = hex(substr($bytes[$pos],1,1));
    $vrow = hex(substr($bytes[$pos],0,1));
    #print "<td>$bytes[$pos]</td>\n";
    #print "<td>$vrow,$vcol</td>\n";

    $img->copy($timg,$x*32,$y*32,$vcol*32,$vrow*32,32,32);

    $pos++;
    $x++;
    if($x>=$buildings{$bid}{width}) {
	$y++;
	$x=0;
	print "</tr><tr>" if($params{html});
    }
}
print "</table>\n" if($params{html});

$img->string(gdMediumBoldFont,1,$y*32,$buildings{$bid}{name},color(0,0,0));

print "Content-Type: image/gif\n\n";
print $img->gif;

sub def_buildings {
    %buildings = (
		  1 => { name => "Regent's Castle (Roof)",
			 begin => 0x0, #0,
			 end => 0x8F, #143,
			 width => 12, },
		  2 => { name => "Regent's Castle (Ground)",
			 begin => 0x90,
			 end => 0x11F,
			 width => 12, },
		  3 => { name => "Regent's Castle (Basement)",
			 begin => 0x120,
			 end => 0x1AF,
			 width => 12, },
		  4 => { name => "Warden's Castle (Roof)",
			 begin => 0x1B0,
			 end => 0x26F,
			 width => 16, },
		  5 => { name => "Warden's Castle (Ground)",
			 begin => 0x270,
			 end => 0x32F,
			 width => 16, },
		  6 => { name => "Warden's Castle (Basement)",
			 begin => 0x330,
			 end => 0x3EF,
			 width => 16, },
		  7 => { name => "House 8x4 (A) (Roof)",
			 begin => 0x3F0,
			 end => 0x40F,
			 width => 8, },
		  8 => { name => "House 8x4 (A) (Ground)",
			 begin => 0x410,
			 end => 0x42F,
			 width => 8, },
		  9 => { name => "House 4x8 (Roof)",
			 begin => 0x430,
			 end => 0x44F,
			 width => 4, },
		  10 => { name => "House 4x8 (Ground)",
			  begin => 0x0450,
			  end => 0x46F,
			  width => 4, },
		  11 => { name => "House 8x4 (B) (Roof)",
			  begin => 0x470,
			  end => 0x48F,
			  width => 8, },
		  12 => { name => "House 8x4 (B) (Ground)",
			  begin => 0x490,
			  end => 0x4AF,
			  width => 8, },
		  13 => { name => "Tiny House (Roof)",
			  begin => 0x4B0,
			  end => 0x4BF,
			  width => 4, },
		  14 => { name => "Tiny House(Ground)",
			  begin => 0x4C0,
			  end => 0x4CF,
			  width => 4, },
		  15 => { name => "2-Storey House 8x4 (Roof)",
			  begin => 0x4D0,
			  end => 0x4EF,
			  width => 8, },
		  16 => { name => "2-Storey House 8x4 (Upstairs)",
			  begin => 0x4F0,
			  end => 0x50F,
			  width => 8, },
		  17 => { name => "2-Storey House 8x4 (Ground)",
			  begin => 0x510,
			  end => 0x52F,
			  width => 8, },
		  18 => { name => "2-Storey Inn (Roof)",
			  begin => 0x530,
			  end => 0x58F,
			  width => 12, },
		  19 => { name => "2-Storey Inn (Upstairs)",
			  begin => 0x590,
			  end => 0x5EF,
			  width => 12, },
		  20 => { name => "2-Storey Inn (Ground)",
			  begin => 0x5F0,
			  end => 0x64F,
			  width => 12, },
		  21 => { name => "Square Inn (Roof)",
			  begin => 0x650,
			  end => 0x68F,
			  width => 8, },
		  22 => { name => "Square Inn (Ground)",
			  begin => 0x690,
			  end => 0x6CF,
			  width => 8, },
		  23 => { name => "Ganestor Inn (Roof)",
			  begin => 0x6D0,
			  end => 0x70F,
			  width => 8, },
		  24 => { name => "Ganestor Inn (Ground)",
			  begin => 0x710,
			  end => 0x74F,
			  width => 8, },
		  25 => { name => "Ganestor Inn (Basement)",
			  begin => 0x750,
			  end => 0x78F,
			  width => 8, },
		  26 => { name => "Shadow Peak (Upstairs)",
			  begin => 0x790,
			  end => 0x7EF,
			  width => 12, },
		  27 => { name => "Shadow Peak (Ground)",
			  begin => 0x7F0,
			  end => 0x84F,
			  width => 12, },
		  28 => { name => "Temple of Angor (Upstairs)",
			  begin => 0x850,
			  end => 0x8AF,
			  width => 12, },
		  29 => { name => "Temple of Angor (Ground)",
			  begin => 0x8B0,
			  end => 0x90F,
			  width => 12, },
		  30 => { name => "Temple of Angor (Basement)",
			  begin => 0x910,
			  end => 0x96F,
			  width => 12, },
		  31 => { name => "Tower (Roof)",
			  begin => 0x970,
			  end => 0x97F,
			  width => 4, },
		  32 => { name => "Tower (Ground)",
			  begin => 0x980,
			  end => 0x98F,
			  width => 4, },
		  33 => { name => "Everything at Once!",
			  begin => 0x0,
			  end => 0x98F,
			  width => $params{width} || 16, },
		  );
}

sub error {
    print "Content-Type: text/html\n\n";
    print "Error! $_[0]<br>\n";
    exit(1);
}

sub color {
    my($r,$g,$b) = @_;
    if(!defined($pal{"$r\_$g\_$b"})) {
        $pal{"$r\_$g\_$b"} = $img->colorAllocate($r,$g,$b);
    }
    return $pal{"$r\_$g\_$b"};
}
