#! /usr/bin/perl
#
# color.cgi
# Display color code and actual color.
#
# http://www.hidekik.com/
#
# $Id: color.cgi,v 1.3 2006/11/16 16:50:19 Hideki Kanayama Exp $
# Copyright(c) 2006, Hideki Kanayama All Rights Reserved
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-Type:text/html\n\n";
my $zero = 0;
my $end = 256 * 256 * 256 - 1;
my $offset = 4096;
my $script = "color.cgi";
my $data;
if ($ENV{"REQUEST_METHOD"} eq "POST"){
read(STDIN,$data,$ENV{"CONTENT_LENGTH"});
} else {
$data = $ENV{"QUERY_STRING"};
}
my @tmparry=split(/&/,$data);
my ($key, $value);
my %all;
foreach my $string (@tmparry){
($key,$value)=split(/=/,$string);
$value =~ tr/+/ /;
$all{"$key"}=$value;
}
my $from;
my $to;
if ($all{from} eq 'all'){
$from = $zero;
$to = $end;
} else {
$from = $all{from};
$to = $from + $offset;
}
print "\n";
print "
\n";
print "\n";
print "\n";
print "\n";
print "解説ページへ
\n";
print "\n";
print "| \n";
&showlist;
print " | \n";
my $i;
my $j;
print "\n";
for($i=$from;$i<$to;$i=$i+16){
print "\n";
for($j=0;$j<=15;$j=$j+1){
&display;
}
print " \n";
}
print " ";
print " |
\n";
print "
\n";
print "\n";
exit;
sub showlist {
for($i=$zero;$i<=$end;$i=$i+$offset){
my $printi = $from + $i - $offset * 3;
if ($printi < $zero) {$printi = $printi + $end + 1;}
if ($printi > $end) {$printi = $printi - $end - 1;}
my $xhex = sprintf("%06x",$printi);
my $x_reverse = &get_reverse($printi);
print "\n";
}
}
sub display {
my $x=$i+$j;
my $xhex = sprintf("%06x",$x);
my $x_reverse = &get_reverse($x);
print "";
printf("#$xhex | \n",$x);
}
sub get_reverse {
my $x = shift;
my $tmp1 = int($x/256);
my $top = int($tmp1/256);
my $mid = $tmp1 - $top * 256;
my $bot = $x - $mid * 256 - $top * 65536;
# my $reverse_top = 255 - $top;
# my $reverse_mid = 255 - $mid;
# my $reverse_bot = 255 - $bot;
my $reverse_top;
my $reverse_mid;
my $reverse_bot;
my $thres = 200;
if ((($top >= $thres) + ($mid >= $thres) + ($bot >= $thres)) >= 2) {
$reverse_top = 0;
$reverse_mid = 0;
$reverse_bot = 0;
} else {
$reverse_top = 255;
$reverse_mid = 255;
$reverse_bot = 255;
}
my $x_reverse_top = sprintf("%02x",$reverse_top);
my $x_reverse_mid = sprintf("%02x",$reverse_mid);
my $x_reverse_bot = sprintf("%02x",$reverse_bot);
my $x_reverse = $x_reverse_top . $x_reverse_mid . $x_reverse_bot;
return $x_reverse;
}