aboutsummaryrefslogtreecommitdiff
path: root/Scripting/Perl/EmUtils.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Scripting/Perl/EmUtils.pm')
-rw-r--r--Scripting/Perl/EmUtils.pm228
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;