The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Window - Create a virtual window into a MxN grid of data.

SYNOPSIS

  use Window;
  my $vp = Window->new(
   viewport => [3,3], # Define a 3x3 window onto a chessboard
   grid     => [ [qw(R N B K Q B N R)], # Pieces represented as text
                 [qw(P P P P P P P P)],
                 [(undef) x 8], # And blank squares as undef
                 [(undef) x 8], 
                 [(undef) x 8],
                 [(undef) x 8],
                 [qw(p p p p p p p p)],
                 [qw(r n b q k b n r)] ] );
  print $vp->square(0,0); # 'R' is the TR square in the viewport
  $vp->down;
  $vp->right;
  print $vp->square(0,0); # 'P' is now the TR square after moving down and right
  $vp->set_square(0,0,' ');$vp->set_square(0,1,'P'); # Move the pawn

DESCRIPTION

Given a two-D array of data, this module creates a smaller window onto the dataset that can be moved around with left(), down() &c methods. Use the square($x,$y) method to get the data in a square relative to the upper-left corner of the window, and view() to get the entire window's worth of data.

In addition, you can place a virtual cursor within the window, and use the curs_left(), curs_down() &c methods to move that cursor within the window. When the cursor reaches a boundary, the window moves, not the cursor.

The left(), right(), up() and down() routines return whether the window was moved or not. The only time the window can't be moved is when it's against a border.

curs_right() &c likewise signal if the window couldn't be moved. The data grid doesn't wrap around, as it doesn't really make sense to wrap around a chessboard.

SEE ALSO

perl(1)

AUTHOR

Jeffrey Goff, <jgoff@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2004 by Jeffrey Goff

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.