
![]() | ![]() |
15.21. Program: Small termcap Program
15.21.1. Description
This program clears your screen and
scribbles all over it until you interrupt it. It shows how to use
Term::Cap to clear the screen, move the cursor, and write anywhere on
the screen. It also uses Recipe 16.6.The program text is shown in Example 15-8.
Example 15-8. tcapdemo
#!/usr/bin/perl -w
# tcapdemo - show off direct cursor placement
use POSIX;
use Term::Cap;
init( ); # Initialize Term::Cap.
zip( ); # Bounce lines around the screen.
finish( ); # Clean up afterward.
exit( );
# Two convenience functions. clear_screen is obvious, and
# clear_end clears to the end of the screen.
sub clear_screen { $tcap->Tputs('cl', 1, *STDOUT) }
sub clear_end { $tcap->Tputs('cd', 1, *STDOUT) }
# Move the cursor to a particular location.
sub gotoxy {
my($x, $y) = @_;
$tcap->Tgoto('cm', $x, $y, *STDOUT);
}
# Get the terminal speed through the POSIX module and use that
# to initialize Term::Cap.
sub init {
$| = 1;
$delay = (shift( ) || 0) * 0.005;
my $termios = POSIX::Termios->new( );
$termios->getattr;
my $ospeed = $termios->getospeed;
$tcap = Term::Cap->Tgetent ({ TERM => undef, OSPEED => $ospeed });
$tcap->Trequire(qw(cl cm cd));
}
# Bounce lines around the screen until the user interrupts with
# Ctrl-C.
sub zip {
clear_screen( );
($maxrow, $maxcol) = ($tcap->{_li} - 1, $tcap->{_co} - 1);
@chars = qw(* - / | \ _ );
sub circle { push(@chars, shift @chars); }
$interrupted = 0;
$SIG{INT} = sub { ++$interrupted };
$col = $row = 0;
($row_sign, $col_sign) = (1,1);
do {
gotoxy($col, $row);
print $chars[0];
select(undef, undef, undef, $delay);
$row += $row_sign;
$col += $col_sign;
if ($row = = $maxrow) { $row_sign = -1; circle; }
elsif ($row = = 0 ) { $row_sign = +1; circle; }
if ($col = = $maxcol) { $col_sign = -1; circle; }
elsif ($col = = 0 ) { $col_sign = +1; circle; }
} until $interrupted;
}
# Clean up the screen.
sub finish {
gotoxy(0, $maxrow);
clear_end( );
}
This is what it looks like in mid-run:* _ / | \ -
* _ \ - / | / | \ - *
* _ \ - / | / | \ - *
* \ - | / | - *
_ * \ - | / / | - \ *
_ * \ - | / / | - \ *
* * \ - | / / | - \ *
* * \ - | / / | - \ *
* * \ - | / / | - \ *
* * \ - | / / | - \ *
* * \ - | / / | - \ *
* * \ - | / / | - \
* - \ | / / - \
* - * - \ | / | / - \
* - * - \ | / | / - \ _
- - \ | / _
15.21.2. See Also
termcap(5) (if you have it); the documentation
for the standard Term::Cap module
![]() | ![]() | ![]() |
15.20. Adding Text to an Image | ![]() | 15.22. Program: tkshufflepod |

Copyright © 2003 O'Reilly & Associates. All rights reserved.