package win;
# Window array has the following elements
# (all coordinates are w.r.t. (1,1) = top left hand corner of screen
#
# @window=(
# llx, # the lower-left x coordinate for the window
# lly, # the lower-left y coordinate of the window
# urx, # the upper-right x coordinate of the window
# ury, # the upper right y coordinate of the window
# nattr, # the normal attribute for the window
# hattr, # the highlight attribute for the window
# title # current title text
# footer # current footer text
# )
#
# Associated with the window, at any given time is the current text
# body. we use another array.
#
# @text=
# line1, # first line of text to be placed beneath header
# line2, # second line of text to be placed beneath footer
# ...,
# lineN, # nth line of text, with n not to exceed lly - ury - 2
# )
sub clear{ # clear the complete window area
local($llx,$lly,$urx,$ury,$attr) = @_;
local($width,$height) = ($urx-$llx,$lly-$ury);
eval <<'EOLoop';
print "\e"."["."$attr"."m"; # set background attribute, usually black
for($i = $ury;$i<=$lly;$i++){
print "\e"."["."$i".";"."$llx"."f";
print " " x $width;
}
EOLoop
1;
}
sub refresh{ # print the current buffer in window
local(@buffer) = splice(@_,0,shift);
local($llx,$lly,$urx,$ury,$attr,$nattr) = splice(@_,0,shift);
local($i,$j,$tmp,$tmp2,$string);
local($width,$height) = ($urx-$llx-1,$lly-$ury);
$llx+=2;
eval <<'EOLoop';
print "\e"."["."$attr"."m";
for($i = $ury+1,$j=0;$i<$lly;$i++,$j++){
#if($i==($lly-1)){if(defined($buffer[$j+1])){$j-=($i-1);$i=($ury+1);}}
$tmp = $width - length($buffer[$j]);
print "\e"."["."$i".";"."$llx"."H";
if ($tmp < 2 )
{$string =substr($buffer[$j],0,$width-3);
print $string;}
else {
print $buffer[$j];
print " " x ($tmp-2); }
}
EOLoop
}
sub title{ # highlight the top line, text is arg
local($llx,$lly,$urx,$ury,$oattr,$nattr,$text) = @_;
local($width) = ($urx-$llx);
$fill = $width - length($text);
print "\e"."["."$ury".";"."$llx"."f";
print "\e"."["."$nattr"."m";
print $text;
print " " x $fill;
}
sub footer{ # print a footer on the window with text
local($llx,$lly,$urx,$ury,$oattr,$nattr,$junk,$text) = @_;
local($width) = ($urx-$llx);
$fill = $width - length($text);
print "\e"."["."$lly".";"."$llx"."f";
print "\e"."["."$nattr"."m";
print $text;
print " " x $fill;
}
sub border{
local($llx,$lly,$urx,$ury,$oattr,$nattr) = @_;
local($width) = ($urx-$llx);
local($i,$j);
$ury+=1;
eval <<'EOLoop';
for($i = $ury;$i<$lly;$i++){
print "\e"."["."$i".";"."$llx"."H";
print "\e"."["."$nattr"."m";
print " ";
print "\e"."["."$oattr"."m";
print " " x ($width-2);
print "\e"."["."$nattr"."m";
print " ";
}
EOLoop
1;
}
sub highlight_field{ # highlight a field in current buffer
local($row,$col,$field,$attr) = @_;
print "\e"."["."$row".";"."$col"."f";
print "\e"."["."$attr"."m";
print $field;
}
sub getdata{ # get data from the keyboard
local($col,$row,$prompt,$attr) = @_;
local($tmp)=length($prompt)+1;
local($tmp2) = $tmp +$col;
print "\e"."["."$row".";"."$col"."H";
print "\e"."["."$attr"."m";
print $prompt;
print "\e"."["."0"."m";
print "\e"."["."$row".";"."$tmp2"."H";
$tmp = <STDIN>;
}
1;
# bILL -
[email protected]