*DECK NETREL *IF,DEF,DEBUG USETEXT AIPDEF USETEXT NP$DB USETEXT NP$MODE USETEXT NP$NWL USETEXT NP$ZHDR *ENDIF PROC NETREL((LFN),(MSGLTH),(FRWD)); # INITIALIZE OR RELEASE ZZZZZDN # BEGIN *CALL NP$CRT *IF DEF,IMS # *1DC NETREL * * 1. PROC NAME AUTHOR DATE * NETREL E. GEE 86/01/20 * * 2. FUNCTIONAL DESCRIPTION * ROUTE DEBUG LOG FILE TO INPUT QUEUE AND/OR WRITE JOB RECORD * TO DEBUG LOG FILE AND/OR UPDATE THE MAXIMUM NUMBER OF WORDS * OF TEXT THAT IS TO BE WRITTEN TO THE DEBUG LOG FILE. * * 3. METHOD USED * IF LFN IS NONZERO, * IF ZZZZZDN FILE ALREADY EXISTS, * CALL NP$WRTR TO WRITE END OF RECORD TO ZZZZZDN FILE. * IF NO I/O ERROR ON ZZZZZDN FILE, * SET UP DSP PARAMETER BLOCK. * CALL NP$ROUT TO ROUTE FILE TO INPUT QUEUE. * IF DSP ERROR, * CALL NP$MSG TO ISSUE INFORMATIVE DAYFILE MESSAGE. * ELSE (I/O ERROR OCCURRED WHEN END OF RECORD WAS WRITTEN), * CALL NP$MSG TO ISSUE INFORMATIVE DAYFILE MESSAGE. * IF I/O OR DSP ERROR ON ZZZZZDN FILE, * CALL NP$RETN TO RETURN FILE. * INITIALIZE FET. * IF REWIND OF JOB RECORD FILE IS NEEDED, * CALL NP$RWD TO REWIND JOB RECORD FILE. * IF NO I/O ERROR ON JOB RECORD FILE, * CALL NP$READ TO READ LOGICAL RECORD FROM JOB RECORD FILE. * 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 REC PLUS EOR TO DEBUG LOG FILE. * IF APPLICATION HAS NETTED ON, * CALL NP$RTIM TO GET SYSTEM RTIME. * CALL NP$CLK TO GET CURRENT CLOCK TIME. * CALL NP$DATE TO GET CURRENT DATE. * CREATE HEADER ENTRY FOR DEBUG LOG FILE. * CALL NP$WRTW TO WRITE HEADER ENTRY TO CIO BUFFER. * CALL NP$WRTR TO WRITE END OF RECORD TO DEBUG LOG FILE. * CALL NP$CLK TO GET CURRENT CLOCK TIME. * CALL NP$WRTO TO WRITE CLOCK TIME TO CIO BUFFER. * IF I/O ERROR HAS OCCURRED ON ZZZZZDN FILE, * CALL NP$PIOE TO PROCESS I/O ERROR. * IF MSGLTH GREATER THAN ZERO, MODIFY TRUNC. 1@TRUNC@410 * * 4. ENTRY CONDITIONS * LFN - NAME OF A LOCAL FILE CONTAINING A JOB RECORD * MSGLTH - MAXIMUM NUMBER OF WORDS PER MESSAGE THAT CAN BE * WRITTEN TO ZZZZZDN FILE * FRWD - FLAG FOR REWINDING BEFORE READING * 0 FOR REWINDING FILE BEFORE READ * 1 FOR NO REWIND * * 5. EXIT CONDITIONS * DB$TRUNC - EQUAL TO MSGLTH IF MSGLTH IS GREATER THAN ZERO * ELSE 410 * DB$FET - INITIALIZED,PREVIOUS ZZZZZDN FILE ROUTED TO INPUT * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF NP$CRT NP$DB NP$MODE * NP$NWL NP$ZHDR * * 7. PROCEDURES/FUNCTIONS CALLED * NP$CLK CLOCK TIME IN DISPLAY CODE * NP$DATE DATE IN DISPLAY CODE * NP$MSG ISSUE DAYFILE MESSAGE * NP$PIOE PROCESS I/O ERROR ON DEBUG LOG FILE * NP$READ READS A LOGICAL RECORD * NP$RETN RETURN FILE * NP$ROUT ROUTES A FILE TO INPUT * NP$RTIM REAL TIME SINCE DEADSTART IN SECONDS AND * MILLISECONDS * NP$RWD REWIND FILE * NP$WRTR CLOSES FILE BY WRITING EOR * NP$WRTW WRITES WORDS TO CIRCULAR IO BUFFER. * * 8. DAYFILE/DIAGNOSTIC MESSAGES * " READ ERROR ON FILE XXXXXXX - AT=YYB." * " REWIND ERROR ON FILE XXXXXXX - AT=YYB." * " ROUTE ERROR ON FILE ZZZZZDN - EC=YYB." * " WRITE ERROR ON FILE ZZZZZDN - AT=YYB." * # *ENDIF # FORMAL PARAMETERS # ITEM LFN C(10); # NAME OF LOCAL JOB RECORD # ITEM MSGLTH I; # MAX NO OF WORDS PER MESSAGE # ITEM FRWD B; # REWIND/NO REWIND OF LFN # *IF,DEF,DEBUG # ROUTINES CALLED # XREF BEGIN PROC NP$CLK; # CLOCK TIME IN DISPLAY CODE # PROC NP$DATE; # DATE IN DISPLAY CODE # PROC NP$MSG; # ISSUE DAYFILE MESSAGE # PROC NP$PIOE; # PROCESS I/O ERROR ON DISK FILE # PROC NP$READ; # READS A LOGICAL RECORD # PROC NP$RETN; # RETURN FILES # PROC NP$ROUT; # ROUTES A FILE # PROC NP$RTIM; # REAL TIME SINCE DEADSTART # PROC NP$RWD; # REWIND FILE # PROC NP$WRTR; # WRITE END OF RECORD # PROC NP$WRTW; # WRITE WORDS TO CIO BUFFER # PROC NP$WRTO; # WRITE ONE WORD # END # DEF-S # DEF JOTWRD$ # O"66" #; # WORD POSITION OF JOB ORIGIN TYPE # DEF SYOT$ # 0 #; # ORIGIN TYPE FOR SYSTEM ORIGIN JOB # # LOCAL VARIABLES # ITEM AT; # ABNORMAL TERMINATION CODE FROM READ # ITEM CHARWD C(10); ITEM DSPEC; # ERROR CODE RETURNED FROM DSP # ITEM I; # INDUCTION VARIABLE # ITEM TIMEWD; 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,02) = ["- "]; ITEM ERRMSGC C(3,12,2); # NAME OF FIELD WITH ERROR CODE # ITEM ERRMSG6 C(3,24,1) = ["="]; ITEM ERRMSGRC U(3,30,12); # ERROR CODE FROM DSP/CIO # ITEM ERRMSG7 C(3,42,3) = ["B. "]; ITEM ERRMSGE U(4,0,60) = [0]; END ARRAY PARAM P(7); # PARAMETER BLOCK TO ROUTE LFN TO INPUT # BEGIN ITEM PAR$NAME C(0,0,7)=["ZZZZZDN"];# NAME OF FILE BEING ROUTD# ITEM PAR$EC U(0,42,6); # ERROR CODE RESPONSE # ITEM PAR$F B(00,48,01); # FORCED ORIGIN FLAG # ITEM PAR$OT U(00,53,06); # FORCED JOB ORIGIN TYPE # ITEM PAR$CB B(0,59,1)=[FALSE]; # COMPLETE BIT # ITEM PAR$DISP C(1,24,2); # DISPOSITION OF FILE # ITEM PAR$EP B(1,47,1); # ERROR PROCESSING FLAG # ITEM PAR$DCF B(1,55,1); # DISPOSITION CODE SET FLAG # ITEM PAR$ID B(1,58,1); # ROUTE TO CENTRAL SITE # ITEM PAR$WD1 I(1,0,WL)=[0]; ITEM PAR$WD2 I(2,0,WL)=[0]; END BASED ARRAY JOT [00:00] S(1); BEGIN # JOB ORIGIN TYPE FIELD # ITEM JOT$TYPE U(00,24,12); END BASED ARRAY LFNNAME; BEGIN ITEM LFNAME C(0,0,10); # NAME OF LOCAL FILE # ITEM LFILE I(0,0,60); # =0 IF NO LOCAL FILE # END *ENDIF #**********************************************************************# # NETREL EXECUTION STARTS HERE # ENTRY PROC QTREL((LFN),(MSGLTH),(FRWD)); # QTRM ENTRY POINT # *IF,DEF,DEBUG DSPEC = 0; # INIT TO NO ERROR IN ROUTE CALL# P = LOC(LFN); IF LFILE[0] NQ 0 THEN # THERE IS LOCAL FILE TO COPY # BEGIN DB$JR = TRUE; # SET JOB RECORD FILE EXIST FLAG# FOR I = 0 STEP 1 UNTIL 6 DO # CONVERT ZEROS INTO BLANKS # BEGIN IF BLFNAME[0] EQ 0 THEN # BIN ZERO TO CONVERT TO BLANK # BEGIN CDB$LFN = " "; # REPLACE WITH BLANK # END ELSE # LETTER IN NAME # BEGIN CDB$LFN = CLFNAME[0]; # COPY LETTER # END END DB$RWD = NOT FRWD; # SET REWIND JOB RECORD FILE FLG# IF FET$LFN[0] EQ "ZZZZZDN" # FILE ZZZZZDN ALREADY EXISTS # THEN # ROUTE ZZZZZDN FILE TO INPUT # BEGIN NP$WRTR(DB$FET,1); # WRITE EOR ON FILE ZZZZZDN # AT = FET$AT[0]; # ABNORMAL TERMINATION CODE # IF AT EQ 0 THEN # NO RMS I/O ERROR HAS OCCURRED # BEGIN P = JOTWRD$; # GET JOB ORIGIN TYPE # IF JOT$TYPE EQ SYOT$ THEN # IF THIS IS A SYSTEM ORIGIN JOB# BEGIN PAR$F[0] = TRUE; # SET ROUTE TO SYSTEM ORIGIN # PAR$OT[0] = SYOT$; END ELSE #THIS IS NOT A SYSTEM ORIGIN JOB# BEGIN PAR$F[0] = FALSE; # SET ROUTE TO DEFAULT ORIGIN # END PAR$CB[0] = FALSE; PAR$DISP[0] = "IN"; # ROUTE TO INPUT QUEUE # PAR$EP[0] = TRUE; # ERROR PROCESSING FLAG # PAR$DCF[0] = TRUE; PAR$ID[0] = TRUE; NP$ROUT(PARAM,1); # ROUTE ZZZZZDN FILE # DSPEC = PAR$EC[0]; # ERROR CODE RESPONSE FROM DSP # IF DSPEC NQ 0 THEN # ROUTE FAILED DUE TO ERROR # BEGIN ERRMSGT[0] = " ROUTE "; # ADD ROUTE TO DAYFILE MESSAGE # ERRMSGF[0] = "ZZZZZDN"; # NAME OF FILE ROUTED # ERRMSGC[0] = "EC"; # NAME OF FIELD CONTAINING RC # ERRMSGRC[0] = ((DSPEC/8)+27)*64 + DSPEC - (DSPEC/8)*8+27; NP$MSG(ERRMSG,3); END # NSUPWRD BASED ARRAY POINTER TO THE USER COMMUNICATION WORD WAS SET BY NETON. THE ARRAY IS LOCATED IN NP$NWL COMDECK. ZERO MESSAGE COUNTER FIELD IN NSUP COMMUNICATION WORD. # MSGCNT[0] = 0; # RESET THRESHOLD VALUE FOR WRITING EOR TO LOGFILE. # DB$ERCT = 500; END ELSE # WRITE ERROR OCCURRED ON FILE # BEGIN ERRMSGT[0] = " WRITE "; # ADD WRITE TO DAYFILE MESSAGE # ERRMSGF[0] = "ZZZZZDN"; # NAME OF FILE WITH WRITE ERROR # ERRMSGC[0] = "AT"; # NAME OF FIELD CONTAINING RC # ERRMSGRC[0] = ((AT/8) + 27)*64 + AT - (AT/8)*8 + 27; NP$MSG(ERRMSG,3); # ISSUE DAYFILE MESSAGE # END IF (DSPEC NQ 0) OR # ROUTE OF FILE ZZZZZDN FAILED # (AT NQ 0 ) # WRITE TO FILE ZZZZZDN FAILED # THEN # NEED TO GET RID OF BAD FILE # BEGIN NP$RETN(DB$FET); # RETURN TRACE FILE # END END # INITIALIZE FET # FET$LN[0] = 0; # INITIALIZE LEVEL NUMBER FIELD # FET$AT[0] = 0; # INIT ABNORMAL TERM CODE FIELD # FET$CODE[0] = 1; # SET COMPLETION BIT # FET$LEN[0] = 3; # SET FET LENGTH # TIMEWD = LOC(DB$BUF); # TIMEWD USED AS A TEMPORARY STO# FET$FIRST[0] = TIMEWD; # INITIALIZE CIRCULAR BUFFER PTR# FET$IN[0] = TIMEWD; FET$OUT[0] = TIMEWD; FET$LIMIT[0] = TIMEWD + 192; # COPY JOB RECORD TO ZZZZZDN FILE # AT = 0; # INITIALIZE ABNORMAL TERM FLAG # FET$LFN[0] = LFNAME[0]; # LFN OF JOB RECORD FILE # IF NOT FRWD THEN # NEED TO REWIND JOB RECORD FILE# BEGIN NP$RWD(DB$FET); # REWIND FILE TO BOI # ERRMSGT[0] = " REWIND"; # TYPE OF FUNCTION PERFORMED # AT = FET$AT[0]; # ABNORMAL TERMINATION CODE # END IF AT EQ 0 THEN # NO I/O ERROR ON JOB REC FILE # BEGIN NP$READ(DB$FET,1); # READ LOGICAL RECORD OF LFN # IF (FET$AT[0] NQ 0) AND # NO ABNORMAL TERMINATION CODE # (FET$AT[0] NQ 1) # EOI NOT ENCOUNTERED # THEN # NO ERROR OCCURRED ON READ # BEGIN ERRMSGT[0] = " READ "; # TYPE OF FUNCTION PERFORMED # AT = FET$AT[0]; # ABNORMAL TERMINATION CODE # END END FET$LFN = "ZZZZZDN"; # RESET FILE NAME IN FET # FET$AT[0] = 0; FET$LN[0] = 0; # INITIALIZE LEVEL NUMBER FIELD # IF AT NQ 0 THEN # ISSUE DAYFILE MSG FOR I/O ERR # BEGIN ERRMSGF[0] = DB$LFN; # NAME OF FILE WITH READ ERROR # ERRMSGC[0] = "AT"; # NAME OF FIELD CONTAINING RC # ERRMSGRC[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(DB$FET,1); # WRITE EOR TO FILE ZZZZZDN # END IF ACCEPTED # APP HAS NETTED ON # THEN # CREATE TRACE FILE HEADER REC # BEGIN NP$RTIM(TIMEWD); # REAL TIME SINCE DEADSTART # ZH$TIM[0] = TIMEWD; NP$CLK(CHARWD); # CLOCK TIME # ZH$CLK[0] = CHARWD; NP$DATE(CHARWD); # DATE # ZH$DATE = CHARWD; NP$WRTW(DB$FET,ZHDR,4); # COPY HEADER TO ZZZZZDN FILE # NP$WRTR(DB$FET,1); # WRITE END OF RECORD # NP$CLK(CHARWD); # CLOCK TIME # NP$WRTO(DB$FET,CHARWD); # WRITE TIME STAMP # END # DEBUG LOG FILE HEADER WRITTEN # IF FET$AT[0] NQ 0 THEN # RMS I/O ERROR HAS OCCURRED # BEGIN NP$PIOE(DB$FET); # PROCESS I/O ERROR # END END # UPDATE DB$TRUNC # IF MSGLTH GR 0 THEN BEGIN IF MSGLTH GR 410 THEN MSGLTH = 410; DB$TRUNC = MSGLTH; END *ENDIF RETURN; END # NETREL # TERM