.TITLE SENTS ; ; FORTRAN CALLABLE SUBROUTINE TO SEND A MESSAGE TO A TIME-SHARED TASK ; ; CALL SENTS(BUFF, IDEST [,ISTAT]) ; ; BUFF - BUFFER CONTAINING MESSAGE. BUFFER MUST START ON ; A WORD BOUNDARY AND THE FIRST WORD MUST BE THE LENGTH OF ; THE BUFFER IN BYTES. ; ; IDEST - WORD CONTAINING DESTINATION: ; = -1 DESTINATION IS OWNER TASK ; = 0 DESTINATION IS CHAIN TASK ; = OTHER: ORDINAL SUBTASK NUMBER (NTDB) ; ; ISTAT - OPTIONAL 2-WORD ARRAY TO RECEIVE STATUS INFORMATION ; ; NOTE: SENTS USES ITS OWN SDB WHEN IDEST.LE.0; COMMON SDB'S ; WHEN IDEST.GT.0 ; .PSECT SUBDAT,RW,D,GBL,REL,CON SDBS: SDBDF$ ,,,ESBS ESBS: ESBDF$ .EVEN ; .PSECT SUBTAS,RO,I,LCL,REL,CON SENTS:: MOVB (R5)+,R2 ;NO. OF ARGS BLE 100$ INC R5 MOV (R5)+,R3 ;BUFFER ADDRESS BLE 100$ CMP #2,R2 BGT 100$ ;MUST HAVE AT LEAST 2 ARGS MOV (R5)+,R1 ;A(IDEST) MOV (R1),R1 ;IDEST BGT 50$ MOV #SDBS,R0 MOV R1,T.SNDT(R0) ;DEST ADDR BR 51$ 50$: CMP #MAXTD,R1 ;IDEST IN RANGE? BLT 20$ SUB #1,R1 ASL R1 BR 21$ 20$: CLR R1 ;2-15-80 THE ORDER OF THE FOLLOWING 2 ; STATEMENTS SWITCHED. 21$: MOV SDB(R1),R0 MOV TDB(R1),T.SNDT(R0) 51$: MOV R3,T.SNDA(R0) ;BUFFER ADDRESS ;2-15-80 ESBS CHANGED TO #ESBS SEND$T R0,,,#ESBS BCS 98$ 101$: MOV #1,R0 ;SUCCESS INDICATOR RETURN 98$: ;IF AN ERROR OCCURS MOV #SDBS+T.SESB-T.TESB,R0 ;FAKE TDB FOR ESB JSR PC,ERRTS ;ERROR CODE IN R0 TST R1 BGT 102$ ;IDEST>0--IGNORE ERROR MOV (R5)+,R1 ;A(ISTAT) TST R1 ;VALID? BLE 102$ MOV ESBS+T.ERR,(R1)+ ;RETURN ERROR CODE MOV ESBS+T.ERR+2,(R1) ;AND SUBCODE 102$: RETURN 100$: MOV #-1,R0 ;INVALID ARGUMENT LIST RETURN .END