cowan@marob.masa.com (John Cowan) (07/27/90)
"
Purpose of DDE-ENH.ST:
Enhancement to DDE facilities.
Gives access to the DDEAuxWindow facilities used by
the singleRequest and singlePoke class messages for
creating conversations. The class method initiate:topic:
sets up a client object communicating with an appropriate
server; the client object can then be made to request
or poke data with appropriate messages.
"
! DynamicDataExchange class methods !
initiate: applicationName topic: topicName
"Answer a DynamicDataExchange object with attached
auxiliary window. The object will be a client of applicationName
using topic topicName."
| dde w |
w := DDEAuxWindow new open.
dde := self new: w.
dde window: w.
dde initiate: applicationName topic: topicName.
^dde! !
! DynamicDataExchange class methods !
singlePoke: applicationName topic: topicName item: itemName data: aString
"Send a single Dynamic Data Exchange poke.
This initiates a conversation, sends
the poke, and terminates the conversation."
| dde |
dde := self initiate: applicationName topic: topicName.
dde server notNil ifTrue: [
dde
poke: itemName
data: aString asParameter
format: DdefmtText].
dde terminate! !
! DynamicDataExchange class methods !
singleRequest: applicationName topic: topicName item: itemName
"Make a single Dynamic Data Exchange request and answer the
result as a String. This initiates a conversation, sends
the request, waits for the response, and terminates the
conversation."
| dde answer |
dde := self initiate: applicationName topic: topicName.
dde server notNil ifTrue: [
answer := dde getString: itemName format: DdefmtText].
dde terminate.
^answer! !
! DynamicDataExchange methods !
getByteArray: itemName format: aDdeFormat
"Get data from the server
about itemName in aDdeFormat.
Unlike requestItem:format:, this message
answers the data returned (as a ByteArray)."
window isNil ifTrue: [self error: 'No auxiliary window'].
window byteMode: true.
data := PMDdeStruct new.
data format: aDdeFormat.
data itemName: itemName.
self post: WmDdeRequest.
^window waitForData.! !
! DynamicDataExchange methods !
getString: itemName format: aDdeFormat
"Get data from the server
about itemName in aDdeFormat.
Unlike requestItem:format:, this message
answers the data returned (as a String)."
window isNil ifTrue: [self error: 'No auxiliary window'].
window byteMode: false.
data := PMDdeStruct new.
data format: aDdeFormat.
data itemName: itemName.
self post: WmDdeRequest.
^window waitForData.! !
! DynamicDataExchange methods !
poke: itemName data: someData format: aFormat
"Poke the server at itemName with someData in aFormat."
| ddeStruct |
ddeStruct := PMDdeStruct new
response: itemName
data: someData asParameter
advise: false.
ddeStruct format: aFormat.
self poke: ddeStruct.! !
! DynamicDataExchange methods !
terminate
"Terminate the exchange."
data := nil.
server notNil ifTrue: [self post: WmDdeTerminate].
window notNil ifTrue: [window close].! !
! DynamicDataExchange methods !
window
"Private - Answer the associated DDEAuxWindow,
or nil if none."
^window! !
! DDEAuxWindow methods !
byteMode: aBoolean
"Private - If aBoolean is true, set receiver to return data as a
ByteArray rather than as a (default) String."
aBoolean ifTrue: [mode := #data]
ifFalse: [mode := #dataAsString].! !
! DDEAuxWindow methods !
ddeData: serverWindow with: aPMDdeStruct
"Private - DDE data received."
answer := aPMDdeStruct perform: mode.
sem wait.
process notNil ifTrue: [
Processor resume: process.
Processor schedule]! !
! DDEAuxWindow methods !
initialize
"Private - Initialize the receiver."
super initialize.
sem := Semaphore new.
self byteMode: false.! !
--
cowan@marob.masa.com (aka ...!hombre!marob!cowan)
e'osai ko sarji la lojban