.HL 1 [MA_Q.SUBROUTINES]ATTACH_QE.MAR .c ;MODULE .c ;^&ATTACH_QE\& .HL 2ATTACH_QE .nf .x ATTACH_QE>Defined Source:[MA_Q.SUBROUTINES]ATTACH_QE.MAR Designer :EARL LAKIA Author :EARL LAKIA Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 19-FEB-1987 Revision level :1.0 .C ;Formal Parameter List QBX RECORD/QEXDEF/ QBX WILL CONTAIN THE START ADDRESS FOR P0 (QBX.Q_BLOCK(1)), THE ENDING ADDRESS FOR P0 (QBX.Q_BLOCK(2)), AND THE EXIT HANDLER BLOCK (QBX.EXIT). Q_NAME CHARACTER*16 GLOBAL SECTION NAME (OPTIONAL). This parameter IF SPECIFIED, IDENTIFIES THE GLOBAL SECTION TO BE ATTACHED. IF NOT SPECIFIED, THE DEFAULT GLOBAL SECTION IS ATTACHED AS SPECIFIED BY EITHER THE NAME "MA_Q_NAME" OR THE LOGICAL NAME "GBL$MA_Q_NAME". MID_COUNT INTEGER*2 (OPTIONAL) MAXIMUM NUMBER OF MESSAGE IDS THE CALLER WILL ATTTACH TO. IF NOT SPECIFIED, THE DEFAULT IS USED. Returns: ATTACH_QE INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine expands P0 space to get a working area. The global section is then attached, with the information being stored in the P0 work space. A null lock is created to be used for accessing the global section. Some Process information is obtained and stored in the working area. An exit handler is setup in supervisor mode. This entry is different from the ATTACH_Q entry in that it will also set up a user mode exit handler (pointing to within this service) that will attempt to do a DETACH_Q for the caller. This is important when a process is ran via DCL as the process rundown will not occurr (and therefore the supervisor mode exit handler). If the supervisor mode exit handler does not get executed, the queue will not be detached nor will the message ids be disconnected. Subsequent runs of the process will return the error code QUE_ALRATT or QUE_MIDATTACHED. Note: Since this subroutine stores a exit block for the caller, any destruction of the QBX structure may result in strange exits and faults. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 27 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INCLUDE 'MA_Q$DEF:QUEUE.TLB(QEXDEF)' RECORD/QBXDEF/QBX INTEGER*2 MID_COUNT CHARACTER Q_NAME*(*) PARAMETER (Q_NAME = 'MY_OWN_QUEUE') MID_COUNT = 7 ... STATUS = ATTACH_QE (QBX) OR STATUS = ATTACH_QE (QBX, Q_NAME) OR STATUS = ATTACH_QE (QBX, Q_NAME, MID_COUNT) OR STATUS = ATTACH_QE (QBX, , MID_COUNT) NOTE: When calling the subsequent routines, the parameter for the Q_BLOCK is simply: QBX.Q_BLOCK. POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_GTRMAX - Number specified is greater than allowed maximum number of MIDs .X QUE_GTRMAX .LE;QUE_NOCHK - Checkpoint process is not available .X QUE_NOCHK .LE;QUE_ALRATT- Queue already attached .x QUE_ALRATT .ELS .fill .PAGE .HL 1 [MA_Q.SUBROUTINES]OPR_FAO_MSG.MAR .c ;MODULE .c ;^&OPR_FAO_MSG\& .HL 2OPR_FAO_MSG .nf .x OPR_FAO_MSG>Defined Source:[MA_Q.SUBROUTINES]OPR_FAO_MSG.MAR Designer :EARL LAKIA Author :EARL LAKIA Date of last update:20-JUN-1986 09:12:05.86 Revision level :1.0 Copy Right: Inland Steel Co. 3210 Watling St. East Chicago, IN 46312 .C ;Formal Parameter List Receives: STATUS INTEGER*4 SYSTEM OR USER MESSAGE STATUS CODE FAO_ARG SEE FAO ARG. IN MESSAGE THESE ARE THE ARGUMENTS THAT WILL BE ENCODED INTO THE USER OR SYSTEM MESSAGE. TO DETERMINE THE TYPE, THE USER MUST KNOWN FAO PARAMETERS FOR THE MESSAGE. Returns: OPR_FAO_MSG INTEGER*4 RETURN STATUS OF THE CALL, MAY BE FROM FAO, GETMSG, OR SNDOPR. ALSO IF NUMBER OF ARGUMENTS DOES NOT AGREE WITH THE NUMBER IN MESSAGE, MAY CONTAIN A WARNING. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This subroutine call the system service GETMSG to get the text for the user passed error code and the number of FAO arguments in the message. The subroutine will then take the lesser of the two counts and apply the passed FAO parameters to form a message that will be passed sent via SNDOPR to the operator console. The user and process sending the message will also be sent as part of the message. The FAO arguments are passed by descriptor for character strings, by value for integer*2, byte, and integer*4, and by address for QUAD word. The calling sequence is: .nofill .sk INTEGER*4 SYS_STATUS EXTERNAL USR_BAD ! A SAMPLE BAD STATUS SET UP C WITH THE MESSAGE UTILITY C C SYS_STATUS=OPR_FAO_MSG(USRBAD,'THIS IS A TEST') C C THE FAO ARGUMENT FOR THIS IS MESSAGE WAS !AS C C FOR A SYSTEM SERVICE CALL, C SYS_STATUS=OPR_FAO_MSG(%VAL(SS$_NORMAL)) C C NOTE: THE %VAL MUST BE USED INSTEAD OF BY REFERENCE!!!! C .PAGE .HL 1 [MA_Q.SUBROUTINES]READ_QREC.MAR .c ;MODULE .c ;^&READ_QREC\& .HL 2READ_QREC .nf .x READ_QREC>Defined Source:[MA_Q.SUBROUTINES]READ_QREC.MAR TO BECOME PART OF LIBRARY:QUEUE Designer :EARL LAKIA Author : Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:15-AUG-1986 09:10:32.99 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK ARRAY(2) INTEGER*4 Q BLOCK AS RECEIVED FROM THE ATTACH_Q ROUTINE MESSAGE_ID CHARACTER*16 MESSAGE ID THAT CALLER WISHES TO READ INDEX INTEGER*2 OPTIONAL INDEX OF THE MESSAGE ID THAT YOU WISH TO READ (WILL BE USED ALONG WITH THE MESSAGE ID TO QUICKLY FIND THE MESSAGE ID LIST HEAD QUEUE) THIS INDEX IS THE ONE THAT WAS RETURNED WHEN THE CONNECT_READ. NOTE: IF NOT SPECIFIED, A PLACE HOLDER MUST STILL BE PRESENT, IE: A COMMA. Returns: RECORD STRUCTURE/HDRDEF/ + USER RECORD DEF USER RECORD BUFFER RNA INTEGER*4 READ NOT ACKNOWLEGED POINTER. READ_QREC INTEGER*4 RETURN STATUS CODE FROM READ_Q Accesses common(s): Accesses file(s): Other modules referenced: .X READ_Q>Referenced READ_Q SUBROUTINE TO READ A RECORD FROM THE QUEUE. (found in QUEUE.OLB) .SK .fill .SK Description: .sk This subroutine allows the user to read a message from the Queue into a record type structure instead of the character type variable. Basically, this subroutine creates the required descriptor for the READ_Q subroutine. The calling sequence is: .TP 30 .literal INTEGER*4 Q_BLOCK(2) ! AS RECEIVED FROM ATTACH_Q INTEGER*2 LENGTH ! LENGTH OF MESSAGE INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INCLUDE 'MA_Q$DEF:QUEUE.TLB(HDRDEF)' STRUCTURE/RECORD/ RECORD/HDRDEF/HDR CHARACTER*100 DUMMY END STRUCTURE RECORD/RECORD/RECORD ! RECORD TO BE WRITTEN INTEGER*4 SYS_STATUS ! STATUS FROM WRITE_Q CHARACTER*16 MESSAGE_ID INTEGER*4 INDEX ! INDEX OF OUR MESSAGE ID C DATA MESSAGE_ID/'STANDARDS'/ DATA MTYPE/0/ DATA LENGTH/100+HDR$K_SIZE/ ! TOTAL SIZE OF BUFFER C SYS_STATUS=ATTACH_Q(Q_BLOCK) ! ATTACH TO THE QUEUE IF(.NOT. SYS_STATUS)THEN ..... ..... ENDIF C SYS_STATUS=CONNECT_READ(Q_BLOCK,MESSAGE_ID,INDEX) C SYS_STATUS=READ_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,RNA,) ! INDEX NOT SPECIFIED - O R - SYS_STATUS=READ_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,RNA) ! INDEX NOT SPECIFIED - O R - SYS_STATUS=READ_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,RNA,INDEX) ! INDEX SPECIFIED C IF(.NOT. SYS_STATUS)THEN ...... ...... ENDIF .END LITERAL .PAGE .HL 1 [MA_Q.SUBROUTINES]WRITE_QREC.MAR .c ;MODULE .c ;^&WRITE_QREC\& .HL 2WRITE_QREC .nf .x WRITE_QREC>Defined Source:[MA_Q.SUBROUTINES]WRITE_QREC.MAR TO BECOME PART OF LIBRARY:QUEUE Designer :EARL LAKIA Author :EARL LAKIA Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:26-AUG-1986 Revision level :1.2 .C ;Formal Parameter List Receives: Q_BLOCK ARRAY(2) INTEGER*4 Q_BLOCK AS FILLED IN BY ATTACH_Q MESSAGE_ID CHARACTER*16 MESSAGE ID OF QUEUE TO WRITE TO. RECORD RECORD RECORD CONTAINING MESSAGE TO BE WRITTEN TO THE QUEUE. NOTE: PASSED BY REFERENCE AND NOT BY DESCRIPTOR AS WRITE_Q IS. (IE: WHY THIS ROUTINE WAS WRITTEN) LENGTH INTEGER*2 LENGTH OF THE MESAGE TO BE WRITTEN IN BYTES MTYPE INTEGER*2 TYPE OF MESSAGE (0= NORMAL, 1= CAN NOT BE DELETED) INDEX INTEGER*2 OPTIONAL INDEX OF THE MESSAGE ID WITHIN THE QUEUE. SPACE HOLDER MUST BE PRESENT IF NOT SPECIFIED (IE: EXTRA COMMA) Returns: WRITE_QREC INTEGER*4 STATUS FROM WRITE_Q Accesses common(s): Accesses file(s): Other modules referenced: .X WRITE_Q>Referenced WRIT_Q ACTUALLY WRITE MESSAGE TO THE QUEUE AND CALLS THE SYSTEM SERVICE .SK .fill .SK Description: .sk This subroutine allows the caller to call the Q_WRITE subroutine with record type variables. The Q_WRITE only accepts message buffer to be passed by DESCRIPTOR. This routine therefore makes a fake descriptor for the caller. Since this code is written in FORTRAN, all parameters must be specified or placed holder present for the single optional argument (INDEX). CALLING SEQUENCE .TP 30 .literal INCLUDE'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) ! AS RECEIVED FROM ATTACH_Q INTEGER*2 LENGTH ! LENGTH OF MESSAGE STRUCTURE/RECORD/ CHARACTER*100 DUMMY END STRUCTURE RECORD/RECORD/RECORD ! RECORD TO BE WRITTEN INTEGER*2 MTYPE ! TYPE OF MESSAGE INTEGER*4 SYS_STATUS ! STATUS FROM WRITE_Q CHARACTER*16 MESSAGE_ID C DATA MESSAGE_ID/'STANDARDS'/ DATA MTYPE/0/ DATA LENGTH/100/ C SYS_STATUS=ATTACH_Q(Q_BLOCK) ! ATTACH TO THE QUEUE IF(.NOT. SYS_STATUS)THEN ..... ..... ENDIF C SYS_STATUS=WRITE_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,MTYPE,) ! INDEX NOT SPECIFIED - O R - SYS_STATUS=WRITE_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,MTYPE) ! INDEX NOT SPECIFIED - O R - SYS_STATUS=WRITE_QREC(Q_BLOCK,MESSAGE_ID, 1 RECORD,LENGTH,MTYPE,INDEX) ! INDEX SPECIFIED C IF(.NOT. SYS_STATUS)THEN ...... ...... ENDIF .END LITERAL .FILL The return status is from the Q_WRITE except if the user does not pass either four or five arguments. .PAGE .HL 1 [MA_Q.SYSSERV]SSDISP.MAR .c ;MODULE .c ;^&ACK_READ\& .HL 2ACK_READ .nf .x ACK_READ>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 31-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID TO READ FROM. RNA_POINTER INTEGER*4 POINTER TO THE RNA MESSAGE. THIS VALUE WAS RETURNED DURING THE READ OPERATION. IF THIS VALUE DOES NOT MATCH THE VALUES SPCIFIED IN THE MESSAGE ID HEADER, AN APPROPRIATE ERROR MESSAGE WILL BE RETURNED. MIDX INTEGER*2 (OPTIONAL) INDEX OF MESSAGE ID. USED FOR FASTER ACCESS TO THE MESSAGE ID HEADER. IF NOT SPECIFIED, THE MESSAGE ID NAME IS USED. IF SPECIFIED, THE NAME CALCULATED FROM THE INDEX IS COMPARED WITH THE PASSED NAME, AND IF NOT THE SAME, THE PASSED NAME IS USED. Returns: ACK_READ INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine acknolwges a message for the specified message ID. The following conditions are checked: the message ID exists the calling process is connected to the specified message ID the message ID does have an RNA message the RNA pointer matches the one stored in the Message ID header If any of the above conditions are not met, an appropriate error message is returned. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 27 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) CHARACTER MESSAGE_ID*16 MESSAGE_ID = 'STEEL_AVAILABLTY' INTEGER*4 RNA_POINTER INTEGER*2 MIDX ... STATUS = ACK_READ (Q_BLOCK, MESSAGE_ID, RNA_POINTER) or STATUS = ACK_READ (Q_BLOCK, MESSAGE_ID, RNA_POINTER, MIDX) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_INVIDX - MID index is not consistant with MID name .X QUE_INVIDX .LE;QUE_IDXOOR - MID index is out of range .X QUE_IDXOOR .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_NORNAMESS - There is no outstanding read-not-acknowleged mesage .X QUE_NORNAMESS .LE;QUE_INVRNA - Invalid read-not-acknowleged pointer .X QUE_INVRNA .LE;QUE_MIDNOTATT - Message ID is not attached .X QUE_MIDNOTATT .LE;QUE_NOCHK - Checkpoint process is not available .X QUE_NOCHK .ELS .fill .PAGE .c ;MODULE .c ;^&ADD_MESSAGE_ID\& .nf .x ADD_MESSAGE_ID>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author :Earl Lakia, Paul Vestudo Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:19-FEB-1987 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4 (2) Q BLOCK DESCRIPTOR AS RETURNED FROM THE ATTACH_Q SERVICE. THE ADDITION OF AN ID APPLIES TO THIS QUEUE ONLY. MESSAG_ID CHARACTER*16 MESSAGE ID THAT IS TO BE ADDED. MAXCNT INTEGER*4 MAXIMUM NUMBER OF MESSAGES TO BE ALLOWED FOR THIS MESSAGE ID. Returns: ADD_MESSAGE_ID INTEGER*4 RETURN STATUS Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This system service allows the caller to add a message id to the queue. The caller must have sufficient privelege (SYSNAM). .sk CALL SEQUENCE INTEGER*4 SYS_STATUS INTEGER*4 ADD_MESSAGE_ID ! SYS. SERV. CALL CHARACTER*16 MESSAGE_ID !MESSAGE ID TO ADD INTEGER*4 Q_BLOCK(2) ! FROM ATTACH Q INTEGER*4 MAXMSG ! MAX NUMBER MESSAGES DATA MAXMSG/100/ DATA MESSAGE_ID/'MESSAGE ONE'/ C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF(.NOT. SYS_STATUS)THEN CALL SSYS$EXIT(%VAL(SYS_STATUS)) ENDIF C SYS_STATUS=ADD_MESSAGE_ID( 1 Q_BLOCK, 1 MESSAGE_ID, 1 MAXMSG) C IF(.NOT. SYS_STATUS)THEN CALL SYS$EXIT(%VAL(SYS_STATUS)) ENDIF END .FILL .SK POSSSBILE ERROR CODES (Can also be system service errors): .LIST 1,' ' .LE;QUE_INSFARG- Insufficient number of arguments .X QUE_INSFARG .LE;QUE_INVARG- Invalid argument (one of the parameters is not valid, make sure Q_BLOCK is correctly dimentsioned, MESSAGE_ID is of sufficient dimension, etc. .X QUE_INVARG .LE;QUE_NOTINITIALIZED- The Q_BLOCK passed is either zero, or does not contain valid information. .x QUE_NOTINITIALIZED .LE;QUE_MIDTNOTUNIQUE- A request to add a message id that already exists. .X QUE_MIDNOTUNIQUE .LE;QUE_MIDLISTFULL- There is insufficient room left in the queue to allow the addition of the message id. The queue must be recreated and reinstalled with a larger allocation for the message id list heads. .x QUE_MIDLISTFULL .LE;QUE_NOPRIV- Calling process does not have sufficient privelege to add the message id to the queue. SYSPRV is required. .x QUE_NOPRIV .x SYSPRV .ELS .PAGE .c ;MODULE .c ;^&ATTACH_Q\& .HL 2ATTACH_Q .nf .x ATTACH_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 29-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). Q_NAME CHARACTER*16 GLOBAL SECTION NAME (OPTIONAL). This parameter IF SPECIFIED, IDENTIFIES THE GLOBAL SECTION TO BE ATTACHED. IF NOT SPECIFIED, THE DEFAULT GLOBAL SECTION IS ATTACHED AS SPECIFIED BY EITHER THE NAME "MA_Q_NAME" OR THE LOGICAL NAME "GBL$MA_Q_NAME". MID_COUNT INTEGER*2 (OPTIONAL) MAXIMUM NUMBER OF MESSAGE IDS THE CALLER WILL ATTTACH TO. IF NOT SPECIFIED, THE DEFAULT IS USED. Returns: ATTACH_Q INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine expands P0 space to get a working area. The global section is then attached, with the information being stored in the P0 work space. A null lock is created to be used for accessing the global section. Some Process information is obtained and stored in the working area. An exit handler is setup. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 27 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) INTEGER*2 MID_COUNT CHARACTER Q_NAME*(*) PARAMETER (Q_NAME = 'MY_OWN_QUEUE') MID_COUNT = 7 ... STATUS = ATTACH_Q (Q_BLOCK) OR STATUS = ATTACH_Q (Q_BLOCK, Q_NAME) OR STATUS = ATTACH_Q (Q_BLOCK, Q_NAME, MID_COUNT) OR STATUS = ATTACH_Q (Q_BLOCK, , MID_COUNT) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_GTRMAX - Number specified is greater than allowed maximum number of MIDs .X QUE_GTRMAX .LE;QUE_NOCHK - Checkpoint process is not available .X QUE_NOCHK .LE;QUE_ALRATT- Queue already attached .x QUE_ALRATT .ELS .fill .PAGE .c ;MODULE .c ;^&BACKUP_RNA\& .HL 2BACKUP_RNA .nf .x BACKUP_RNA>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 15-Aug-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID TO READ FROM. RNA_POINTER INTEGER*4 POINTER TO THE RNA MESSAGE. THIS VALUE WAS RETURNED DURING THE READ OPERATION. IF THIS VALUE DOES NOT MATCH THE VALUES SPCIFIED IN THE MESSAGE ID HEADER, AN APPROPRIATE ERROR MESSAGE WILL BE RETURNED. MIDX INTEGER*2 (OPTIONAL) INDEX OF MESSAGE ID. USED FOR FASTER ACCESS TO THE MESSAGE ID HEADER. IF NOT SPECIFIED, THE MESSAGE ID NAME IS USED. IF SPECIFIED, THE NAME CALCULATED FROM THE INDEX IS COMPARED WITH THE PASSED NAME, AND IF NOT THE SAME, THE PASSED NAME IS USED. Returns: BACKUP_RNA INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine returns an RNA message to the head of the Message ID queue. The following conditions are checked: the message ID exists the calling process is connected to the specified message ID the message ID does have an RNA message the RNA pointer matches the one stored in the Message ID header If any of the above conditions are not met, an appropriate error message is returned. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 27 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) CHARACTER MESSAGE_ID*16 MESSAGE_ID = 'STEEL_AVAILABLTY' INTEGER*4 RNA_POINTER INTEGER*2 MIDX ... STATUS = BACKUP_RNA (Q_BLOCK, MESSAGE_ID, RNA_POINTER) or STATUS = BACKUP_RNA (Q_BLOCK, MESSAGE_ID, RNA_POINTER, MIDX) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_INVIDX - MID index is not consistant with MID name .X QUE_INVIDX .LE;QUE_IDXOOR - MID index is out of range .X QUE_IDXOOR .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_NORNAMESS - There is no outstanding read-not-acknowleged mesage .X QUE_NORNAMESS .LE;QUE_INVRNA - Invalid read-not-acknowleged pointer .X QUE_INVRNA .LE;QUE_MIDNOTATT - Message ID is not attached .X QUE_MIDNOTATT .LE;QUE_HEADNOTREM - Message header unable to be removed from Message ID list .X QUE_HEADNOTREM .ELS .fill .PAGE .c ;MODULE .c ;^&CHANGE_MESSAGE_ID\& .HL 2CHANGE_MESSAGE_ID .nf .x CHANGE_MESSAGE_ID>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author :EARL LAKIA Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:18-FEB-1987 07:51:10.64 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4 (2) Q-BLOCK AS RETURNED FROM ATTACH Q MESSAGE_ID CHARACTER*16 MESSAGE ID THAT CHANGE IS TO EFFECT NEWCOUNT INTEGER84 NEW MAXIMUM NUMBER OF MESSAGES FOR THIS MESSAGE ID Returns: CHANGE_MESSAGE_ID INTEGER*4 RETURN STATUS Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This subroutine allows the caller to modify the maximum number of messages allowed for a message id. This is the only parameter that has any meaning to be modified. .sk CALLING SEQUENCE INTEGER*4 SYS_STATUS INTEGER*4 CHANGE_MESSAGE_ID ! SYS. SERV. CALL CHARACTER*16 MESSAGE_ID !MESSAGE ID TO ADD INTEGER*4 Q_BLOCK(2) ! FROM ATTACH Q INTEGER*4 MAXMSG ! MAX NUMBER MESSAGES DATA MAXMSG/100/ DATA MESSAGE_ID/'MESSAGE ONE'/ C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF(.NOT. SYS_STATUS)THEN CALL SSYS$EXIT(%VAL(SYS_STATUS)) ENDIF C SYS_STATUS=CHANGE_MESSAGE_ID( 1 Q_BLOCK, 1 MESSAGE_ID, 1 MAXMSG) C IF(.NOT. SYS_STATUS)THEN CALL SYS$EXIT(%VAL(SYS_STATUS)) ENDIF END .FILL .SK POSSSBILE ERROR CODES (Can also be system service errors): .LIST 1,' ' .LE;QUE_INSFARG- Insufficient number of arguments .X QUE_INSFARG .LE;QUE_INVARG- Invalid argument (one of the parameters is not valid, make sure Q_BLOCK is correctly dimentsioned, MESSAGE_ID is of sufficient dimension, etc. .X QUE_INVARG .LE;QUE_NOTINITIALIZED- The Q_BLOCK passed is either zero, or does not contain valid information. .x QUE_NOTINITIALIZED .LE;QUE_NOPRIV- The calling process does not have sufficient privelege to change a message id. The privelege SYSPRIV is required. .X QUE_NOPRIV .ELS .PAGE .c ;MODULE .c ;^&CONNECT_READ\& .HL 2CONNECT_READ .nf .x CONNECT_READ>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 25-AUG-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, CONTAINS THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE_ID TO CONNECT TO EFN INTEGER*2 EVENT FLAG TO SET WHEN THIS MESSAGE IDS COUNT GOES NON-ZERO. Returns: CONNECT_READ INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. INDEX INTEGER*2 INDEX OF MESSAGE ID IN MID LIST. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine establishes the caller as the reader of the specified message IDs. The queue does not get checkpointed because the connect information is considered to be volatile. This routines expects the parameters to be valid and that the caller has already called the appropriate initialization routines. If any of the above conditions are not met, an appropriate return code is returned to the caller. .TP 25 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) INTEGER*2 EFN, INDEX CHARACTER*16 MESSAGE_ID ... MESSAGE_ID = 'STEEL_AVAILABLTY' EFN = 1 STATUS = CONNECT_READ (Q_BLOCK, MESSAGE_ID, EFN, INDEX) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_MIDATTACHED - Message ID is already attached .X QUE_MIDATTACHED .LE;QUE_MAXMID - Caller is connected to maximum number of Message IDs .X QUE_MAXMID .LE;QUE_HEADNOTREM - Message header unable to be removed from Message ID list .X QUE_HEADNOTREM .ELS .fill .PAGE .c ;MODULE .c ;^&DELETE_MESSAGE_ID\& .HL 2DELETE_MESSAGE_ID .nf .x DELETE_MESSAGE_ID>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author : Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:18-FEB-1987 07:54:35.26 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4 (2) Q_BLOCK AS RETURNED FROM ATTACH Q MESSAGE_ID CHARACTER*16 MESSAGE ID THAT IS TO BE DELETED FROM THE QUEUE Returns: DELETE_MESSAGE_ID INTEGER*4 RETURN STATUS Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This subroutine allows the caller to mark a message Id as nolonger in the queue. The message id can not have any messages in the queue. .sk CALLING SEQUENCE INTEGER*4 SYS_STATUS INTEGER*4 DELETE_MESSAGE_ID ! SYS. SERV. CALL CHARACTER*16 MESSAGE_ID !MESSAGE ID TO DELETE INTEGER*4 Q_BLOCK(2) ! FROM ATTACH Q INTEGER*4 MAXMSG ! MAX NUMBER MESSAGES DATA MAXMSG/100/ DATA MESSAGE_ID/'MESSAGE ONE'/ C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF(.NOT. SYS_STATUS)THEN CALL SSYS$EXIT(%VAL(SYS_STATUS)) ENDIF C SYS_STATUS=DELETE_MESSAGE_ID( 1 Q_BLOCK, 1 MESSAGE_ID) C IF(.NOT. SYS_STATUS)THEN CALL SYS$EXIT(%VAL(SYS_STATUS)) ENDIF END .FILL .SK POSSSBILE ERROR CODES (Can also be system service errors): .LIST 1,' ' .LE;QUE_INSFARG- Insufficient number of arguments .X QUE_INSFARG .LE;QUE_INVARG- Invalid argument (one of the parameters is not valid, make sure Q_BLOCK is correctly dimentsioned, MESSAGE_ID is of sufficient dimension, etc. .X QUE_INVARG .LE;QUE_NOTINITIALIZED- The Q_BLOCK passed is either zero, or does not contain valid information. .x QUE_NOTINITIALIZED .le;QUE_MIDDELETED- The requested message id has been marked for delete .x QUE_MIDDELETED .LE;QUE_MIDNOTFOUND- The desired message id is not in the queue. .x QUE_MIDNOTFOUND .le;QUE_NOPRIV- Calling process does not have sufficient privilege to delete the message id. The privelege SYSPRV is required. .x QUE_NOPRIV .ELS .PAGE .c ;MODULE .c ;^&DETACH_Q\& .HL 2DETACH_Q .nf .x DETACH_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 12-Aug-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, CONTAINS THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). Returns: DETACH_Q INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine detaches the caller from the specified queue. This routines expects the parameter to be valid and that the caller has already called the appropriate initialization routines. If any of the above conditions are not met, an appropriate return code is returned to the caller. .tp 10 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) ... STATUS = DETACH_Q (Q_BLOCK) .fill .PAGE .c ;MODULE .c ;^&DISPLAY_MESSAGE_ID\& .HL 2DISPLAY_MESSAGE_ID .nf .x DISPLAY_MESSAGE_ID>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author :EARL LAKIA, PAUL VESTUDO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update:18-FEB-1987 07:59:02.07 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4 (2) Q_BLOCK AS RETURNED FROM ATTACH Q MESSAGE_ID CHARACTER*15 MESSAGE ID LIST HEAD THAT CALLER DESIRES MHD RECORD/MIDDEF/ STRUCTURE TO RECIEVE THE MESSAGE ID LIST HEAD Returns: DISPLAY_MESSAGE_ID INTEGER*4 RETURN STATUS Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This system service allows the caller to add a message id to the queue. The caller must have sufficient privelege (SYSNAM). .sk CALL SEQUENCE INTEGER*4 SYS_STATUS INTEGER*4 DISPLAY_MESSAGE_ID ! SYS. SERV. CALL CHARACTER*16 MESSAGE_ID !MESSAGE ID TO ADD INTEGER*4 Q_BLOCK(2) ! FROM ATTACH Q INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUEDEF)' RECORD/MIDDEF/MHD DATA MAXMSG/100/ DATA MESSAGE_ID/'MESSAGE ONE'/ C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF(.NOT. SYS_STATUS)THEN CALL SSYS$EXIT(%VAL(SYS_STATUS)) ENDIF C SYS_STATUS=DISPLAY_MESSAGE_ID( 1 Q_BLOCK, 1 MESSAGE_ID, 1 MHD) C IF(.NOT. SYS_STATUS)THEN CALL SYS$EXIT(%VAL(SYS_STATUS)) ENDIF END .FILL .SK POSSSBILE ERROR CODES (Can also be system service errors): .LIST 1,' ' .LE;QUE_INSFARG- Insufficient number of arguments .X QUE_INSFARG .LE;QUE_INVARG- Invalid argument (one of the parameters is not valid, make sure Q_BLOCK is correctly dimentsioned, MESSAGE_ID is of sufficient dimension, etc. If the program has not been recompiled since a new release, the size of the message id list head may have changed. .X QUE_INVARG .LE;QUE_NOTINITIALIZED- The Q_BLOCK passed is either zero, or does not contain valid information. .x QUE_NOTINITIALIZED .LE;QUE_MIDNOTFOUND- The desired message id is not in the queue. .x QUE_MIDNOTFOUND .ELS .PAGE .c ;MODULE .c ;^&DISPLAY_QUEUE_HEAD\& .HL 2DISPLAY_QUEUE_HEAD .nf .x DISPLAY_QUEUE_HEAD>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR TO BECOME PART OF LIBRARY:MA_Q:[SUBROUTINES]QUEUE.OLB Designer :PAUL VESTUTO Author : Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 2-JUL-1986 13:05:40.89 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, CONTAINS THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). Q_STRUCTURE QUEUE HEADER STRUCTURE THIS PARAMETER IS AN ADDRESS POINTING TO THE STRUCTURE IN THE USER PROGRAM WHICH MAPS THE AREA OF THE QUEUE HEADER. Returns: R0 INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Q_STRUCTURE RECORD/QUEHED/ THE STRUCTURE DEFINED IN THE CALLER PROGRAM WILL BE FILLED IN BY THE DATA CONTAINED IN THE QUEUE HEADER. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routines returns the data from the queue header area in the MA_Q GLOBAL SECTION. This routines expects the parameters to be valid and that the caller has already called the appropriate initialization routines. If any of the above conditions are not met, an appropriate return code is returned to the caller. .nofill INCLUDE 'MA_Q$DEF:QUECONST' RECORD /QHDDEF/ QUEUE_HEAD ... STATUS = DISPLAY_QUEUE_HEAD( Q_BLOCK, QUEUE_HEAD) .sk POSSSBILE ERROR CODES (Can also be system service errors): .LIST 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Passed arguments are not readable/writeabl, or corrupt. If a new release of the queue software has been installed, then possibly, the size of the QHDDEF record may be of a new larger size. .X QUE_INVARG .LE;QUE_NOTINITIALIZED - The caller has not attached to the queue via the ATTACH_Q service. .X QUE_NOTINITIALIZED .ELS .fill .PAGE .c ;MODULE .c ;^&DISPLAY_REGION\& .HL 2DISPLAY_REGION .nf .x DISPLAY_REGION>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR TO BECOME PART OF LIBRARY:MA_Q:[SUBROUTINES]QUEUE.OLB Designer :PAUL VESTUTO, EARL LAKIA Author :EARL LAKIA, PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 14-FEB-1987 Revision level :1.1 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, CONTAINS THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). PEX_STRUCTURE EXPANDED REGION STRUCTURE THIS PARAMETER IS AN ADDRESS POINTING TO THE STRUCTURE IN THE USER PROGRAM WHICH MAPS THE EXPANDED AREA. Returns: R0 INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. PEX_STRUCTURE EXPANDED REGION STRUCTURE THE STRUCTURE DEFINED IN THE CALLER PROGRAM WILL BE FILLED IN BY THE DATA CONTAINED IN THE EXPANDED REGION. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routines returns the data from the expanded region area as defined for the MA_Q routines. This routines expects the parameters to be valid and that the caller has already called the appropriate initialization routines. If any of the above conditions are not met, an appropriate return code is returned to the caller. .nofill INCLUDE 'MA_Q:[DEF]QUECONST.FOR' RECORD /PEXDEF/ EXPANDED_REGION ... STATUS = DISPLAY_REGION( Q_BLOCK, EXPANDED_REGION) .fill .PAGE .c ;MODULE .c ;^&FIND_Q_PROCESSES\& .HL 2FIND_Q_PROCESSES .nf .x FIND_Q_PROCESSES>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author :EARL LAKIA Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 6-MAR-1987 06:07:38.77 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4 (2) Q BLOCK AS RETURNED BY ATTACH_Q OR ATTACH_QE. PCB RECORD/PCBDEF/PCB(SIZE) RECORD ARRAY TO RECIEVE PCB OF THE PROCESS OR PROCESSES THAT ARE ATTACHED TO QUEUE. SIZE INTEGER*4 (BY VALUE) SIZE OF THE PCB RECORD (NUMBER OF RECORDS) Returns: FIND_Q_PROCESSES INTEGER*4 RETURN STATUS FOUND_CNT INTEGER*4 (BY REFERENCE) Number of PCB's found Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This system service allows the caller to find all processes that are currently attached to the queue (the queue is specified and mapped when caller attached to the queue). The method that is used is to get the RSB address from the queue header and traverse lock blocks (LKB) from the three linked lists (Granted, Conversion, and Waiting) in the RSB. From the LKB, the PCB can be found. The user's array if filled until all of the lists are exhausted or the users array is full. In either case, the number found is returned in FOUND_COUNT. .SK .NOFILL The calling sequence is: INCLUDE '(PCBDEF)' INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUEDEF)' INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 SYS_STATUS INTEGER*4 FOUND_COUNT INTEGER*4 SIZE PARAMETER (SIZE=10) INTEGER*4 C RECORD/PCBDEF/PCB(SIZE) C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF(.NOT. SYS_STATUS)THEN ... ERROR ... ENDIF C SYS_STATUS=FIND_Q_PROCESSES(Q_BLOCK,PCB, 1 %VAL(SIZE),FOUND_COUNT) IF(.NOT. SYS_STATUS)THEN ... ERROR ... ELSE DO I = 1,FOUND_COUNT TYPE *,' PROCESS NAME: ',PCB(I).PCB$T_LNAME TYPE *,' EXTENDED PID: ',PCB(I).PCB$L_EPID TYPE *,' INDEX PID: ',PCB(I).PCB$L_PID ENDDO ENDIF .FILL .PAGE .c ;MODULE .c ;^&SHUTDOWN_Q\& .HL 2SHUTDOWN_Q .nf .x SHUTDOWN_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :EARL LAKIA Author :EARL LAKIA Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 3-MAR-1987 08:39:39.17 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q_BLOCK AS RETURNED FROM ATTACH_Q Returns: SHUTDOWN_Q INTEGER*4 RETURN STATUS Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This system service is responsible for the shutdown of a particular installed queue. The service will capture the queue, mark the queue as being shutdown, and request a final checkpoint of the queue by the QUEUE_CHKR process. This service requires SYSPRV. .x QUEUE_CHKR>Referenced The calling sequence is: .nofilll .sk INTEGER*4 SYS_STATUS INTEGER*4 SHUTDOWN_Q INTEGER*4 ATTACH_Q INTEGER*4 Q_BLOCK(2) C SYS_STATUS=ATTACH_Q(Q_BLOCK) IF (.NOT. STATUS)THEN . . ENDIF C SYS_STATUS=SHUTDOWN_Q(Q_BLOCK) IF (.NOT. STATUS)THEN . . ENDIF .FILL The following error codes may be returned: .list 1,' ' .LE;QUE_INSFARG- Insufficient number of arguments .X QUE_INSFARG .LE;QUE_INVARG- Invalid argument (one of the parameters is not valid, make sure Q_BLOCK is correctly dimentsioned, MESSAGE_ID is of sufficient dimension, etc. .X QUE_INVARG .LE;QUE_NOTINITIALIZED- The Q_BLOCK passed is either zero, or does not contain valid information. .x QUE_NOTINITIALIZED .LE;QUE_NOPRIV- Calling process does not have sufficient privelege to add the message id to the queue. SYSPRV is required. .x QUE_NOPRIV .x SYSPRV .ELS .PAGE .c ;MODULE .c ;^&GET_MID_INDEX\& .HL 2GET_MID_INDEX .nf .x GET_MID_INDEX>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 29-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Receives: Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, CONTAINS THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID DESCRIPTOR BLOCK Returns: GET_MID_INDEX INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. INDEX INTEGER*2 INDEX INTO MID LIST IN THE GLOBAL SECTION Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine finds the specified message ID in the MID list and returns the index into the list. This routines expects the parameters to be valid and that the caller has already called the appropriate initialization routines. If any of the above conditions are not met, an appropriate return code is returned to the caller. .tp 20 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 Q_BLOCK(2) INTEGER*2 INDEX CHARACTER*16 MESSAGE_ID MESSAGE_ID = 'STEEL_AVAILABLTY' ... STATUS = GET_MID_INDEX (Q_BLOCK, MESSAGE_ID, INDEX) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .ELS .fill .PAGE .c ;MODULE .c ;^&READ_Q\& .HL 2READ_Q .nf .x READ_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 31-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID TO READ FROM. MIDX INTEGER*2 (OPTIONAL) INDEX OF MESSAGE ID. USED FOR FASTER ACCESS TO THE MESSAGE ID HEADER. IF NOT SPECIFIED, THE MESSAGE ID NAME IS USED. IF SPECIFIED, THE NAME CALCULATED FROM THE INDEX IS COMPARED WITH THE PASSED NAME, AND IF NOT THE SAME, THE PASSED NAME IS USED. Returns: MESSAGE_BUFFER CHARACTER*(LENGTH) BUFFER TO READ INTO. THE SPECIFIED LENGTH MUST BE LARGE ENOUGH TO HOLD THE LARGEST POSSIBLE MESSAGE PLUS THE MESSAGE HEADER. FOR EXAMPLE: IF A MESSAGE WAS WRITTEN AS 230 BYTES, THE READER MUST HAVE A BUFFER LARGE ENOUGH TO HOLD THE 230 TEXT BYTES, PLUS HDR$K_SIZ BYTES FOR THE MESSAGE HEADER. IF NOT LARGE ENOUGH, AN APPROPRIATE ERROR MESSAGE WILL BE RETURNED. RNA_POINTER INTEGER*4 POINTER TO THIS MESSAGE, WHICH HAS JUST BECOME THE NEW RNA MESSAGE. THIS VALUE IS USED FOR ACKNOWLEGING READING A MESSAGE. READ_Q INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine reads a message from the specified message ID. The following conditions are checked: .LIST 1,' ' .LE;the message ID exists .LE;the message ID does not have an RNA message .LE;the message ID does have an unread message .LE;the calling process is connected to the specified message ID .LE;the user buffer is large enough to hold the next message .ELS If any of the above conditions are not met, an appropriate error message is returned. The queue does not get checkpointed because the read information is considered to be volatile. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 27 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INCLUDE 'MA_Q$DEF:QUEUE.TLB(HDRDEF)' INTEGER*4 Q_BLOCK(2) INTEGER*4 RNA_POINTER INTEGER*2 MIDX CHARACTER MESSAGE_ID*16 MESSAGE_ID = 'STEEL_AVAILABLTY' CHARACTER MESSAGE_BUFFER*512 C C Define the message header and the rest of the read message packet C C NOTE: This structure is used to define both sections of the message C coming back from the queue, the message header and the message C body. The UNION is used to allow the caller to pass a buffer C large enough to read the entire message. That is, if just the C MESBUFHDR sub-structure was passed, the system service would C reject the call due to the buffer being too small (if the C message had a non-zero length) since the buffer is passed c by descriptor. C STRUCTURE /MESBUF/ UNION MAP CHARACTER MESSAGE_ALL*(1024) END MAP MAP RECORD /HDRDEF/ MESBUFHDR CHARACTER MESSAGE_BUF*(512) END MAP END UNION END STRUCTURE RECORD /MESBUF/ MESSAGE ... STATUS = READ_Q (Q_BLOCK, MESSAGE_ID, MESSAGE.MESSAGE_ALL, RNA_POINTER) or STATUS = READ_Q (Q_BLOCK, MESSAGE_ID, MESSAGE.MESSAGE_ALL, RNA_POINTER, MIDX) POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_NOMESS - No message for the specified message ID .X QUE_NOMESS .LE;QUE_INVIDX - MID index is not consistant with MID name .X QUE_INVIDX .LE;QUE_IDXOOR - MID index is out of range .X QUE_IDXOOR .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_BUFTOOSMALL - User buffer is too small for message .X QUE_BUFTOOSMALL .LE;QUE_RNAMESS - There is an outstanding read-not-acknowleged mesage .X QUE_RNAMESS .LE;QUE_MIDNOTATT - Message ID is not attached .X QUE_MIDNOTATT .LE;QUE_HEADNOTREM - Message header unable to be removed from Message ID list .X QUE_HEADNOTREM .ELS .fill .PAGE .c ;MODULE .c ;^&RTR_WRITE_Q\& .HL 2RTR_WRITE_Q .nf .x RTR_WRITE_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 30-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID MESSAGE_BUF CHARACTER*(x) BUFFER CONTAINING TEXT OF MESSAGE TO ADD TO QUEUE. MESSAGE_LENGTH INTEGER*2 LENGTH OF MESSAGE. MESAGE_TYPE INTEGER*2 TYPE OF MESSAGE MIDX INTEGER*2 (OPTIONAL) INDEX OF MESSAGE ID. USED FOR FASTER ACCESS TO THE MESSAGE ID HEADER. IF NOT SPECIFIED, THE MESSAGE ID NAME IS USED. IF SPECIFIED, THE NAME CALCULATED FROM THE INDEX IS COMPARED WITH THE PASSED NAME, AND IF NOT THE SAME, THE PASSED NAME IS USED. Returns: RTR_WRITE_Q INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine adds a message to the specified Message ID. The only difference between this routine and WRITE_Q is that the header does not get added to the front of the text in this routine. The MAQ router uses this routine to bypass adding the header since it already precedes the data. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 30 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 STATUS ! System service return status INTEGER*4 Q_BLOCK(2) ! from ATTACH_Q CHARACTER MESSAGE_ID*16 ! Id we will be writing CHARACTER MESSAGE*512 ! message buffer (passed by descp.) INTEGER*2 LENGTH ! size of messasge (note: word) INTEGER*2 MTYPE ! type: deletable or not (note: word) INTEGER*2 MIDX ! Index of Message ID MESSAGE_ID = 'STEEL_AVAILABLTY' MESSAGE = 'BOF OXYGEN ON, HEAT=60010, TIME=30-JUL-1986 10:44:55.37' LENGTH = 55 MTYPE = 0 ... STATUS = RTR_WRITE_Q (Q_BLOCK, MESSAGE_ID, MESSAGE, LENGTH, MTYPE) or STATUS = RTR_WRITE_Q (Q_BLOCK, MESSAGE_ID, MESSAGE, LENGTH, MTYPE, MIDX) IF (STATUS .NE. %LOC(QUE_SUCCESS))THEN ... ERROR ... ENDIF POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INVIDX - MID index is not consistant with MID name .X QUE_INVIDX .LE;QUE_IDXOOR - MID index is out of range .X QUE_IDXOOR .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_INSFREE - Insufficient number of free blocks .X QUE_INSFREE .LE;QUE_MIDMAX - Message ID is at maximum allowed messages .X QUE_MIDMAX .LE;QUE_NOCHK - Checkpoint process is not available .X QUE_NOCHK .ELS .fill .PAGE .c ;MODULE .c ;^&WRITE_Q\& .HL 2WRITE_Q .nf .x WRITE_Q>Defined Source:[MA_Q.SYSSERV]SSDISP.MAR Designer :PAUL VESTUTO, EARL LAKIA Author :PAUL VESTUTO Copy Right: Inland Steel Process Automation Department 3210 Watling St. MS 2-465 East Chicago, IN 46312 Date of last update: 30-JUL-1986 12:00:00.00 Revision level :1.0 .C ;Formal Parameter List Q_BLOCK INTEGER*4(2) Q BLOCK DESCRIPTOR ADDRESS, WILL CONTAIN THE START ADDRESS FOR P0 (Q_BLOCK(1)) AND THE END ADDRESS FOR P0 (Q_BLOCK(2)). MESSAGE_ID CHARACTER*16 MESSAGE ID MESSAGE_BUF CHARACTER*(x) BUFFER CONTAINING TEXT OF MESSAGE TO ADD TO QUEUE. MESSAGE_LENGTH INTEGER*2 LENGTH OF MESSAGE. MESAGE_TYPE INTEGER*2 TYPE OF MESSAGE MIDX INTEGER*2 (OPTIONAL) INDEX OF MESSAGE ID. USED FOR FASTER ACCESS TO THE MESSAGE ID HEADER. IF NOT SPECIFIED, THE MESSAGE ID NAME IS USED. IF SPECIFIED, THE NAME CALCULATED FROM THE INDEX IS COMPARED WITH THE PASSED NAME, AND IF NOT THE SAME, THE PASSED NAME IS USED. Returns: WRITE_Q INTEGER*4 THIS IS THE RETURN CODE AS DESCRIBED BY THE VMS STANDARDS AND THE QUESRV STANDARDS. Accesses common(s): Accesses file(s): Other modules referenced: .SK .fill .SK Description: .sk This routine adds a message to the specified Message ID. This routines expects the parameters to be valid, if not an appropriate return code is returned to the caller. .tp 35 .nofill .SKIP INCLUDE 'MA_Q$DEF:QUEUE.TLB(QUECONST)' INTEGER*4 STATUS ! System service return status INTEGER*4 Q_BLOCK(2) ! from ATTACH_Q CHARACTER MESSAGE_ID*16 ! Id we will be writing CHARACTER MESSAGE*512 ! message buffer (passed by descp.) INTEGER*2 LENGTH ! size of messasge (note: word) INTEGER*2 MTYPE ! type: deletable or not (note: word) INTEGER*2 MIDX ! Index of Message ID MESSAGE_ID = 'STEEL_AVAILABLTY' MESSAGE = 'BOF OXYGEN ON, HEAT=60010, TIME=30-JUL-1986 10:44:55.37' LENGTH = 55 MTYPE = 0 ... STATUS = WRITE_Q (Q_BLOCK, MESSAGE_ID, MESSAGE, LENGTH, MTYPE) or STATUS = WRITE_Q (Q_BLOCK, MESSAGE_ID, MESSAGE, LENGTH, MTYPE, MIDX) IF (STATUS .NE. %LOC(QUE_SUCCESS))THEN ... ERROR ... ENDIF POSSIBLE ERRORS: .SK .list 1,' ' .LE;QUE_INVIDX - MID index is not consistant with MID name .X QUE_INVIDX .LE;QUE_IDXOOR - MID index is out of range .X QUE_IDXOOR .LE;QUE_MIDNOTFOUND - Message ID not found in list .X QUE_MIDNOTFOUND .LE;QUE_INSFARG - Insufficient arguments .X QUE_INSFARG .LE;QUE_INVARG - Invalid arguments .X QUE_INVARG .LE;QUE_NOTINITIALIZED - Queueing functions have not been initialized .X QUE_NOTINITIALIZED .LE;QUE_MIDATTACHED - Message ID is already attached .X QUE_MIDATTACHED .LE;QUE_INSFREE - Insufficient number of free blocks .X QUE_INSFREE .LE;QUE_MIDMAX - Message ID is at maximum allowed messages .X QUE_MIDMAX .LE;QUE_NOCHK - Checkpoint process is not available .X QUE_NOCHK .ELS .fill .PAGE