The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use blib;

use Tk;
use Tk::Pgplot;
use PGPLOT;

# Start by testing that we can find the ptk pgplot driver
# If it is not present, something is wrong

my ($ndrivers,$n,$type,$tlen,$descr,$dlen,$inter, $dummy);
pgqndt($ndrivers);

my $foundit=0;
for $n (1..$ndrivers) {
  pgqdt($n,$type,$dummy,$dummy,$dummy,$dummy);
  if (uc($type) eq '/PTK') {
    $foundit = 1;
    last;
  }
}
if (!$foundit) { # Not present in list of drivers
warn<<EOF

*** Could not find PTK pgplot driver ***

This is probably caused by linking with the wrong version of pgplot 
(try "ldd blib/arch/auto/Tk/Pgplot/Pgplot.so") or a compilation mismatch.
Have you compiled pgperl since you patched pgplot? 

EOF
  ;
exit 0;
}

sub Plotit() {
  my $img="";
  open(IMG,"test.img") || die "Data file test.img not found";
  read(IMG, $img, 32768);
  close(IMG);

  my @image = unpack("n*",$img);

  if (pgopen('pgtest/ptk') <=0) {
    die "Could not open pgplot device\n";
  }

  pgsci(3);
  pgwnad(12000,13000,13000,12000);

  my @tr=(12000,8,0,12000,0,8);

  pgimag(\@image,128,128,1,128,1,128,0,5000,\@tr);
  pglabel("\\ga","\\gd","Galaxy");
  pgtbox("ZYHBCNST",0,0,"ZYDBCNST",0,0);

  my @l=(0,0.004,0.502,0.941,1); 
  my @r=(0,0,1,1,1); 
  my @g=(0,0,0.2,1,1); 
  my @b=(0,0.2,0,0.1,1);

  pgctab(\@l,\@r,\@g,\@b,5,1,0.5);

  pgsci(4); pgsls(1);
  my @cont = (-1,1000,2000,3000,4000,5000);
  pgcons(\@image, 128, 128, 1,128,1,128, \@cont, 6, \@tr);

  for(@cont){
    pgconl(\@image, 128, 128, 1,128,1,128, $_, \@tr, $_,200,100);
  }

  my @xbox;
  my @ybox;
  pgsci(4);
  pgscf(2);
  pgqtxt(12125,12100,45,0.5,'PGPLOT...',\@xbox,\@ybox);
  pgpoly(4,\@xbox, \@ybox);
  pgsci(7);
  pgptxt(12125,12100,45,0.5,'PGPLOT...');

  pgclos();
}

my $mw = MainWindow->new;

my $quit = $mw->Button(-text    => 'Quit',
		      -command => sub {exit;})->pack;

my $plot = $mw->Button(-text    => 'Plot',
		      -command => \&Plotit)->pack;

my $w = $mw->Frame()->pack;
# This is NOT a good choice of colours!
my $pgplot = $w->Pgplot(-name => 'pgtest',
			-width => '15c',
			-height => '15c',
			-bg => 'ivory',
			-fg => 'blue',
			-maxcolors => 64,
			-cursor => 'hand2',
			-relief => 'groove',
			-borderwidth => 5,
			-highlightbackground => 'red',
			-highlightcolor => 'green',
			-takefocus => 1
		       );

# Respond to key strokes
$pgplot->bind('<KeyPress>' => [sub {print "Pressed $_[1]\n"}, Ev('A')]);

# Add scroll bars. This does not seem to work see the demo
my $xscroll = $w->Scrollbar(-orient => 'horizontal',
			     -command => ['xview', $pgplot]);
my $yscroll = $w->Scrollbar(-orient => 'vertical',
			     -command => ['yview', $pgplot]);


$pgplot->configure(-xscrollcommand => ['set', $xscroll]);
$pgplot->configure(-yscrollcommand => ['set', $yscroll]);

$xscroll->pack(-side => 'bottom',
	       -fill => 'x');
$yscroll->pack(-side => 'right',
	       -fill => 'y');
$pgplot->pack(-side => 'left',
	      -fill => 'both',
	      -expand => 1);

MainLoop;