;ENTER ; R5 IS POINTING TO THE ADDRESS OF THE VARIABLE (IER) THAT IS ; TO RECEIVE THE STATUS CODE OF THE I/O OPERATION. ; THE BYTES "F.ERR" AND "F.ERR+1" IN THE FDB CONTAIN ERROR ; INFORMATION. ; IF THE BYTE "F.ERR" IS POSITIVE, THEN I/O OPERATION WAS ; SUCCESSFUL ; IF THE BYTE "F.ERR" IS NEGATIVE, THEN AN I/O ERROR OCCURRED. ; IF THE BYTE "F.ERR+1" IS NEGATIVE, THEN THE ERROR WAS A ; DIRECTIVE ERROR ( DRERR$). ; IF THE BYTE "F.ERR+1" IS POSITIVE, THEN THE ERROR COMES ; FROM THE DRIVER OR FCP ( IOERR$). ; R4 CONTAINS THE NUMBER OF OPTIONAL PARAMETERS REMAINING ; IN THE ARGUMENT LIST ;EXIT ; THE VARIABLE (IER) IN THE FORTRAN PROGRAM IS IN ONE OF THE ; THREE FOLLOWING STATES ; POSITIVE IMPLIES OPERATION SUCCESSFUL (NO ERROR) ; ZERO IMPLIES END OF FILE ENCOUNTERED ; NEGATIVE IMPLIES HARDWARE I/O ERROR (SEE "F.ERR" AND ; "F.ERR+1" TO DETERMINE THE EXACT TYPE OF ERROR). ; ; IF THE ADDRESS POINTED TO BY R5 IS EQUAL TO -1, NO STORAGE ; TAKES PLACE. ; IN EITHER CASE R5 IS INCREMENTED BY 2. ; R4 IS DECREMENTED ; .TITLE IOFERR - UPDATE THE OPTIONAL PARAMETER /IER/ .IDENT /V01/ .PSECT .GLOBL IOFERR IOFERR: DEC R4 ;DECREMENT THE NUMBER OF PARAMETERS ;ARE THERE ANY PARAMETERS LEFT ? BLT 2$ ;NO- THEN EXIT CMP (R5),#-1 ;IS THE ADDRESS SPECIFIED EQUAL TO -1 ? BEQ 2$ ;YES-THEN EXIT MOV #1,R1 ;NO-ASSUME OPERATION WAS SUCCESSFUL CMPB #IS.SUC,F.ERR(R0) ;IS OPERATION SUCCESSFUL BEQ 1$ ;YES MOV #-1,R1 ;ASSUME A HARDWARE ERROR OR DIRECTIVE ;ERROR TSTB F.ERR+1(R0) ;WAS IT A DIRECTIVE ERROR ? BMI 1$ ;YES CMPB #IE.EOF,F.ERR(R0) ;NO - DID OPERATION ENCOUNTER ;EOF ? BNE 1$ ;NO - THEN IT MUST HAVE BEEN A ;HARDWARE I/O ERROR INC R1 ;YES - SET ERROR CODE TO ZERO. 1$: MOV R1,@(R5) ;RETURN ERROR CODE TO CALLING ;PROGRAM 2$: TST (R5)+ ;ADVANCE R5 TO THE NEXT PARAMETER RTS PC .END