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 >
Text File  |  2000-02-17  |  5KB  |  222 lines

  1. ########################################################################
  2. #
  3. #    File:            EmUtils.pm
  4. #
  5. #    Purpose:        High-level utilities for scripting the Palm OS
  6. #                    Emulator
  7. #
  8. #    Description:    This file contains the following useful utilities:
  9. #
  10. #                    Wait
  11. #                        Wait for a signal from the Emulator.
  12. #
  13. #                    TapPen
  14. #                        Tap the pen at the given x,y location.
  15. #
  16. #                    TapButton
  17. #                        Tap the pen on the button with the given name.
  18. #
  19. #                    ClipperGoToURL
  20. #                        Launches the web clipping application with a given URL.
  21. #
  22. ########################################################################
  23.  
  24. package EmUtils;
  25.  
  26. use EmFunctions;    # HostSignalWait, HostSignalResume, EvtEnqueuePenPoint, etc.
  27.  
  28. use Exporter ();
  29. @ISA = qw(Exporter);
  30.  
  31. @EXPORT = qw(
  32.     Wait
  33.     Resume
  34.     TapPen TapPenSync
  35.     TapButton TapButtonSync
  36.     EnterKey EnterKeySync
  37.     ClipperGoToURL
  38.  
  39. );
  40.  
  41.  
  42. ########################################################################
  43. #
  44. #    FUNCTION:        Wait
  45. #
  46. #    DESCRIPTION:    Wait for a signal from the Palm OS Emulator.
  47. #
  48. #    PARAMETERS:        timeout in milliseconds.
  49. #
  50. #    RETURNED:        List containing the HostSignalResume error code
  51. #                    and the number of the signalled event.
  52. #
  53. ########################################################################
  54.  
  55. sub Wait
  56. {
  57.     my $timeout = $_[0];
  58.     if (not defined $timeout)
  59.     {
  60.         $timeout = 0x7fffffff;
  61.     }
  62.  
  63.     my ($err, $signal) = HostSignalWait ($timeout);
  64.     die "Didn't hear back from Poser, stopped" if ($err != 0);
  65.  
  66.     ($err, $signal);
  67. }
  68.  
  69.  
  70. ########################################################################
  71. #
  72. #    FUNCTION:        Resume
  73. #
  74. #    DESCRIPTION:    Resume the Palm OS Emulator after it paused itself
  75. #                    after sending a signal.
  76. #
  77. #    PARAMETERS:        none.
  78. #
  79. #    RETURNED:        Nothing.
  80. #
  81. ########################################################################
  82.  
  83. sub Resume
  84. {
  85.     HostSignalResume ();
  86. }
  87.  
  88.  
  89. ########################################################################
  90. #
  91. #    FUNCTION:        TapPen
  92. #
  93. #    DESCRIPTION:    Simulate a tap at the given location, then wait for
  94. #                    the next null event.
  95. #
  96. #    PARAMETERS:        x, y coordinates.
  97. #
  98. #    RETURNED:        Nothing.
  99. #
  100. ########################################################################
  101.  
  102. sub TapPen
  103. {
  104.     EvtEnqueuePenPoint ({x => 256 - $_[0], y => 256 - $_[1]});
  105.     EvtEnqueuePenPoint ({x => -1, y => -1});
  106. }
  107.  
  108. sub TapPenSync
  109. {
  110.     Wait ();
  111.     TapPen (@_);
  112.     Resume ();
  113. }
  114.  
  115.  
  116. ########################################################################
  117. #
  118. #    FUNCTION:        TapButton
  119. #
  120. #    DESCRIPTION:    Simulate a tap on the named button, then wait for
  121. #                    the next null event.
  122. #
  123. #    PARAMETERS:        Name of the button to tap on.
  124. #
  125. #    RETURNED:        Nothing.
  126. #
  127. ########################################################################
  128.  
  129. sub TapButton
  130. {
  131.     my ($button_name) = @_;
  132.  
  133.     my ($form) = FrmGetActiveForm();
  134.     my ($num_objects) = FrmGetNumberOfObjects($form);
  135.  
  136.     for $ii (0..$num_objects - 1)
  137.     {
  138.         my ($object_type) = FrmGetObjectType($form, $ii);
  139.  
  140.         if ($object_type == frmControlObj)
  141.         {
  142.             my ($obj_ptr) = FrmGetObjectPtr ($form, $ii);
  143.             my ($address, $label) = CtlGetLabel($obj_ptr);
  144.  
  145.             if ($label eq $button_name)
  146.             {
  147.                 my (%bounds) = FrmGetObjectBounds($form, $ii);
  148.  
  149.                 my ($x, $y) = (    $bounds{left} + $bounds{width} / 2,
  150.                                 $bounds{top} + $bounds{height} / 2);
  151.  
  152.                 ($x, $y) = WinWindowToDisplayPt ($x, $y);
  153.  
  154.                 TapPen ($x, $y);
  155.  
  156.                 last;    # break out of the for loop.
  157.             }
  158.         }
  159.     }
  160. }
  161.  
  162. sub TapButtonSync
  163. {
  164.     Wait ();
  165.     TapButton (@_);
  166.     Resume ();
  167. }
  168.  
  169. ########################################################################
  170. #
  171. #    FUNCTION:        EnterKey
  172. #
  173. #    DESCRIPTION:    Enter a key, then wait for the next null event.
  174. #
  175. #    PARAMETERS:        WChar asciiChar, UInt16 keycode, UInt16 modifiers
  176. #
  177. #    RETURNED:        Nothing.
  178. #
  179. ########################################################################
  180.  
  181. sub EnterKey
  182. {
  183.     EvtEnqueueKey($_[0], $_[1], $_[2]);
  184. }
  185.  
  186. sub EnterKeySync
  187. {
  188.     Wait ();
  189.     EnterKey (@_);
  190.     Resume ();
  191. }
  192. ########################################################################
  193. #
  194. #    FUNCTION:        ClipperGoToURL
  195. #
  196. #     AUTHOR:             Flash Sheridan, based on C code by David Fedor
  197. #
  198. #    DESCRIPTION:    Launches Clipper to view the given URL.
  199. #                    If you're using this repeatedly, set 
  200. #                    $ClipperID beforehand.
  201. #
  202. #    PARAMETERS:        URL string
  203. #
  204. #    RETURNS:        An OS error code; zero means no error.
  205. #
  206. ########################################################################
  207.  
  208. sub ClipperGoToURL 
  209. {
  210.     my $url = $_[0] . "\0";
  211.     my $sysAppLaunchCmdGoToURL = 54;
  212.     $ClipperID = DmFindDatabase (0, "Clipper") if not defined $ClipperID;
  213.     die "Clipper not found" unless $ClipperID;    
  214.  
  215.     my $cmdPB = MemPtrNew (length ($url));
  216.     EmRPC::WriteBlock ($cmdPB, $url);
  217.     MemPtrSetOwner($cmdPB, 0);
  218.     SysUIAppSwitch (0, $ClipperID, $sysAppLaunchCmdGoToURL, $cmdPB);        
  219. }
  220.  
  221. 1;
  222.