The job controller can request seven functions from the symbiont. They are identified by the following codes: SMBMSG$K_START_STREAM SMBMSG$K_STOP_STREAM SMBMSG$K_START_TASK SMBMSG$K_PAUSE_TASK SMBMSG$K_RESUME_TASK SMBMSG$K_STOP_TASK SMBMSG$K_RESET_STREAM The job controller passes the symbiont a request containing a code and, optionally, a number of message items containing information the symbiont might need to perform the function. The code specifies what function the request is for, and the message items contain information that the symbiont needs to carry out the function. By calling SMB$READ_MESSAGE, the symbiont reads the request and writes the message items into the specified buffer. The symbiont then obtains the individual message items by calling the SMB$READ_MESSAGE_ITEM routine. Each message item consists of a code that identifies the information the item represents, and the item itself. For example, the SMB$K_JOB_NAME code tells the symbiont that the item specifies a job's name. The number of items in a request varies with each type of request. Therefore, you must call SMB$READ_MESSAGE_ITEM repeatedly for each request to ensure that all message items are read. Each time SMB$READ_MESSAGE_ITEM reads a message item, it updates the value in the longword specified by the context argument. SMB$READ_MESSAGE_ITEM returns the code SMB$_NOMOREITEMS after it has read the last message item. The following table shows the message items that can be delivered with each request: Request Message Item SMBMSG$K_START_TASK SMBMSG$K_ACCOUNT_NAME SMBMSG$K_AFTER_TIME SMBMSG$K_BOTTOM_MARGIN SMBMSG$K_CHARACTERISTICS SMBMSG$K_CHECKPOINT_DATA SMBMSG$K_ENTRY_NUMBER SMBMSG$K_FILE_COPIES SMBMSG$K_FILE_COUNT SMBMSG$K_FILE_IDENTIFICATION SMBMSG$K_FILE_SETUP_MODULES SMBMSG$K_FILE_SPECIFICATION SMBMSG$K_FIRST_PAGE SMBMSG$K_FORM_LENGTH SMBMSG$K_FORM_NAME SMBMSG$K_FORM_SETUP_MODULES SMBMSG$K_FORM_WIDTH SMBMSG$K_JOB_COPIES SMBMSG$K_JOB_COUNT SMBMSG$K_JOB_NAME SMBMSG$K_JOB_RESET_MODULES SMBMSG$K_LAST_PAGE SMBMSG$K_LEFT_MARGIN SMBMSG$K_MESSAGE_VECTOR SMBMSG$K_NOTE SMBMSG$K_PAGE_SETUP_MODULES SMBMSG$K_PARAMETER_1 . . . SMBMSG$K_PARAMETER_8 SMBMSG$K_PRINT_CONTROL SMBMSG$K_SEPARATION_CONTROL SMBMSG$K_REQUEST_CONTROL SMBMSG$K_PRIORITY SMBMSG$K_QUEUE SMBMSG$K_RIGHT_MARGIN SMBMSG$K_TIME_QUEUED SMBMSG$K_TOP_MARGIN SMBMSG$K_UIC SMBMSG$K_USER_NAME SMBMSG$K_STOP_TASK SMBMSG$K_STOP_CONDITION SMBMSG$K_PAUSE_TASK None SMBMSG$K_RESUME_ SMBMSG$K_ALIGNMENT_PAGES TASK SMBMSG$K_RELATIVE_PAGE SMBMSG$K_REQUEST_CONTROL SMBMSG$K_SEARCH_STRING SMBMSG$K_START_ SMBMSG$K_DEVICE_NAME STREAM SMBMSG$K_EXECUTOR_QUEUE SMBMSG$K_JOB_RESET_MODULES SMBMSG$K_LIBRARY_SPECIFICATION SMBMSG$K_STOP_ None STREAM SMBMSG$K_RESET_ None STREAM The following list describes each item code. For each code, the list describes the contents of the message item identified by the code and whether the code identifies an item sent from the job controller to the symbiont or from the symbiont to the job controller. Many of the codes described are specifically oriented toward print symbionts. The symbiont you implement, which might not print files or serve an output device, need not recognize all these codes. In addition, it need not respond in the same way as the print symbiont to the codes it recognizes. The descriptions in the list describe how the standard print symbiont (PRTSMB.EXE) processes these items. NOTE Because new codes might be added in the future, you should write your symbiont so that it ignores codes it does not recognize.