.LIST TTM .TITLE RECV ; ; FORTRAN CALLABLE SUBROUTINE TO RECEIVE A MESSAGE FROM A TIME-SHARED TASK ; ; MARK F. LEWIS ; 17-OCT-77 ; ; FORTRAN CALLING SEQUENCE -- ; CALL RECV(BUFF ,LENGTH [,ISNDER] [,ISTAT]) ; BUFF - ADDRESS OF BUFFER TO RECEIVE MESSAGE. BUFFER MUST ; START ON A WORD BOUNDARY. ; LENGTH - LENGTH OF BUFFER IN BYTES ; ISNDER - OPTIONAL WORD TO RECEIVE SENDING TASK INDICATOR ; = -2 SENDER WAS A SUBTASK WHOSE TDB AS BEEN RELEASED ; OR REUSED. ; = -1 SENDER WAS OWNER. ; = 0 SENDER WAS THE PREDECESSOR. ; ISTAT - OPTIONAL 2-WORD ARRAY TO RECEIVE STATUS INFORMATION .MCALL TCSMC$, RETURN TCSMC$ SDB: SDBDF$ ,,,ESB ESB: ESBDF$ .EVEN RECV:: MOVB (R5)+,R2 ;NUMBER OF ARGUMENTS BLE EXIT ;INVALID ARGUMENT LIST INC R5 MOV #SDB,R4 MOV (R5)+,T.SNDA(R4) ;SET UP ADDRESS BLE EXIT ;INVALID ADDRESS CMP #2,R2 BGT EXIT ;MUST HAVE AT LEAST TWO ARGUMENTS MOVB (R5)+,R1 ;ADDRESS OF LENGTH MOVB R1,T.SNDL(R4) ;LENGTH OF BUFFER INC R5 MOV (R5)+,R3 ;ADDRESS OF ISNDER MOV (R5)+,R1 ;ADDRESS OF ISTAT RCV$T #SDB BCS ERR ; DO WE NEED SENDER STUFF? CMP #3,R2 ;THREE OR MORE ARGUMENTS? BGT EXIT ;NO TST R3 ;VALID ADDRESS? BLE EXIT ;NO MOV T.SNDT(R4),(R3) BR EXIT EXIT: RETURN ERR: ;IF AN ERROR OCCURS TST R1 ;VALID ADDRESS? BLE EXIT MOV ERR,(R1)+ ;RETURN ERROR CODE MOV ERR+2,(R1) ; AND SUBCODE BR EXIT .END