GDSX Manual

Design and Development
Extended General Device Support (GDSX) Manual134303
2-91
Intertask Communication
If an IMSG event for a task has occurred, ^LISTEN is called to look for IOCBs on
the task’s completed I/O list with iocb.file equal to 0. If found, the IOCBs are
deleted from the completed I/O list and its address is returned.
As ^LISTEN is passing a new $RECEIVE request to a task, it sets tcb.lastrcviocb to
the address of the IOCB representing that request. This is done so that
^RECEIVEINFO can locate all of the information that it needs to return to the
caller. IOCBs returned by ^LISTEN have iocb.state set to 9.
If iocb.state is equal to 1, ^LISTEN must allocate space in the buffer pool to hold the
request. If this attempt is not successful within the time specified in the
BUFFERTIMEOUT configuration parameter, the request is replied to with
FENOBUFSPACE (31). Otherwise, the request data, if any, is moved from extended
memory as iocb.xbufaddr and the extended memory space is deallocated.
If ^LISTEN does not find a new request, and the file parameter to ^AWAITIO was
zero, tcb.rcvsz should be nonzero (that is, the task should have a ^READUPDATE
posted on $RECEIVE). If not, ^AWAITIO returns with CCL; a subsequent call to
^FILEINFO(0, ...) returns FENONEOUT.
WAIT^EVENT is called with the mask parameter allowing the task to be awakened
on the IMSG event.
When the DEVICE^HANDLER task finishes processing the request and calls ^REPLY:
Tcb.lastrcviocb is set to the address of the IOCB.
If no message tag is passed and the address of IOCB is zero, ^REPLY returns with
CCL; a subsequent call to ^FILEINFO returns FEBADREPLY.
If a message tag is passed and does not match iocb.msgtag:
°
The address of the IOCB is set to RCVTBL[message tag].
°
If the address of IOCB is 0 or iocb.tcbaddr is not equal to the current task’s
TCB, ^REPLY returns with CCL; a subsequent call to ^FILEINFO returns
FEBADREPLY.
REPLY is called.
RCBTBL[iocb.msgtag] is set to 0.
The IOCB is deleted from its RCB’s list.
The IOCB is deallocated.
Intertask Communication
The intertask communication (ITC) facility was implemented to enable
DEVICE^HANDLER tasks to have a device-oriented interface to subdevices on a line
or to communicate with other DEVICE^HANDLER or LINE^HANDLER tasks without
using the Guardian file and message system. ITC communication is also possible
between LINE^HANDLER tasks.