;ENTER ; R4 CONTAINS THE NUMBER OF OPTIONAL PARAMETERS REMAINING ; IN THE ARGUMENT LIST. ; R5 IS POINTING TO THE ADDRESS OF THE FIRST OF TWO POSSIBLE ; OPTIONAL PARAMETERS. ; ;EXIT ; THE WAIT$ MACRO IS CALLED TO WAIT UNTIL THE EXECUTIVE ; ACKNOWLEDGES THE COMPLETION OF THE I/O OPERATION. ; ; IF PRESENT THE TWO OPTIONAL PARAMETERS /NBT/ AND /IER/ ; ARE RETURNED TO THE FORTRAN CALLING PROGRAM. ; THE NUMBER OF BYTES TRANSFERRED (NBT) IS TAKEN FROM THE ; SECOND WORD OF THE I/O STATUS BLOCK. ; THUS THIS ROUTINE SHOULD ONLY BE CALLED BY MODULES WHICH ; ARE PERFORMING DIRECT I/O ON VIRTUAL BLOCKS (READ$,WRITE$, ; AND SOME QIO$ FUNCTION CODES). ; R4 IS DECREASED BY 2. .TITLE BIOCMP - WAIT ON I/O COMPLETE,UPDATE /NBT/,/IER/ .IDENT /V01/ .PSECT .GLOBL BIOCMP .GLOBL IOFERR .MCALL WAIT$ BIOCMP: TSTB F.ERR(R0) ;DID THE PREVIOUS OPERATION GENERATE ;AN ERROR ? BMI 1$ ;YES - THEN DO NOT ISSUE A WAIT$ BECAUSE ;AN EVENT FLAG MAY NOT BE SET. WAIT$ R0 ;WAIT ON I/O OPERATION TO COMPLETE 1$: JSR PC,NBTBIO ;TRY TO UPDATE THE NBR OF BYTES ;TRANSFERRED FROM THE 2ND WORD ;OF THE I/O STATUS BLOCK. JSR PC,IOFERR ;TEST THE F.ERR OFFSET IN ;THE FDB AND RETURN THE STATUS TO ;THE CALLING FORTRAN PROGRAM. RTS PC .PAGE .SBTTL NBTBIO - UPDATE NBT ON BLOCK I/O ;ENTER ; R5 IS POINTING TO THE ADDRESS OF THE VARIABLE (NBT) THAT ; IS TO RECEIVE THE NUMBER OF BYTES TRANSFERRED AS A RESULT ; OF THE PREVIOUS I/O OPERATION ; THE "F.BKST" OFFSET IN THE FDB CONTAINS THE ADDRESS OF A ; TWO WORD I/O STATUS BLOCK. THE SECOND WORD OF THIS STATUS ; BLOCK CONTAINS THE NUMBER OF BYTES TRANSFERRED. ; R4 CONTAINS THE NUMBER OF OPTIONAL PARAMETERS REMAINING ; IN THE ARGUMENT LIST ;EXIT ; R5 IS INCREMENTED BY 2. ; THE VARIABLE (NBT) IN THE FORTRAN PROGRAM CONTAINS THE ; NUMBER OF BYTES TRANSFERRED. ; R4 IS DECREMENTED ; ; IF THE ADDRESS POINTED TO BY R5 IS EQUAL TO -1, NO STORAGE ; TAKES PLACE. ; IN EITHER CASE R5 IS INCREMENTED BY 2. ; NBTBIO: DEC R4 ;DECREMENT THE NUMBER OF PARAMETERS ;ARE THERE ANY PARAMETERS LEFT ? BLT 1$ ;YES-THEN EXIT CMP (R5),#-1 ;IS THE ADDRESS SPECIFIED EQUAL TO -1 ? BEQ 1$ ;YES-THEN EXIT MOV F.BKST(R0),R1 ;NO-LOAD ADDRESS OF THE I/O STATUS ;BLOCK MOV 2(R1),@(R5) ;THE SECOND WORD OF THE I/O STATUS ;BLOCK CONTAINS THE NUMBER OF ;BYTES TRANSFERRED. ; 1$: TST (R5)+ ;ADVANCE R5 TO THE NEXT PARAMETER RTS PC .END