; ******************************************************* ; * * ; * THIS SOFTWARE WAS DEVELOPED WITH SUPPORT * ; * FROM THE NATIONAL INSTITUTES OF HEALTH: * ; * NIH CA06927 * ; * NIH CA22780 * ; * * ; * DIRECT INQUIRIES TO: * ; * COMPUTER CENTER * ; * THE INSTITUTE FOR CANCER RESEARCH * ; * 7701 BURHOLME AVENUE * ; * PHILADELPHIA, PENNSYLVANIA 19111 * ; * * ; * NO WARRANTY OR REPRESENTATION, EXPRESS OR * ; * IMPLIED, IS MADE WITH RESPECT TO THE * ; * CORRECTNESS, COMPLETENESS, OR USEFULNESS * ; * OF THIS SOFTWARE, NOR THAT USE OF THIS * ; * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * ; * OWNED RIGHTS. * ; * * ; * NO LIABILITY IS ASSUMED WITH RESPECT TO * ; * THE USE OF, OR FOR DAMAGES RESULTING FROM * ; * THE USE OF THIS SOFTWARE * ; * * ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DESIGNED FOR USE ON A * ; * PDP-11/70 OPERATING UNDER IAS V3.0 USING * ; * THE IAS PDP-11 MACRO ASSEMBLER. * ; * * ; ******************************************************* .TITLE WFM -- WAIT FOR MESSAGE .IDENT /ICR001/ .MCALL DIR$,SRDA$,STSE$,ASTX$,CLEF$,SETF$,VRCD$ ; ; THIS SUBROUTINE ALLOWS A PROGRAM TO RECEIVE A MESSAGE WITHOUT ; SUSPENDING OR STOPPING (A PROBLEM IN TIMESHARING). ; ; CALL WFM(TASK,BUFR,LEN,TISEND,PRV,IDS) ; TASK -- NAME OF SENDING TASK (I*4 6 RAD50 CHARS) 0 FOR ANY SENDER ; BUFR -- BUFFER TO RECEIVE DATA (MUST BE TWO WORDS LARGER THAN LEN -- ; THE FIRST TWO WORDS WILL BE THE SENDERS TASK NAME) ; LEN -- MAXIMUM LENGTH OF RECEIVED MESSAGE ; TISEND -- TI INDICATOR OF SENDER ; PRV -- PRIVILEGE INDICATOR (-1 IF SENDER IS EXEC PRIVILEGED) ; IDS -- DIRECTIVE STATUS WORD ; ; NOTE: WFMD AND WFMC ARE PURE AND MAY BE READONLY ; .PSECT WFMD RW,D,LCL,CON SRDA: SRDA$ ASTEN CLEF: CLEF$ 1 STSE: STSE$ 1 ASTX: ASTX$ OFAST: SRDA$ SETF: SETF$ 1 ; .PSECT WFMB RW,D,LCL,CON VRCD: VRCD$ ,OFAST,1,OFAST ;RECEIVE DATA BLOCK ; .PSECT WFMC RW,I,LCL,CON WFM:: DIR$ #SRDA ;DECLARE RECEIVE AST MOV 2(R5),R0 ;SET UP RECEIVE DIRECTIVE MOV (R0)+,VRCD+R.VDTN MOV (R0),VRCD+R.VDTN+2 MOV 4(R5),VRCD+R.VDBA MOV @6(R5),VRCD+R.VDBL MOV 10(R5),VRCD+R.VDTI 10$: CLR @12(R5) ;CLEAR PRIVILEGE FLAG DIR$ #CLEF ;CLEAR EVENT FLAG DIR$ #VRCD ;TRY TO RECEIVE MOV @#$DSW,@14(R5) ;SAVE DSW BCC 20$ ;GO FINISH UP IF SUCCESSFUL CMP @#$DSW,#IE.ITS ;WAS NO DATA QUEUED? BNE 30$ ;NO, SO EXIT ON REAL ERROR DIR$ #STSE ;WAIT FOR EVENT BR 10$ ;GO RETRY RECEIVE 20$: BVC 30$ ;CHECK FOR PRIVILEGED TASK MOV #-1,@12(R5) 30$: DIR$ #OFAST ;TURN OFF AST RETURN ; ASTEN: DIR$ #SETF ;SET FLAG DIR$ #ASTX ;EXIT AST .END