diff options
Diffstat (limited to 'Scripting/Perl/EmUtils.pm')
-rw-r--r-- | Scripting/Perl/EmUtils.pm | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/Scripting/Perl/EmUtils.pm b/Scripting/Perl/EmUtils.pm new file mode 100644 index 0000000..625da89 --- /dev/null +++ b/Scripting/Perl/EmUtils.pm @@ -0,0 +1,228 @@ +######################################################################## +# +# File: EmUtils.pm +# +# Purpose: High-level utilities for scripting the Palm OS +# Emulator +# +# Description: This file contains the following useful utilities: +# +# Wait +# Wait for a signal from the Emulator. +# +# TapPen +# Tap the pen at the given x,y location. +# +# TapButton +# Tap the pen on the button with the given name. +# +# ClipperGoToURL +# Launches the web clipping application with a given URL. +# +######################################################################## + +package EmUtils; + +use strict; +use vars qw(@ISA @EXPORT); + +use EmFunctions; # EvtEnqueuePenPoint, etc. +use HostControl; # HostSignalWait, HostSignalResume, etc. + +use Exporter; +@ISA = qw(Exporter); +@EXPORT = qw( + Wait + Resume + TapPen TapPenSync + TapButton TapButtonSync + EnterKey EnterKeySync + ClipperGoToURL + +); + + +######################################################################## +# +# FUNCTION: Wait +# +# DESCRIPTION: Wait for a signal from the Palm OS Emulator. +# +# PARAMETERS: timeout in milliseconds. +# +# RETURNED: List containing the HostSignalResume error code +# and the number of the signalled event. +# +######################################################################## + +sub Wait +{ + my $timeout = $_[0]; + if (not defined $timeout) + { + $timeout = 0x7fffffff; + } + + my ($err, $signal) = HostSignalWait ($timeout); + die "Didn't hear back from Poser, stopped" if ($err != 0); + + ($err, $signal); +} + + +######################################################################## +# +# FUNCTION: Resume +# +# DESCRIPTION: Resume the Palm OS Emulator after it paused itself +# after sending a signal. +# +# PARAMETERS: none. +# +# RETURNED: Nothing. +# +######################################################################## + +sub Resume +{ + HostSignalResume (); +} + + +######################################################################## +# +# FUNCTION: TapPen +# +# DESCRIPTION: Simulate a tap at the given location, then wait for +# the next null event. +# +# PARAMETERS: x, y coordinates. +# +# RETURNED: Nothing. +# +######################################################################## + +sub TapPen +{ + EvtEnqueuePenPoint ({x => 256 - $_[0], y => 256 - $_[1]}); + EvtEnqueuePenPoint ({x => -1, y => -1}); +} + +sub TapPenSync +{ + Wait (); + TapPen (@_); + Resume (); +} + + +######################################################################## +# +# FUNCTION: TapButton +# +# DESCRIPTION: Simulate a tap on the named button, then wait for +# the next null event. +# +# PARAMETERS: Name of the button to tap on. +# +# RETURNED: Nothing. +# +######################################################################## + +sub TapButton +{ + my ($button_name) = @_; + my($ii); + + my ($form) = FrmGetActiveForm(); + my ($num_objects) = FrmGetNumberOfObjects($form); + + for $ii (0..$num_objects - 1) + { + my ($object_type) = FrmGetObjectType($form, $ii); + + if ($object_type == EmFunctions::frmControlObj) + { + my ($obj_ptr) = FrmGetObjectPtr ($form, $ii); + my ($address, $label) = CtlGetLabel($obj_ptr); + + if ($label eq $button_name) + { + my (%bounds) = FrmGetObjectBounds($form, $ii); + + my ($x, $y) = ( $bounds{left} + $bounds{width} / 2, + $bounds{top} + $bounds{height} / 2); + + ($x, $y) = WinWindowToDisplayPt ($x, $y); + + TapPen ($x, $y); + + last; # break out of the for loop. + } + } + } +} + +sub TapButtonSync +{ + Wait (); + TapButton (@_); + Resume (); +} + +######################################################################## +# +# FUNCTION: EnterKey +# +# DESCRIPTION: Enter a key, then wait for the next null event. +# +# PARAMETERS: WChar asciiChar, UInt16 keycode, UInt16 modifiers +# +# RETURNED: Nothing. +# +######################################################################## + +sub EnterKey +{ + EvtEnqueueKey($_[0], $_[1], $_[2]); +} + +sub EnterKeySync +{ + Wait (); + EnterKey (@_); + Resume (); +} + +######################################################################## +# +# FUNCTION: ClipperGoToURL +# +# AUTHOR: Flash Sheridan, based on C code by David Fedor +# +# DESCRIPTION: Launches Clipper to view the given URL. +# +# PARAMETERS: URL string +# +# RETURNS: An OS error code; zero means no error. +# +######################################################################## + +sub ClipperGoToURL +{ + my $url = $_[0] . "\0"; + my $sysAppLaunchCmdGoToURL = 54; + my($ClipperID); +#ifndef PUBLIC_STUFF_STRIPPED + $ClipperID = (DmFindDatabase (0, "Web Browser")); +#endif // PUBLIC_STUFF_STRIPPED + $ClipperID = DmFindDatabase (0, "Clipper") if not $ClipperID; + die "Clipper not found" unless $ClipperID; + + my $cmdPB = MemPtrNew (length ($url)); + EmRPC::WriteBlock ($cmdPB, $url); + MemPtrSetOwner($cmdPB, 0); + SysUIAppSwitch (0, $ClipperID, $sysAppLaunchCmdGoToURL, $cmdPB); +} + +1; |