The SMB$READ_MESSAGE routine copies a message that the job controller has sent into the caller's specified buffer. Format SMB$READ_MESSAGE stream ,buffer ,request
1 – Returns
OpenVMS usage:cond_value type: longword (unsigned) access: write only mechanism: by value Longword condition value. Most utility routines return a condition value in R0. Condition values that this routine can return are listed under Condition Values Returned.
2 – Arguments
stream OpenVMS usage:longword_unsigned type: longword (unsigned) access: write only mechanism: by reference Stream number specifying the stream to which the message refers. The stream argument is the address of a longword into which the job controller writes the number of the stream referred to by the message. In single-threaded symbionts, the stream number is always 0. buffer OpenVMS usage:char_string type: character string access: write only mechanism: by descriptor Address of the descriptor that points to the buffer into which the job controller writes the message. SMB$READ_MESSAGE uses the Run-Time Library string-handling (STR$) routines to copy the message into the buffer you supply. The buffer should be specified by a dynamic string descriptor. request OpenVMS usage:identifier type: longword (unsigned) access: write only mechanism: by reference Code that identifies the request. The request argument is the address of a longword into which SMB$READ_MESSAGE writes the code that identifies the request. There are seven request codes. Each code is interpreted as a message by the symbiont. The codes and their descriptions follow: SMBMSG$K_START_ Initiates processing on an inactive STREAM symbiont stream. The job controller sends this message when a START/QUEUE or an INITIALIZE/QUEUE/START command is issued on a stopped queue. SMBMSG$K_STOP_ Stops processing on a started queue. The STREAM job controller sends this message when a STOP/QUEUE/NEXT command is issued, after the symbiont completes any currently active task. SMBMSG$K_RESET_ Aborts all processing on a started stream STREAM and requeues the current job. The job controller sends this message when a STOP/QUEUE/RESET command is issued. SMBMSG$K_START_TASK Requests that the symbiont begin processing a task. The job controller sends this message when a file is pending on an idle, started queue. SMBMSG$K_STOP_TASK Requests that the symbiont abort the processing of a task. The job controller sends this message when a STOP/QUEUE/ABORT or STOP/QUEUE/REQUEUE command is issued. The item SMBMSG$K_STOP_CONDITION identifies whether this is an abort or a requeue request. SMBMSG$K_PAUSE_TASK Requests that the symbiont pause in the processing of a task but retain the resources necessary to continue. The job controller sends this message when a STOP/QUEUE command is issued without the /ABORT, /ENTRY, /REQUEUE, or /NEXT qualifier for a queue that is currently printing a job. SMBMSG$K_RESUME_ Requests that the symbiont continue TASK processing a task that has been stopped with a PAUSE_TASK request. This message is sent when a START/QUEUE command is issued for a queue served by a symbiont that has paused in processing the current task.
3 – Description
Your symbiont calls SMB$READ_MESSAGE to read a message that the job controller has sent to the symbiont. Each message from the job controller consists of a code identifying the function the symbiont is to perform and a number of message items. There are seven codes. Message items are pieces of information that the symbiont needs to carry out the requested function. For example, when you enter the DCL command PRINT, the job controller sends a message containing a START_TASK code and a message item containing the specification of the file to be printed. SMB$READ_MESSAGE writes the code into a longword (specified by the request argument) and writes the accompanying message items, if any, into a buffer (specified by the buffer argument). See the description of the SMB$READ_MESSAGE_ITEM routine for information about processing the individual message items.
4 – Condition Values Returned
SS$_NORMAL Normal successful completion. LIB$_INVARG Routine completed unsuccessfully because of an invalid argument. This routine also returns any of the condition codes returned by the Run-Time Library string-handling (STR$) routines.