#!/usr/bin/perl

use GD;
$max = 512;
$extra = 11;

$img = new GD::Image($max+$extra,$max+$extra,1);
$img->fill(10,5,color(255,255,255));

$center = ($max / 2) + ($extra / 2);

for(my $radius = 2;$radius <= $max / 2;$radius += 2) {
    draw_circle($center,$radius);
}

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

sub draw_circle {
    my($center,$radius) = @_;

#    $img->arc($center,$center,$radius*2,$radius*2,0,360,color(0,0,0));

    my($lasty,$x);
    $lasty = -1;
    for($x=int($center-$radius);$x <= $center+$radius; $x++) {
	if($radius*$radius > (($center-$x)*($center-$x))) {
	    $y = int(sqrt($radius*$radius-($center-$x)*($center-$x)));
	    $img->setPixel($x,$center+$y,color(0,0,0));
	    $img->setPixel($x,$center-$y,color(0,0,0));
	    if($lasty == -1) {
		for(my $ey=0;$ey<=$y;$ey++) {
		    $img->setPixel($x,$center+$ey,color(0,0,0));
		    $img->setPixel($x,$center-$ey,color(0,0,0));
		}
	    }
	    if($y > $lasty+1) {
		for(my $ey=$y;$ey>$lasty;$ey--) {
		    $img->setPixel($x,$center+$ey,color(0,0,0));
		    $img->setPixel($x,$center-$ey,color(0,0,0));
		}
	    }

	    if($y < $lasty-1) {
		for(my $ey=$y;$ey<$lasty;$ey++) {
		    $img->setPixel($x,$center+$ey,color(0,0,0));
		    $img->setPixel($x,$center-$ey,color(0,0,0));
		}
	    }
	    $lasty = $y;
	}
    }
    # finish the last vertical
    for(my $ey = $y-1;$ey>=0;$ey--) {
	$img->setPixel($x,$center+$ey,color(0,0,0));
	$img->setPixel($x,$center-$ey,color(0,0,0));
    }

#    for($angle=0;$angle<360;$angle+=0.05) {
#	my($rad) = ($angle * 3.14159265359) / 180;
#	my($dx) = $radius * cos($rad);
#	my($dy) = $radius * sin($rad);
#	my($x) = $center+$dx;
#	my($y) = $center+$dy;
#	my($offx) = $x - int($x);
#	my($offy) = $y - int($y);
#	my($d) = sqrt($offx**2+$offy**2);
#	if($d < 0.9) {
#	    $img->setPixel(int($x),int($y),color(0,0,0));
#	}
#    }
}

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"};
}
