#!/usr/bin/perl
my $hex, $content_length;
#### Get parameters ####
# The query is included in the pathname, eg /foo/gif.pl/bl-ff00cc.gif
# where this script is /foo/gif.pl.
$ENV{REQUEST_URI} =~ m:.*/(..?)-([0-9a-f]{6})\.gif$:;
my ($type, $rgb) = ($1, $2);
#### Make GIF ####
if ($type eq 'bl') {
# Bottom Left corner
$hex = "47494638396117001700800000".$rgb
."ffffff21f90401000001002c00000000"
."170017000002348c8fa9cb6de06280b2"
."d1ba2e4e7a1fd079a0c78de4639e602a"
."aee7b48652cc56741dddb8a5cb59bf2b"
."0183a8a1eb67d47d92c002003b";
} elsif ($type eq 'br') {
# Bottom Right corner
$hex = "47494638396117001700f00000".$rgb
."00000021f90401000001002c00000000"
."170017000002358c8fa901ebdb9e6471"
."3a50adc2fae67e7020827d603986684a"
."8963e99e700ac7566d4b78eeeddabe7a"
."0067bd21cf883320974c6001003b";
} elsif ($type eq 'tr') {
# Top Right corner
$hex = "47494638396117001700800000".$rgb
."ffffff21f90401000001002c00000000"
."170017000002328c8fa908ed0fe38ad4"
."2d53e5c5b96d967d20258e50695ae8a1"
."ad9cea0667fc02747dbfb9eced7dfebb"
."0569c358d1b8c31400003b";
} elsif ($type eq 'tl') {
# Top Left corner
$hex = "47494638396117001700800000".$rgb
."ffffff21f90401000001002c00000000"
."170017000002308c8fa907ed0f218b14"
."ac50e5c5d96e937d48258e51693e68da"
."acacfbc2602bcf5e4dd79c0ef2bd7fd3"
."0571bea2315000003b";
} elsif ($type eq 'l') {
# Left line end
$hex = "47494638396113002500f00000".$rgb
."00000021f90401000001002c00000000"
."13002500000247848f09c1ea0c834331"
."ce55edcb3af1aa7c2025765809916863"
."ac9d9b9e700bb37573e3b93ce792cf73"
."0557b45a71362c1d6e4b6353f824aa50"
."21a987ba115d94976437cafa3e0b003b";
} elsif ($type eq 'r') {
# Right line end
$hex = "47494638396113002500f00000".$rgb
."00000021f90401000001002c00000000"
."130025000002498c81a90be6c1e27b51"
."cd59dba572f3e56160f821a4689e8ea5"
."ae690bbdb0dcd2aa7dc394bef2870f01"
."6a78c359b176bc25490922cec3423e2f"
."a31343598576b45b54859a691ec28b02"
."003b";
} elsif ($type eq 'rc') {
# Right Corner (tabs)
$hex = "47494638396106000600800000ffffff"
.$rgb. "21f90401000000002c00000000"
."0600060000020a447ea0a81bbda091a0"
."00003b";
} elsif ($type eq 'lc') {
# Left Corner (tabs)
$hex = "47494638396106000600800000".$rgb
."ffffff21f90401000001002c00000000"
."06000600000209841d178b9bcea05c05"
."003b";
} elsif ($type eq 'ra') {
# Right Arrow
$hex = "4749463839610c000b00800000".$rgb
."ffffff21f904010a0001002c00000000"
."0c000b000002168c0fa70ab9dc509bd4"
."d01bb1de993f1b7d41283a4701003b";
} else {
exit 0;
}
$content_length = length($hex)/2;
#### HTTP headers ####
# Generate expires header 1 day from now. Borrowed from CGI/Util.pm.
my(@MON) = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/;
my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time() + 24*3600);
$year += 1900;
$expires = sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
$WDAY[$wday],$mday,$MON[$mon],$year,$hour,$min,$sec);
print "Expires: $expires\n";
print "Cache-Control: public\n";
print "Content-Type: image/gif\n";
print "Content-Length: $content_length\n";
print "Last-Modified: Mon, 28 Oct 2002 12:00:00 GMT\n";
print "\n";
#### Output GIF ####
print pack('H*', $hex);