rem -- Original code written in C by Colly rem -- Adapted and translated into OPL by Tom Dolbilin rem -- Version 1.0 PROC main: global srvPid% rem PID of Bring server global buf$(255) rem Buffer to receive data global ioSem% rem The I/O semaphore handle local wsrvPid% rem PID of Window server local fmt& rem Message buffer local pfmt% rem Pointer to message buffer local name$(15), form%(3), n%, ret% local w%(2) print "Link Paste Client 1.0" print "Press Psion-Esc to exit" rem --- Get Window Server's pid name$ = "SYS$WSRV.*" wsrvPid% = call( $188, addr( name$ ) + 1 ) rem --- Get the handle of our I/O semaphore call( $78b, 0, 2, 0, ( call($88) and $fff ) + 33, addr( ioSem% ) ) rem --- Get the Link Server's pid pfmt% = addr( fmt& ) srvPid% = call( $683, wsrvPid%, 4, 0, addr( pfmt% ) ) rem MessSendReceiveWithWait if srvPid% < 0 print err$( srvPid% ) : get : stop elseif srvPid% = 0 print "No link server" : get : stop endif rem --- Get the name of the Link Server call( $a88, srvPid%, 0, 0, 0, addr( name$ ) + 1 ) pokeb addr( name$ ), call( $b9, 0, 0, 0, 0, addr( name$ ) + 1 ) rem --- Find out what formats are available form%(1) = ( fmt& and $2 ) / $2 form%(2) = ( fmt& and $4 ) / $4 form%(3) = ( fmt& and $10 ) / $10 rem --- Display the dialog to select a link-paste format rem --- out of those supported by the server rem --- Be careful with Native - it is not always supported dinit "Server: " + name$ dtext chr$(12) + " ", "Native", $400 dtext left$( chr$(12), form%(1) ) + " ", "Plain text", - form%(1) * $400 dtext left$( chr$(12), form%(2) ) + " ", "Tabbed text", - form%(2) * $400 dtext left$( chr$(12), form%(3) ) + " ", "Paragraph text", - form%(3) * $400 n% = dialog if n% = 2 : w%(1) = $0 elseif n% = 3 : w%(1) = $2 elseif n% = 4 : w%(1) = $4 elseif n% = 5 : w%(1) = $10 else stop endif rem --- Request a rendering ret% = talk%:( w%(1), 0 ) if ret% = 0 rem --- Server prepared to render data while 1 ret% = talk%:( addr( buf$ ) + 1, 255 ) : rem Get the server data if ret% < 0 if ret% = -36 : rem End of file print "------------ End of data ------------" ret% = 0 : rem Avoid an error print endif break endif rem --- Display the data received pokeb addr( buf$ ), ret% print peek$( addr( buf$ ) ) endwh endif if ret% < 0 print err$( ret% ) endif get ENDP PROC talk%:( a%, b% ) local arg1%, arg2% rem Message parameters - keep in order local stat%, count%, ret% arg1% = a% arg2% = b% call( $583, srvPid%, $21, 0, addr( arg1% ), addr( stat% ) ) rem MessSendReceiveAsynchronous while 1 iowait if stat% <> -46 : rem The result has been returned ret% = stat% break else count% = count% + 1 : rem Count up all other signals endif endwh rem --- Put back spare signals if any while count% call( $382, ioSem%, 0, 0, 0, 0 ) rem SemSignalOnce count% = count% - 1 endwh return ret% ENDP