*DECK NP$PIOE USETEXT AIPDEF USETEXT NP$DB USETEXT NP$ZHDR PROC NP$PIOE(FET); # PROCESS I/O ERROR AFTER WRITE FUNCTION # *IF,DEF,IMS # *1DC NP$PIOE * * 1. SUBROUTINE AUTHOR DATE * NP$PIOE E. GEE 86/01/28 * * 2. FUNCTIONAL DESCRIPTION. * PROCESS I/O ERROR AFTER WRITE OPERATION ON AIP FILE. * * 3. METHOD USED. * CALL NP$MSG TO ISSUE INFORMATIVE DAYFILE MESSAGE. * CALL NP$RETN TO RETURN FILE. * REINITIALIZE FET. * IF FILE IS AIP DEBUG LOG FILE, * IF JOB RECORD FILE EXISTS, * IF JOB RECORD FILE NEEDS TO BE REWOUND, * CALL NP$RWD TO REWIND JOB RECORD FILE. * ELSE (JOB RECORD FILE SHOULD NOT BE REWOUND), * CALL NP$BKSP TO BACKSPACE TO PREVIOUS RECORD ON FILE. * IF NO I/O ERROR ON JOB RECORD FILE, * CALL NP$READ TO READ UP JOB RECORD. * IF I/O ERROR ON JOB RECORD FILE, * CALL NP$MSG TO ISSUE INFORMATIVE DAYFILE MESSAGE. * ELSE (NO I/O ERROR ON JOB RECORD FILE), * CALL NP$WRTR TO WRITE JOB RECORD + EOR TO TRACE FILE. * CALL NP$RTIM TO GET SYSTEM RTIME. * CALL NP$CLK TO GET CURRENT CLOCK TIME. * CALL NP$DATE TO GET TODAY'S DATE. * CREATE HEADER ENTRY. * CALL NP$WRTW TO WRITE OUT HEADER ENTRY TO CIO BUFFER. * CALL NP$WRTR TO WRITE END OF RECORD TO FILE. * CALL NP$WRTO TO WRITE CLOCK TIME TO CIO BUFFER. * * 4. ENTRY PARAMETERS. * DB$JR TRUE IF JOB RECORD FILE EXISTS * DB$LFN LFN OF JOB RECORD FILE IF ONE EXISTS * DB$RWD TRUE IF JOB RECORD FILE NEEDS TO BE REWOUND * FET FET OF FILE WHICH GOT I/O ERROR * * 5. EXIT PARAMETERS. * NONE. * * 6. COMMON DECKS CALLED AND SYMPL TEXT USED. * AIPDEF AIP CONSTANT DEFINITIONS * NP$DB DEBUG LOG FILE BUFFER * NP$CRT CONTROL DATA COPYRIGHT * NP$ZHDR AIP DEBUG LOG FILE HEADER ENTRY * * 7. SUBROUTINES AND MACROS CALLED. * NP$BKSP BACKSPACE FILE ONE LOGICAL RECORD * NP$CLK GET CURRENT CLOCK TIME * NP$DATE GET TODAY'S DATE * NP$MSG ISSUE DAYFILE MESSAGE * NP$READ READ DATA FROM FILE * NP$RETN RETURN FILE TO SYSTEM * NP$RWD REWIND FILE * NP$RTIM GET SYSTEM RTIME * NP$WRTO WRITE SINGLE WORD FROM WSA TO CIO BUFFER * NP$WRTR WRITE END OF RECORD TO FILE * NP$WRTW WRITE DATA FROM WSA TO CIO BUFFER * * 8. DAYFILE MESSAGES. * " BKSP ERROR ON FILE XXXXXXX - AT=YYB." * " READ ERROR ON FILE XXXXXXX - AT=YYB." * " REWIND ERROR ON FILE XXXXXXX - AT=YYB." * " WRITE ERROR ON FILE ZZZZZDN - AT=YYB." * # *ENDIF BEGIN # INPUT PARAMETERS # ARRAY FET S(8); BEGIN ITEM FETLFN C(0,00,07); # LOCAL FILE NAME # ITEM FETLN U(0,42,04); # LEVEL NUMBER # ITEM FETAT U(0,46,05); # ABNORMAL TERMINATION CODE # ITEM FETCODE U(0,51,08); # REQUEST/RETURN CODE # ITEM FETUP B(1,14,01); # USER PROCESSING FLAG # ITEM FETEP B(1,15,01); # ERROR PROCESSING FLAG # ITEM FETFB B(1,23,01); # FLUSH BIT # ITEM FETLEN U(1,36,06); # NO OF ADDITIONA WORDS IN FET # ITEM FETFIRST U(1,42,18); # FWA OF CIO BUFFER # ITEM FETWD1 U(1,00,60); ITEM FETIN U(2,42,18); # IN PTR FOR CIO BUFFER # ITEM FETOUT U(3,42,18); # OUT PTR FOR CIO BUFFER # ITEM FETLIMIT U(4,42,18); # LWA+1 OF CIO BUFFER # END # EXTERNAL ROUTINES CALLED # XREF BEGIN PROC NP$BKSP; # BACKSPACE FILE 1 LOGICAL REC # PROC NP$CLK; # GET CURRENT CLOCK TIME # PROC NP$DATE; # GET CURRENT DATE # PROC NP$MSG; # ISSUE DAYFILE MESSAGE # PROC NP$READ; # READ DATA FROM FILE # PROC NP$RETN; # RETURN FILE TO SYSTEM # PROC NP$RTIM; # GET SYSTEM RTIME # PROC NP$RWD; # REWIND FILE # PROC NP$WRTO; # WRITE 1 WD FROM WSA TO CIO BUF# PROC NP$WRTR; # WRITE END OF REC TO FILE # PROC NP$WRTW; # WRITE DATA FROM WSA TO CIO BUF# END *IF DEF,DEBUG # LOCAL VARIABLES # ARRAY ERRMSG S(5); # ERROR MESSAGE IF ROUTE FAILS # BEGIN ITEM ERRMSGT C(0,0,07); # TYPE OF FUNCTION PERFORMED ON FILE # ITEM ERRMSG1 C(0,42,3) = [" ER"]; ITEM ERRMSG2 C(1,0,10) = ["ROR ON FIL"]; ITEM ERRMSG3 C(2,0,02) = ["E "]; ITEM ERRMSGF C(2,12,7); # NAME OF FILE WITH ERROR # ITEM ERRMSG4 C(2,54,6) = [" "]; ITEM ERRMSG5 C(3,0,05) = ["- AT="]; ITEM ERRMSGAT U(3,30,12); # ERROR CODE FROM CIO # ITEM ERRMSG6 C(3,42,3) = ["B. "]; ITEM ERRMSGE U(4,0,60) = [0]; END ITEM AT; # ABNORMAL TERM CODE FROM CIO # ITEM TIMEWD; # WORD TO CONTAIN CURRENT RTIME # ITEM CHARWD C(10); # WORD TO CONTAIN CLOCK/DATE # #**********************************************************************# # EXECUTABLE CODE BEGINS HERE # # ISSUE INFORMATIVE DAYFILE MESSAGE # ERRMSGT[0] = " WRITE "; # TYPE OF FUNCTION PERFORMED # ERRMSGF[0] = FETLFN[0]; # STORE LOCAL FILE NAME IN MSG # ERRMSGAT[0] = ((FETAT[0]/8)+27)*64 + FETAT[0] - (FETAT[0]/8)*8+27; NP$MSG(ERRMSG,3); # ISSUE DAYFILE MESSAGE # # RETURN FILE WITH I/O ERROR # FETCODE[0] = 0; # CLEAR FET REQUEST/RETURN CODE # FETAT[0] = 0; # CLEAR ABNORMAL TERM CODE FIELD# NP$RETN(FET); # RETURN FILE TO SYSTEM # # REINITIALIZE FET # FETLN[0] = 0; # INITIALIZE LEVEL NUMBER FIELD # FETAT[0] = 0; # INITIALIZE ABNORMAL TERM FIELD# FETCODE[0] = 0; # INITIALIZE REQUEST/RETURN CODE# FETIN[0] = FETFIRST[0]; # INITIALIZE FET IN POINTER # FETOUT[0] = FETFIRST[0]; # INITIALIZE FET OUT POINTER # # , CHECK IF FILE IS AIP DEBUG LOG FILE # IF FETLFN[0] EQ "ZZZZZDN" THEN # AIP DEBUG LOG FILE HAD I/O ERR# BEGIN IF DB$JR THEN # NEED TO TRY TO COPY JOB RECORD# BEGIN FETLFN[0] = DB$LFN; # LFN OF JOB RECORD FILE # IF DB$RWD THEN # NEED TO REWIND JOB RECORD FILE# BEGIN NP$RWD(FET); # REWIND FILE TO BOI # ERRMSGT[0] = " REWIND"; # TYPE OF FUNCTION PERFORMED # END ELSE # NEED TO BACKSPACE JOB REC FILE# BEGIN NP$BKSP(FET); # BACKSPACE FILE ONE LOGICAL REC# ERRMSGT[0] = " BKSP "; # TYPE OF FUNCTION PERFORMED # END AT = FETAT[0]; # CIO ABNORMAL TERMINATION CODE # IF AT EQ 0 THEN # NO I/O ERROR ON JOB REC FILE # BEGIN NP$READ(FET,1); # READ LOGICAL RECORD OF LFN # IF (FETAT[0] NQ 0) AND # NO ABNORMAL TERMINATION CODE # (FETAT[0] NQ 1) # EOI NOT ENCOUNTERED # THEN # NO ERROR OCCURRED ON READ # BEGIN ERRMSGT[0] = " READ "; # TYPE OF FUNCTION PERFORMED # AT = FETAT[0]; # ABNORMAL TERMINATION CODE # END END FETLFN = "ZZZZZDN"; # RESET FILE NAME IN FET # FETAT[0] = 0; FETLN[0] = 0; # INITIALIZE LEVEL NUMBER FIELD # IF AT NQ 0 THEN # ISSUE DAYFILE MSG FOR I/O ERR # BEGIN ERRMSGF[0] = DB$LFN; # FILE NAME # ERRMSGAT[0] = ((AT/8)+27)*64 + AT - (AT/8)*8 + 27; NP$MSG(ERRMSG,3); # ISSUE DAYFILE MESSAGE # END ELSE # JOB RECORD WAS NOT READ # BEGIN NP$WRTR(FET,1); # WRITE EOR TO FILE ZZZZZDN # END END NP$RTIM(TIMEWD); # GET SYSTEM RTIME # ZH$TIM[0] = TIMEWD; # STORE IN LOG FILE HEADER ENTRY# NP$CLK(CHARWD); # GET CURRENT CLOCK TIME # ZH$CLK[0] = CHARWD; # STORE CLOCK TIME IN HDR ENTRY # NP$DATE(CHARWD); # GET CURRENT DATE # ZH$DATE[0] = CHARWD; # STORE DATE IN HEADER ENTRY # NP$WRTW(FET,ZHDR,4); # WRITE HDR ENTRY TO CIO BUFFER # NP$WRTR(FET,1); # WRITE END OF RECORD TO FILE # NP$CLK(CHARWD); # GET CURRENT CLOCK TIME # NP$WRTO(FET,CHARWD); # WRITE CLOCK TIME IN CIO BUFFER# END *ENDIF END TERM