SUBROUTINE MAIL(IOP,LUN,IEF,NWORD,IDATA,IRTASK,ITI,IREJ, 00087 1 IWAIT,NXFER,IERR) 00088 INTEGER*2 IOP,LUN,IEF,NWORD,IDATA(1),IRTASK(2),ITI,IREJ,IWAIT 00092 INTEGER*2 NXFER,IERR 00093 INTEGER*2 IPARM(6),ISTAT(2),IORVB,IOWVB,IOKIL 00094 BYTE PRM(2),STATUS(4) 00095 EQUIVALENCE (PRM(1),IPARM(5)),(ISTAT(1),STATUS(1)) 00096 DATA IORVB/"10400/,IOWVB/"11000/,IOKIL/"12/ 00097 CALL GETADR(IPARM,IDATA) !ADDR OF DATA BUFFER 00103 IPARM(2)=2*NWORD !# OF BYTES TO TRANSFER 00104 IPARM(3)=IRTASK(1) !TARGET TASK NAME, 1ST HALF 00105 IPARM(4)=IRTASK(2) ! 2ND HALF 00106 IF(.NOT.(ITI.LT.0)) GO TO 32757 00107 PRM(1)=0 !TT# OF TARGET TASK 00107 GO TO 32758 00107 32757 PRM(1)=ITI+1 00108 32758 PRM(2)=0 !SET FLAGS BYTE 00110 IF(IREJ.NE.0)PRM(2)=1 !1-->MB REJECT IF TARGET TASK NOT INS 00111 IF(IWAIT.EQ.0)PRM(2)=PRM(2)+2 !2-->MB NO WAIT FOR MATCH 00112 IF(.NOT.(IOP.EQ.0)) GO TO 32755 00114 JOP=IORVB !READ VIRTUAL BLOCK 00114 GO TO 32756 00114 32755 JOP=IOWVB !WRITE VIRTUAL BLOCK 00115 32756 CALL ASNLUN(LUN,'MB',0,IDS) 00119 IF(.NOT.(IDS.NE.1)) GO TO 32753 00120 IERR=14 00120 GO TO 32754 00120 32753 CALL QIO(JOP,LUN,IEF,,ISTAT,IPARM,IDS) 00122 IF((1).NE.(IDS)) GO TO 32751 00124 IF(.NOT.(IWAIT.GT.0)) GO TO 32749 00128 ASSIGN 32747 TO I32748 00128 GO TO 32748 00128 32747 GO TO 32750 00128 32749 ASSIGN 32745 TO I32746 00129 GO TO 32746 00129 32745 CONTINUE 00129 32750 GO TO 32752 00131 32751 IF((-6).NE.(IDS)) GO TO 32744 00131 IERR=10 00131 GO TO 32752 00132 32744 IF((-96).NE.(IDS)) GO TO 32743 00132 IERR=11 00132 GO TO 32752 00133 32743 IF((-97).NE.(IDS)) GO TO 32742 00133 IERR=12 00133 GO TO 32752 00134 32742 IERR=13 00134 32752 CONTINUE 00136 32754 RETURN 00137 32741 CONTINUE 00138 IF(.NOT.(STATUS(1).GT.0)) GO TO 32739 00142 IERR=0 00142 GO TO 32740 00142 32739 IERR=STATUS(1) 00143 32740 IF(.NOT.(IERR.EQ.0)) GO TO 32737 00144 NXFER=ISTAT(2)/2 00144 GO TO 32738 00144 32737 NXFER=0 00145 32738 GO TO I32741 00146 32748 CONTINUE 00147 JEF=IEF+1 00151 CALL MARK(JEF,IWAIT,2,IDS) !SET UP WAIT PERIOD 00152 CALL WFLOR(IEF,JEF) !WAIT FOR FLAG IEF OR JEF 00153 CALL READEF(IEF,IDS) !WHICH ONE HAPPENED? 00154 IF(.NOT.(IDS.EQ.2)) GO TO 32735 00155 ASSIGN 32734 TO I32741 00155 GO TO 32741 00155 32734 GO TO 32736 00155 32735 IERR=15 00160 CALL WTQIO(IOKIL,LUN,IEF,,ISTAT,IPARM,IDS) 00161 IF(.NOT.(IDS.NE.1)) GO TO 32732 00162 IERR=16 00162 GO TO 32733 00162 32732 IF(STATUS(1).LT.0)IERR=17 00164 32733 CONTINUE 00166 32736 GO TO I32748 00167 32746 CONTINUE 00168 CALL WAITFR(IEF,IDS) 00172 ASSIGN 32731 TO I32741 00173 GO TO 32741 00173 32731 GO TO I32746 00174 END 00175