SUPERPACMAN

Jun 11, 2010 22:16

Раз уж geocities уничтожила мою домашнюю страничку, хотя, помнится, обещала хранить вечно, придется поместить это здесь. Речь снова идет о стародавних временах когда компьютеры были большие а мы - маленькие.

Большой популярностью тогда пользовались машины типа PDP-11, операционные системы типа RSX-11 а также игры типа той которую я сейчас предложу вашему вниманию.

SUPERPACMAN - это классика интерактивных (кажется, их еще называли экранными) игр pre-PC эры.

+-----------------------------------------------------------------------------+X | . | | . . . . . . . <$> . . . . |X | . +-------+ +-----------------+ | | . +-----------------+ +-------+ . |X | @ | | | | | | . | | | | @ | | . +-------+ +-----------------+ +-+ . +-----------------+ +-------+ . | | . . . . . . . . . . . . . . | | . +-------+ +-------+ . +---------------------+ . +-------+ . +-------+ . | | . | | | | . . . . | | . . . . | | . | | . | | . | | | +---------+ . +-+ . +---------+ | . +-------+ . | | . +-------+ | | =O= | | . . . . . | | . . . . | | +--+ + +--+ +-------------+ . +-----------+- +-----------+ +-------------+ | | . | | +-------------+ . +-----------+- +-----------+ +-------------+ +---------+ | | . . . +-----| | | | =O= | | . +-+ . . . | | +-------+ +-------------+ =========== +-------------+ . | |-----+ . | | | | . . . . . . . . | | . . @ | |-----+ +-+ +-------+ . +---------------------+ . +-------+ . +-+ . +-----| | . . | | . | 132 | . | | . . . . . | | . +-----------+ | . +---------| |---------+ . | +-----------+ . | | . | | . . . . | | . . . . | | . | | . +-----------------------------+ . +-+ . +-----------------------------+ . | | . . . . . . . . <->. . . . . . . . . . <-> . . . . . | +-----------------------------------------------------------------------------+


Мы часами просиживали за клавиатурой на которой лишь четыре клавиши были по настоящему важны: UP, DOWN, LEFT и RIGHT arrows. Программа называлась, помнится, "SP" и всячески мы пытались пропатчить файл программы чтобы облегчить и разнообразить себе игру. В конце концов, мне это надоело и, к тому времени когда появился PERL4, я просто изготовил клон игры на этом простом языке. Теперь можно было сколько угодно корректировать алгоритм ее работы. Правда, к этому моменту я уже потерял к SP интерес.

Но программка осталась и до сих пор работает, хотя на дворе уже PERL5 (и даже, говорят, PERL6). Ниже любители старенького смогут обнаружить весь текст программы. Он не слишком большой. Просто CUT&PASTE его и натравите PERL. ANSI-эмуляция терминала должна быть включена. Приятного путешествия в прошлое!

#!/usr/bin/perl

#
# SUPER PACMAN
#
#
# Perl ANSI version by Sergey Lukashevich (lukash33@mail.ru)
#
# Use xterm, ANSI or VT100 or VT220 terminals.
# Under DOS/Windows install the ANSI.SYS driver
#

#
# Usage: perl sp.pl [number of dogs in the pac]
#

#
# Keys:
#
# TAB - immediately quit
# 4,8,5,6 - left,up,down,right
# + - faster
# - - slower
# arrow keys - the same
#

use Term::ReadKey;

$| = 1;

sub ClearScreen() { print "\033[H\033[2J"; }
sub WrapON() { print "\033[?7h"; }
sub CursorON() { print "\033[?25h"; }
sub CursorOFF() { print "\033[?25l"; }
sub delay() { my($sec)=$_[0]; select(undef,undef,undef,$sec); }

$RandMax=1000000;

sub mv() { # Move cursor
my($str,$col)=@_;
($col<=0) ?
printf("\033[%d;%dH",($str-1,$col+80)) :
printf("\033[%d;%dH",($str,$col));
}

$uk='8';$lk='4';$rk='6';$dk='5'; # keypad direction keys

$Fury=1; # The fury of the dogs

$firstlab=0;

$nlabs = 5; # The total number of labirinths

$GOODU = $GOODD = $GOODR = $GOODL = ' .@';
$DOG0 = '=O=';
$DOG1 = '---';
$DOG2 = '<->';
$MAN1 = '<$>';
$MAN2 = '>$<';

# Directions: all are bits from one bite
$MU= 0001; # Man Up
$MD= 0002; # Man Down
$ML= 0004; # Man Left
$MR= 0010; # Man Right

$PU= 0020; # Pac Up
$PR= 0040; # Pac Right
$PL= 0100; # Pac Left
$PD= 0200; # Pac Down

sub wrong() { ($dir,$str,$col)=@_; (!($r[$str][$col]& $dir)); }
sub right() { ($dir,$str,$col)=@_; ($r[$str][$col]& $dir); }

$clast = "";

sub finish() # Finish the game. Restore screen. Exit
{ ClearScreen(); CursorON(); ReadMode 0; exit(0); }

sub copylab() {
my($i,$j) = (0,0);
my($l);
my(@lab);
do {
my($lab) = "";
my($here) = 0;
open(LABS,"<$0");
while() {
last if($here && /EndOfData/);
if(/^\$Labs\[$curlab\]/) {
$here=1;
next;
}
$lab .= $_ if($here);
}
@lab = unpack("c*",$lab);
};
$TheRest=0;
for(@lab) {
$_ = pack("c",$_);
if($_ eq "\n") {
if($j<80) {
my($rest_of_line);
for($rest_of_line=++$j;$rest_of_line<=80;$rest_of_line++) {
$screen[$i+1][$rest_of_line] = ' ';
}
}
$j=0;
$i++;
next;
}
$screen[$i+1][++$j] = $_;
if($_ eq '.') { $TheRest++; next; }
if($_ eq '@') { $TheRest +=10; next; }
}
}

sub wrng() {
my($dir,$str,$col) = @_;
( ($dir==$PL) && index($GOODL,$screen[$str][$col-2] )<0 )
||
( ($dir==$PR) && index($GOODR,$screen[$str][$col+2] )<0 )
||
( ($dir==$PU) &&
( index($GOODU,$screen[$str-1][$col])<0 ||
index($GOODU,$screen[$str-1][$col-1])<0 ||
index($GOODU,$screen[$str-1][$col+1])<0 )
)
||
( ($dir==$PD) &&
( index($GOODD,$screen[$str+1][$col])<0 ||
index($GOODD,$screen[$str+1][$col-1])<0 ||
index($GOODD,$screen[$str+1][$col+1])<0 )
);
}

sub trax() {
my($i,$j);
my(@fig) = qw( +O+ <$> O+O =O= );
my($sec)=0.08;
for($i=0;$i<10;$i++) {
do mv($ManStr,$ManCol-1); print($fig[$i%($#fig+1)]); do delay($sec);
}
}

sub wrngs() {
my($i,$j);
for($i=1;$i<=24;$i++) { for($j=1;$j<=80;$j++) {
$r[$i][$j] = 0;
$r[$i][$j] |= $PL | $ML if(! &wrng($PL,$i,$j));
$r[$i][$j] |= $PR | $MR if(! &wrng($PR,$i,$j));
$r[$i][$j] |= $PU | $MU if(! &wrng($PU,$i,$j));
$r[$i][$j] |= $PD | $MD if(! &wrng($PD,$i,$j));
}}
$r[12][80] |= $PR | $MR;
$r[12][79] |= $PR | $MR;
$r[13][2 ] |= $PL | $ML;
$r[13][1 ] |= $PL | $ML;
$r[12][40] = $PU | $PD; # "+"
$r[13][40] = $PU; # "!!"
}

sub game() {
my($i,$j);
my($cc);
$curlab=$firstlab;
$firstlab=0;
$Score=$prem=0;
$livesmax=3;
forever: while(1) {
$Delay = $Delay * 0.99;
do delay(0.5);
ClearScreen();
CursorOFF();
$RestOfTime=0;
copylab();
wrngs();
$MAN=0;
$lives=$livesmax+1;
for(;;) {
for($j=0;$j<$NDOGS;$j++) {
$Dogs{"$j DogNDir"}=$PD;
$Dogs{"$j DogN"}=\&pac0;
$Dogs{"$j PACn"}= $DOG0;
$Dogs{"$j DogNStr"}= 13;
$Dogs{"$j DogNCol"}= 42;
}
$lives--;
$livesmax=$lives;
return(0) if(!$lives);
$screen[$lives][80]=' ';
$ManStr=17; $ManCol=40;
$ManDir=0;
for($i=1;$i<=24;$i++) {
$screen[$i][80] = 'X' if($i<$lives);
do mv($i,1);
my($j);
my($line) = "";
for($j=1;$j<=80;$j++) {
$line .= $screen[$i][$j];
}
print($line);
}
score(0);
for($j=0;$j<$NDOGS;$j++) {
do mv($Dogs{"$j DogNStr"},$Dogs{"$j DogNCol"}-1);
print($Dogs{"$j PACn"});
}
do mv($ManStr,$ManCol-1);
print($MAN1);
$step = \&step1;
CursorOFF();
do delay(0.5);
for(;;) {
if($cc=&$step()) {
last if(!(--$cc));
next forever if(!(--$cc));
};
}
}
}
}

do
{
my($i);
$myself=$0;
ReadMode 3;
$NDOGS = ($#ARGV==0) ? $ARGV[0] : 4;
ClearScreen();
WrapON();
srand;
do mv(13,33);
empty();
print("Are you ready? ");
for(;;) {
my($answer);
$answer = ReadKey(0);
finish() if(!($answer =~ /Y/i));
$Delay = 0.08;
game();
empty();
ClearScreen();
do mv(13,33);
print("ONCE MORE?");
}
};

sub empty() { # Empty keyboard input queue
while(ReadKey(-1)) {;}
}

sub step1() {
my($cc,$j);
return($cc) if($cc=man());
for($j=0;$j<$NDOGS;$j++) {
$pacdir = \$Dogs{"$j DogNDir"};
$DogCol= \$Dogs{"$j DogNCol"};
$DogStr= \$Dogs{"$j DogNStr"};
$PAC= \$Dogs{"$j PACn"};
$pac = $Dogs{"$j DogN"};
&$pac($j);
}

$REV=0;
return(0);
}

sub step2() {
my($cc,$j);

return($cc) if($cc=man());

for($j=0;$j<$NDOGS/2;$j++) {
$pacdir = \$Dogs{"$j DogNDir"};
$DogCol= \$Dogs{"$j DogNCol"};
$DogStr= \$Dogs{"$j DogNStr"};
$PAC= \$Dogs{"$j PACn"};
$pac = $Dogs{"$j DogN"};
&$pac($j);
}

return($cc) if($cc=man());

for(;$j<$NDOGS;$j++) {
$pacdir = \$Dogs{"$j DogNDir"};
$DogCol= \$Dogs{"$j DogNCol"};
$DogStr= \$Dogs{"$j DogNStr"};
$PAC= \$Dogs{"$j PACn"};
$pac = $Dogs{"$j DogN"};
&$pac($j);
}

$REV=0;
return(0);
}

sub check() { my($N) = $_[0];
if($ManCol==$Dogs{"$N DogNCol"} && $ManStr==$Dogs{"$N DogNStr"}) {
if($Dogs{"$N DogN"}==\&pac0) { trax(); return(1); }
if($Dogs{"$N DogN"}==\&pac2) {
$WHICH++;
$Dogs{"$N DogN"}=\&pac1;
$Dogs{"$N PACn"}=$DOG1;
score($WHICH*20);
}
}
return 0;
}

sub ManUp() {
do mv($ManStr--,$ManCol-1); print(" ");
do mv($ManStr, $ManCol-1); print(($MAN= !$MAN)?$MAN1:$MAN2);
}

sub ManDown() {
do mv($ManStr++,$ManCol-1); print(" ");
do mv($ManStr, $ManCol-1); print(($MAN= !$MAN)?$MAN1:$MAN2);
}

sub ManLeft() {
do mv($ManStr,$ManCol-2); print((($MAN= !$MAN)?$MAN1:$MAN2)." ");
if($ManCol==1) {
$ManCol=80; $ManStr--;
} else { $ManCol--; }
}

sub ManRight() {
do mv($ManStr,$ManCol-1); print(" ".(($MAN= !$MAN)?$MAN1:$MAN2));
if($ManCol==80) {
$ManCol=1; $ManStr++;
} else { $ManCol++; }
}

sub man() {
my($c,$j);
my($dir);
if(!($RestOfTime--)) {
$REV=1;
$step=\&step1;
for($j=0;$j<$NDOGS;$j++) {
if($Dogs{"$j DogN"}==\&pac2) {
$Dogs{"$j DogN"}=\&pac0;
$Dogs{"$j PACn"}=$DOG0;
};
}
};
for($j=0;$j<$NDOGS;$j++) {
return 1 if(&check($j));
}
if(!$TheRest) {
$curlab = ($curlab+1)%$nlabs;
return(2);
};
$infobuf = ReadKey($Delay);
do {$Delay = $Delay * 0.8; return;} if($infobuf eq "+");
do {$Delay = $Delay / 0.8; return;} if($infobuf eq "-");
if($infobuf eq "\033") {
my($c1) = ReadKey(0);
if($c1 eq 'O') {
$_ = ReadKey(0);
switch: {
$infobuf = $uk, last switch if(/A/);
$infobuf = $lk, last switch if(/D/);
$infobuf = $rk, last switch if(/C/);
$infobuf = $dk, last switch if(/B/);
$infobuf = $dk, last switch if(/ /);
}
}
}
while(1) {
$c = "";
if($infobuf) {
$c=$infobuf;
$infobuf=$clast="";
} elsif($clast) {
$c=$clast;
$clast = $infobuf ? $infobuf : "";
$infobuf="";
}
last if(!$c);
next if(($c ne $lk)&&($c ne $uk)&&($c ne $rk)&&($c ne $dk)&&($c ne "\t"));
finish() if($c eq "\t");
$dir = $c eq $lk ? $ML : $c eq $uk ? $MU : $c eq $rk ? $MR : $MD;
if(&right($dir,$ManStr,$ManCol)) {
$ManDir = $dir;
goto L2;
} else {
$clast = $c;
}
last;
}
if(&wrong($ManDir,$ManStr,$ManCol)) {
do mv($ManStr,$ManCol-1);
print(($MAN= !$MAN)? $MAN1 : $MAN2);
goto CH;
};
L2:;
if ($ManDir==$ML) {ManLeft();}
elsif ($ManDir==$MR) {ManRight();}
elsif ($ManDir==$MU) {ManUp();} else
{ManDown();}
CH:;
$_ = $screen[$ManStr][$ManCol];
;#/ / && ;
/\./ && do { score(1); $TheRest--; $screen[$ManStr][$ManCol] = ' '; };
/\@/ && do {
$WHICH=0;
$RestOfTime=int(300/($Score/1000+1));
$step = \&step2;
score(10);
$TheRest -=10;
$screen[$ManStr][$ManCol] = ' ';
for($j=0;$j<$NDOGS;$j++) {
if($Dogs{"$j DogN"}==\&pac0) {
$Dogs{"$j DogN"}=\&pac2;
$Dogs{"$j PACn"}=$DOG2;
};
};
};
for($j=0;$j<$NDOGS;$j++) { return 1 if(&check($j)); }
if(!$TheRest) {
$curlab = ($curlab+1)%$nlabs;
return(2);
};
return(0);
}

sub DogUp() {
do mv($$DogStr,$$DogCol-1);
print(" ". $screen[$$DogStr][$$DogCol] ." ");
$$DogStr--;
&mv($$DogStr, $$DogCol-1); print($$PAC);
}
sub DogDown() {
&mv($$DogStr,$$DogCol-1);
print(" ".$screen[$$DogStr][$$DogCol]." ");
$$DogStr++;
&mv($$DogStr, $$DogCol-1); print($$PAC);
}

sub DogRight() { my($r) = $screen[$$DogStr][$$DogCol-1];
&mv($$DogStr,$$DogCol-1);
if($$DogCol==80) { $$DogStr++; $$DogCol=1; }
else { $$DogCol++; }
print($r.$$PAC);
}

sub DogLeft() { my($r) = $screen[$$DogStr][$$DogCol+1];
&mv($$DogStr,$$DogCol-2);
if($$DogCol==1) { $$DogStr--; $$DogCol=80; }
else { $$DogCol--; }
print($$PAC.$r);
}

sub pac0() { # =O=
my(@dirs,@dirs_);
my($cdir);
my($rights,$atu);
$rights=$atu=0;
$cdir = ($$pacdir==$PR) ? $PL : ($$pacdir==$PL) ? $PR : ($$pacdir==$PU) ? $PD : $PU;
$cdir=0 if($REV);
if(($PL!=$cdir) && &right($PL,$$DogStr,$$DogCol)) {
push @dirs, ($PL); $rights++;
if($ManCol < $$DogCol) { push @dirs_, ($PL); $atu++; }
}
if(($PR!=$cdir) && &right($PR,$$DogStr,$$DogCol)) {
push @dirs, ($PR); $rights++;
if($ManCol> $$DogCol) { push @dirs_, ($PR); $atu++; }
}
if(($PU!=$cdir) && &right($PU,$$DogStr,$$DogCol)) {
push @dirs, ($PU); $rights++;
if($ManStr< $$DogStr) { push @dirs_, ($PU); $atu++; }
}
if(($PD!=$cdir) && &right($PD,$$DogStr,$$DogCol)) {
push @dirs, ($PD); $rights++;
if($ManStr> $$DogStr) { push @dirs_, ($PD); $atu++; }
}
if(!$rights) {
$$pacdir = $cdir;
goto EX;
}
$$pacdir = ( $atu && (rand($RandMax)%$Fury) ) ? $dirs_[rand($RandMax)%$atu] : $dirs[rand($RandMax)%$rights];
EX:
if($$pacdir==$PR) { DogRight(); }
elsif($$pacdir==$PL) { DogLeft(); }
elsif($$pacdir==$PU) { DogUp(); }
else {DogDown();}
return(0);
}

sub pac2() { # <->
my(@dirs,@dirs_);
my($cdir);
my($rights,$atu);
$rights=$atu=0;
$cdir = ($$pacdir==$PR) ? $PL : ($$pacdir==$PL) ? $PR : ($$pacdir==$PU) ? $PD : $PU;
if(($PL!=$cdir) && &right($PL,$$DogStr,$$DogCol)) {
push @dirs, ($PL); $rights++;
if($ManCol > $$DogCol) { push @dirs_, ($PL); $atu++; }
}
if(($PR!=$cdir) && &right($PR,$$DogStr,$$DogCol)) {
push @dirs, ($PR); $rights++;
if($ManCol< $$DogCol) { push @dirs_, ($PR); $atu++; }
}
if(($PU!=$cdir) && &right($PU,$$DogStr,$$DogCol)) {
push @dirs, ($PU); $rights++;
if($ManStr> $$DogStr) { push @dirs_, ($PU); $atu++; }
}
if(($PD!=$cdir) && &right($PD,$$DogStr,$$DogCol)) {
push @dirs, ($PD); $rights++;
if($ManStr< $$DogStr) { push @dirs_, ($PD); $atu++; }
}
if(!$rights) { $$pacdir = $cdir; goto EX; }
$$pacdir = $atu ? $dirs_[rand($RandMax)%$atu] : $dirs[rand($RandMax)%$rights];
EX:
if($$pacdir==$PR) { DogRight(); }
elsif($$pacdir==$PL) { DogLeft(); }
elsif($$pacdir==$PU) { DogUp(); }
else {DogDown();}
return(0);
}

sub pac1() { # ---
my(@dirs,@dirs_);
my($j) = $_[0];
my($cdir);
my($rights,$atu);
$rights=$atu=0;
if(($$DogCol== 40 ) && ($$DogStr== 10 ) ) {
$$pacdir=$PD;
DogDown();
return(0);
}
if(($$DogCol== 40 ) && ($$DogStr== 13 )) {
$$PAC=$DOG0;
$Dogs{"$j DogN"}=\&pac0;
return(0);
}
$cdir = ($$pacdir==$PR) ? $PL : ($$pacdir==$PL) ? $PR : ($$pacdir==$PU) ? $PD : PU;
if(($PL!=$cdir) && &right($PL,$$DogStr,$$DogCol)) {
push @dirs, ($PL); $rights++;
if( 40 < $$DogCol) { push @dirs_, ($PL); $atu++; }
}
if(($PR!=$cdir) && &right($PR,$$DogStr,$$DogCol)) {
push @dirs, ($PR); $rights++;
if( 40 > $$DogCol) { push @dirs_, ($PR); $atu++; }
}
if(($PU!=$cdir) && &right($PU,$$DogStr,$$DogCol)) {
push @dirs, ($PU); $rights++;
if( 13 < $$DogStr) { push @dirs_, ($PU); $atu++; }
}
if(($PD!=$cdir) && &right($PD,$$DogStr,$$DogCol)) {
push @dirs, ($PD); $rights++;
if( 13 > $$DogStr) { push @dirs_, ($PD); $atu++; }
}
$$pacdir = (!$rights) ? ($$cdir) : (
$atu ? $dirs_[rand($RandMax) % $atu] :
$dirs[rand($RandMax) % $rights] );
if($$pacdir==$PR) { DogRight(); }
elsif($$pacdir==$PL) { DogLeft(); }
elsif($$pacdir==$PU) { DogUp(); }
else {DogDown();}
return(0);
}

sub score()
{ my($n) = $_[0];
$Fury=($Score += $n)/150+1;
do mv(19,39);
print(sprintf("%5d",$Score));
if($Score>$prem) {
$prem +=500;
$lives++;
$livesmax=$lives;
if($lives<=24) {
do mv($lives-1,80);
print("X");
}
}
}

END { ReadMode 0;}

__END__

Top twenty:
^^^^^^^^^^^

$Labs[0] = <+-----------------------------------------------------------------------------+
| . . . . . . . . . . . . | | . . . . . . . . . . . . |
| . +-------+ . +-----------------+ . | | . +-----------------+ . +-------+ . |
| @ | | . | | . | | . | | . | | @ |
| . +-------+ . +-----------------+ . +-+ . +-----------------+ . +-------+ . |
| . . . . . . . . . . . . . . . . . . . . . . . . . |
| . +-------+ . +-------+ . +---------------------+ . +-------+ . +-------+ . |
| . | | . | | . . . . | | . . . . | | . | | . |
| . | | . | +---------+ . +-+ . +---------+ | . +-------+ . |
| . +-------+ . | | | | . . . . . |
| . . . . . | | +--+ + +--+ +-------------+ . +-----------+-
+-----------+ . +-------------+ | | .
. | | +-------------+ . +-----------+-
+-----------+ . +-------------+ +---------+ | | . . . +-----|
| . . . . . | | | | . +-+ . . . |
| . +-------+ . +-------------+ =========== +-------------+ . | |-----+ . |
| @ . . | | . . . . . . . . . . . . . . . . | | . . @ |
|-----+ . +-+ . +-------+ . +---------------------+ . +-------+ . +-+ . +-----|
| . . . . . | | . | | . | | . . . . . |
| . +-----------+ | . +---------| |---------+ . | +-----------+ . |
| . | | . . . . | | . . . . | | . |
| . +-----------------------------+ . +-+ . +-----------------------------+ . |
| . . . . . . . . . . . . . . . . . . . . . . . . . |
+-----------------------------------------------------------------------------+
EndOfData

;

$Labs[1] = <+-----------------------------------------------------------------------------+
| . . . . . . . . . | . | | . . . . . | | . . . . . . . . . . . . . . . . | . |
| . +-------+ . +---+ . +-+ . +---+ . | | . +-----+ . +-------+ . +---+ . + . |
| @ . . . . | . | . . . . . . | | . . | | . | | . | | . | | . . @ |
| . +---+ . + . + . +-----------+ . +---+ . +-----+ . +-------+ . +-------+ . |
| . + . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
| . . . |---+ . +-------+ . +---+ . +-------------+ . +-------+ . +---+ . +---|
|---+ . | . . . . . . . | . . . . . . | | . . . . . . | @ . . | . | . . . | . |
| . . . | . +---+ . + . +---------+ . +-+ . +---+ . +-----+ . | . +-------+ . |
| . +---+ . | @ | . | . . . . . . . | . . . . | . . . . . . . |
| . . . . | . +---------+ . + . +--+ + +--+ . + . | . +-----+ . +---+ . +---+-
+-------+ . + . . . . . . . . + . | | . | . | . . . . . . . . . . | .
. . . . . . . +---------+ . . . | | . | . | . +-----+ . +-------+ . +-
+----+ . +--+ . | +---+ . . + . +---------+ . | . + . +-----+ . . . . . . . |
| . . . . . . . | . . . +-| . @ . | . . . . . . . . +-------+ . |
| . +-+ . +-----+---+ . +-----+ . =========== . +-------------+ . | +-----+ . |
| @ . . . | . . . . . . . . . . . . . . . . . . . . . . . . . | | . . . @ |
|-----+ . +-+ . + . +-----+ . +-------------------+ . + . +---+ . +-+ . +-----|
| . . . . . . . | . +---| . . | . | . | | . . . . | . . |
| . +-+ . +-----+ . . . + . +---------------------+ . | . | +-----+ . +-+ . |
| . | . . . . . . . + . . . . . . . . . . . . . . . . | . | | . . . . |
| . +-----------------------------+ . +-+ . +---------+ . +---------+-----+ . |
| . . . . . . . . . . . . . . . . . . | | . . . . . . . . . . . . . . . . . . |
+-----------------------------------------------------------------------------+
EndOfData

;

$Labs[2] = <+-----------------------------------------------------------------------------+
| . . . | . . . . . | . | | . . . . . | | . . . . . . . . . . . . . . . . | . |
| . +-------+ . +---+ . +-+ . +---+ . +-| . +-----+ . +-------+ . +---+ . + . |
| . . . . . | . | . . . . . . | . . . . | . . . . . . . . . . . . | | . . . |
| . +---+ . + . + . +-----------+ . +---+ . +-----+ . +-------+ . +-------+ . |
| . + . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
| . . . |---+ . +-------+ . +---+ . +-------------+ . +---------------+ . + . |
|---+ . | . . . . . . . | . . . . . . | | . . . . . . | . . . . . . . . . | . |
| . . . | . +---+ @ + . +-----+---+ . +-+ . +---+ . +-----+ . +-----------+ . |
| . +---+ . | @ | @ | . . . . | . . . . . . . . . . | . . . . | . . . . . . . |
| . . . . . | @ |---------+ . | . +--+ + +--+ . +---+ . +-----+ . +------+------
+-------+ . + @ | @@@@@@@@. . +---+ @ | . | . . . . . . . .. +-----+ . .
. . . +---------+ . . . | . | . +----------+ . . . . . . +--
+----+ . +--+ . . . . . + . . +-------------+ . | . + . . . . | . +---------+|
| . . . . . . . +---+ . . . +-| . | . . . +------+ . . . . . . |
| . +-+ . +-----+ . + . +-----+ =========== . +-------+ . . . . ++-----+ . |
| . . . . | . . . . . . . . . . . . . . . . . . . . . . +--+ . || . . . . |
|-----+ . +-+ . + . +-----+ . +-------------------+ . + . +----+ . ++ . +-----|
| . . . . . . . | . +---| . . | | . | . | . . . . . . | . . |
| . +-+ . +-----+ . . . + . +---------------------+ . | . + . +-----+ . +-+ . |
| . | . . . . . . . + . . . . . . . . . . . . . . . . | . . . . . . | . . . . |
| . +-----------------------------+ . +-+ . +-----------------------+-----+ . |
| . . . . . . . . . . . . . . . . . . | | . . . . . . . . . . . . . . . . . . |
+-----------------------------------------------------------------------------+
EndOfData

;

$Labs[3] = <+-----------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| +---------------------------------------------+ |
| | . . . . . . . . . . | | . . . . . . . . . . | |
| | . +-------------+ . +-+ . +-------------+ . | |
| | . | | . . . . . . . | @ . . . . . | |
| | . | | . +--+ + +--+ . +-------------| +
+ | . +---------+ . | | . . . . . . . . | . . . . .
. . . . | . . . . . . . . | | . +-----+ . + . | . +
+ . +---------------------------+ . | . . | . | . | . |
| . . . . . . . . . . . . . . . . . . . . |-+ . | . | @ | . |
| + . +-----------------------+ . +-+ . | . +---+ . |
| | . | . . . . . . . . . . . . . . | . . @ . . . . |
| | . | . + . +---------------------+ . | . +---+ |
| | . | @ | . | | . | . | @ | |
| | . +---+ . +---------------------+ . +---+ . | |
| | . . . . . . . . . . . . . . . . . . . . . . | |
| +---------------------------------------------+ |
| |
+-----------------------------------------------------------------------------+
EndOfData

;

$Labs[4] = <+-----------------------------------------------------------------------------+
| . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . |
| . +-------+ . + . + . +-----------+ . + . +-----+ . +-------------------+ . |
| . | @ | . . . | . | . . . . . . . | . . . . . . | . | . . . . . | . . . . . |
| . | . + . +---+ . | . +-------+ . | . +---------+ . | . +---+ . + . +---+ . |
| . + . . . | . . . | . | . . . | . | . . . | . . . . | . . . | . . . | . . . |
| . . . +---+ . +---+ . | . +---+ . +---+ . +-----+ . | . + . + . +---+ . +---|
|---+ . | . . . . . . . | . . . . . . . . . . . . . . | . | . . . . . . . | . |
| . . . | . +-------+ . +---------+ . +-+ . +---+ . +-+ . +---------------+ . |
| . +---+ . | . . . | . . . . . . . . . . . | . | . . . . . . . . . . . . |
| . . . . | . + . +-----+ . + . +--+ + +--+ . | . | . +-----+ . +---+ . + . +-
+-------+ . + . | . . . . . . | . | . . + . | . . . . . . | @ . . | .
. . . . . . . | . +-----+ . | . | + . . . | . + . +-+ . | . +---+ . +-
+ . +-----------+ . | . . . . | . +-----+ . | . +---+ . | . . | . + . + . . . |
| . | . . . . . . . | . +-----+ . . . . . . | . | . . . +-+ . | . . . . . + . |
| . +-+ . +-+ . +---+ . | . . . . +---------+ . +---+ . . + . +-----+ . +-+ . |
| . . . . | @ . | . . . | . +-+ . . . . . . . . . . . . . . . . | . . . . |
|---------| . +-+ . + . | . | . . +---------------+ . +-------+ . +-+ . +-----|
| . . . . | . . . . | . | . | . . . . . . . . . . | . | . . . | . | @ . . . . |
| . +-+ . +-----+ . | . + . + . +-----------+ . +-+ . | . + . + . +-+ . +-+ . |
| . | . . . . . . . | . . . . . . . . . | . . . . . . | . | . . . . | . . | . |
| . +-------------------------------+ . + . +---------+ . +-----+ . +-----+ . |
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
+-----------------------------------------------------------------------------+
EndOfData

;



perl

Previous post Next post
Up