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