home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / developmen / lpcs / LPC.OPL < prev    next >
Text File  |  1994-05-10  |  3KB  |  108 lines

  1. rem -- Original code written in C by Colly
  2. rem -- Adapted and translated into OPL by Tom Dolbilin
  3. rem -- Version 1.0
  4.  
  5. PROC main:
  6. global srvPid%        rem PID of Bring server
  7. global buf$(255)    rem Buffer to receive data
  8. global ioSem%        rem The I/O semaphore handle
  9. local wsrvPid%        rem PID of Window server
  10. local fmt&            rem Message buffer
  11. local pfmt%            rem Pointer to message buffer
  12. local name$(15), form%(3), n%, ret%
  13. local w%(2)
  14.  
  15. print "Link Paste Client 1.0"
  16. print "Press Psion-Esc to exit"
  17.  
  18. rem --- Get Window Server's pid
  19. name$ = "SYS$WSRV.*"
  20. wsrvPid% = call( $188, addr( name$ ) + 1 )
  21.  
  22. rem --- Get the handle of our I/O semaphore
  23. call( $78b, 0, 2, 0, ( call($88) and $fff ) + 33, addr( ioSem% ) )
  24.  
  25. rem --- Get the Link Server's pid
  26. pfmt% = addr( fmt& )
  27. srvPid% = call( $683, wsrvPid%, 4, 0, addr( pfmt% ) ) rem MessSendReceiveWithWait
  28. if srvPid% < 0
  29.     print err$( srvPid% ) : get : stop
  30. elseif srvPid% = 0
  31.     print "No link server" : get : stop
  32. endif
  33.  
  34. rem --- Get the name of the Link Server
  35. call( $a88, srvPid%, 0, 0, 0, addr( name$ ) + 1 )
  36. pokeb addr( name$ ), call( $b9, 0, 0, 0, 0, addr( name$ ) + 1 )
  37.  
  38. rem --- Find out what formats are available
  39. form%(1) = ( fmt& and $2 ) / $2
  40. form%(2) = ( fmt& and $4 ) / $4
  41. form%(3) = ( fmt& and $10 ) / $10
  42.  
  43. rem --- Display the dialog to select a link-paste format
  44. rem --- out of those supported by the server
  45. rem --- Be careful with Native - it is not always supported
  46. dinit "Server: " + name$
  47. dtext chr$(12) + " ", "Native", $400
  48. dtext left$( chr$(12), form%(1) ) + " ", "Plain text", - form%(1) * $400
  49. dtext left$( chr$(12), form%(2) ) + " ", "Tabbed text", - form%(2) * $400
  50. dtext left$( chr$(12), form%(3) ) + " ", "Paragraph text", - form%(3) * $400
  51. n% = dialog
  52.  
  53. if n% = 2 : w%(1) = $0
  54. elseif n% = 3 : w%(1) = $2
  55. elseif n% = 4 : w%(1) = $4
  56. elseif n% = 5 : w%(1) = $10
  57. else stop
  58. endif
  59.  
  60. rem --- Request a rendering
  61. ret% = talk%:( w%(1), 0 )
  62. if ret% = 0
  63.     rem --- Server prepared to render data
  64.     while 1
  65.         ret% = talk%:( addr( buf$ ) + 1, 255 ) : rem Get the server data
  66.         if ret% < 0
  67.             if ret% = -36 : rem End of file
  68.                 print "------------ End of data ------------"
  69.                 ret% = 0 : rem Avoid an error print
  70.             endif
  71.             break
  72.         endif
  73.         rem --- Display the data received
  74.         pokeb addr( buf$ ), ret%
  75.         print peek$( addr( buf$ ) )
  76.     endwh
  77. endif
  78.  
  79. if ret% < 0
  80.     print err$( ret% )
  81. endif
  82. get
  83. ENDP
  84.  
  85. PROC talk%:( a%, b% )
  86. local arg1%, arg2%    rem Message parameters - keep in order
  87. local stat%, count%, ret%
  88. arg1% = a%
  89. arg2% = b%
  90. call( $583, srvPid%, $21, 0, addr( arg1% ), addr( stat% ) ) rem MessSendReceiveAsynchronous
  91. while 1
  92.     iowait
  93.     if stat% <> -46 : rem The result has been returned
  94.         ret% = stat%
  95.         break
  96.     else
  97.         count% = count% + 1 : rem Count up all other signals
  98.     endif
  99. endwh
  100.  
  101. rem --- Put back spare signals if any
  102. while count%
  103.     call( $382, ioSem%, 0, 0, 0, 0 ) rem SemSignalOnce
  104.     count% = count% - 1
  105. endwh
  106. return ret%
  107. ENDP
  108.