# $Id: Cdk.pm,v 1.5 2002/07/28 18:44:16 tom Exp $ package Cdk; use Exporter (); use DynaLoader (); use AutoLoader (); @ISA = qw(Exporter DynaLoader); # Force input buffering off. select (STDIN); $| = 1 ; # Set the version. $VERSION = "4.09010"; # must be a floating-point number # Set the diag flag off. $DIAGFLAG = 0; # Items to export into callers' namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw (VERSION checkDef checkReq popupLabel popupDialog); sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { die "Your vendor has not defined Cdk macro $constname"; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap Cdk; # # This draws a string on the given/or not window. # sub drawMesg { my $type = shift; my %params = @_; my $name = "${type}::new"; my ($mesg, $xpos, $ypos, $attrib, $window); # Retain the type of the object. $self->{'Type'} = $type; # Set up the parameters passed in. $mesg = Cdk::checkReq ($name, "Message", $params{'Message'}); $xpos = Cdk::checkDef ($name, "Xpos", $params{'Xpos'}, Cdk::CENTER()); $ypos = Cdk::checkDef ($name, "Ypos", $params{'Ypos'}, Cdk::CENTER()); $attrib = Cdk::checkDef ($name, "Attrib", $params{'Attrib'}, Cdk::A_NORMAL()); $align = Cdk::checkDef ($name, "Align", $params{'Align'}, Cdk::HORIZONTAL()); # If they passed an object, dereference its window and draw on it. if ($params{'Object'}) { $window = $params{'Object'}->getWindow(); } else { $window = Cdk::getCdkWindow(); } # Start drawing. Cdk::DrawMesg ($window, $mesg, $xpos, $ypos, $attrib, $align); } # # This checks if a value has been given a value, if not, then it gives it one. # sub checkDef { my ($type, $name, $value, $def) = @_; # Check if it is defined. if (!defined $value) { Cdk::Diag::Log ("Diag", $type, "Default parameter $name being set to default value <$def>"); return ($def); } else { Cdk::Diag::Log ("Diag", $type, "Default parameter $name being set to value <$def>"); return ($value); } } # # This checks if a value has been given a value. If not it reports an error. # sub checkReq { my ($type, $name, $value) = @_; # Check if it is defined. if (! defined $value) { # Close the Cdk screen and shut down curses. Cdk::end(); # Report the error. Cdk::Diag::Log ("Error", $type, "Required parameter $name has no value."); # Get out. exit (1); } else { # Report the info. Cdk::Diag::Log ("Diag", $type, "Required parameter $name being set to <$value>"); return ($value); } } # # This pops up a label. # sub popupLabel { my $mesg = shift; my $popup = new Cdk::Label ("Message" => $mesg); $popup->draw(); $popup->wait(); } # # This pops up a question on the screen. # sub popupDialog { my ($mesg, $buttons) = @_; my $popup = new Cdk::Dialog ('Message' => $mesg, 'Buttons' => $buttons); return $popup->activate(); } # # This function takes a scalar and returns a list with elements in the # list to the given width. # sub scalar2List { my ($scalar, $elementLen) = @_; my $tempLine = ""; my $lineLen = 0; my @info = (); my $x = 0; # Break the scalar into a list. $_ = $scalar; my @wordList = split; # Put each scalar back into an array of $elementLen length or more. for ($x=0; $x <= $#wordList; $x++) { $lineLen += length ($wordList[$x]); $tempLine .= "$wordList[$x] "; if ($lineLen >= $elementLen) { push (@info, $tempLine); $tempLine = ""; $lineLen = 0; } } push (@info, $tempLine); return @info; } # # Load the object modules. # use Cdk::Alphalist; use Cdk::Buttonbox; use Cdk::Calendar; use Cdk::Diag; use Cdk::Dialog; use Cdk::Entry; use Cdk::Fselect; use Cdk::Graph; use Cdk::Histogram; use Cdk::Itemlist; use Cdk::Label; use Cdk::Marquee; use Cdk::Matrix; use Cdk::Mentry; use Cdk::Menu; use Cdk::Radio; use Cdk::Scale; use Cdk::Scroll; use Cdk::Selection; use Cdk::Slider; use Cdk::Swindow; use Cdk::Template; use Cdk::Viewer; 1; __END__