home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 Mobile
/
Chip_Mobile_2001.iso
/
palm
/
system
/
_palmemu
/
palmemu.exe
/
Scripting
/
Perl
/
EmUtils.pm
< prev
next >
Wrap
Text File
|
2000-02-17
|
5KB
|
222 lines
########################################################################
#
# 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 EmFunctions; # HostSignalWait, HostSignalResume, EvtEnqueuePenPoint, 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 ($form) = FrmGetActiveForm();
my ($num_objects) = FrmGetNumberOfObjects($form);
for $ii (0..$num_objects - 1)
{
my ($object_type) = FrmGetObjectType($form, $ii);
if ($object_type == 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.
# If you're using this repeatedly, set
# $ClipperID beforehand.
#
# PARAMETERS: URL string
#
# RETURNS: An OS error code; zero means no error.
#
########################################################################
sub ClipperGoToURL
{
my $url = $_[0] . "\0";
my $sysAppLaunchCmdGoToURL = 54;
$ClipperID = DmFindDatabase (0, "Clipper") if not defined $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;