.TITLE READ_QREC .IDENT /1.0/ ; ;.begin.doc ************************** begin.doc ; ; .c ;MODULE ; .c ;^&READ_QREC\& ; .nf ; .x READ_QREC>Defined ; Source:READ_QREC.MOD ; TO BECOME PART OF LIBRARY:QUEUE ; Designer :EARL LAKIA ; Author : ; 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 ; end.doc ****************************** end.doc .PSECT RQLOCAL,PIC,CON,REL,LCL,NOSHR,NOEXE,RD,WRT,LONG DESCP: .LONG 0,0 ; DESCRIPTOR .PAGE .PSECT RQCODE,CON,REL,LCL,SHR,EXE,RD,NOWRT,LONG .ENTRY READ_QREC,^M<> ; ; 00(AP)= NUMBER OF ARGUMENTS (5 OR 6) ; 04(AP)= Q_BLOCK ADDRESS ; 08(AP)= MESSAGE_ID DESCRIPTOR ; 12(AP)= RECORD ADDRESS ; 16(AP)= RECORD LENGTH ; 20(AP)= ADDRESS OF RNA ; 24(AP)= OPTIONAL PLACE HOLDER OR ADDRESS OF INDEX ; CMPL #5,(AP) ; WAS THE INDEX SPECIFIED? BEQL 10$ ; NO. CMPL #6,(AP) ; CORRECT NUMBER ARGUMENTS BNEQ 30$ ; INVALID NUMBER OF ARGUMENTS PUSHL 24(AP) ; PUSH THE ADDRESS OF INDEX 10$: PUSHL 20(AP) ; PUSH ADDRESS OF RNA MOVZWL @16(AP),DESCP ; LENGTH OF RECORD MOVL 12(AP),DESCP+4 ; ADDRESS OF RECORD PUSHAL DESCP ; DESCRIPTOR ADDRESS PUSHL 8(AP) ; ADDRESS OF MESSAGE ID DESCRIPTOR PUSHL 4(AP) ; ADDRESS OF Q_BLOCK MOVL (AP),R1 ; GET NUMBER THAT USER CALLED DECL R1 ; ACTUAL READ_Q IS ONE LESS PARAMETERS CALLS R1,G^READ_Q ; DO ACTUAL READ RET 30$: MOVL #QUE_INSFARG,R0 ; INSUFFICIENT NUMBER OF ARGUMENTS RET .END