*DECK NETOFF
USETEXT AIPDEF
USETEXT NP$MODE
USETEXT NP$NWL
USETEXT NP$STAT
*IF,DEF,DEBUG
USETEXT NP$DB
*IF DEF,XFR,1
USETEXT NX$ACBF
*ENDIF
PROC NETOFF;
*IF DEF,IMS
#
*1DC NETOFF
*
* 1. PROC NAME AUTHOR DATE
* NETOFF S.KRULEVITCH 77/06/28
*
* 2. FUNCTIONAL DESCRIPTION
* THIS ROUTINE INFORMS NIP THAT THE APPLICATION IS NETTING OFF.
* IT RESTORES AIP TO THE STATE IT WAS IN PRIOR TO NETON.
*
* 3. METHOD USED
* FORMATS A NETOFF WORKLIST ENTRY AND SENDS IT TO NIP BY NP$XFER.
* WHEN DEBUG OPTION IS DEFINED A TWO WORD ENTRY IS WRITTEN TO
* THE DEBUG LOG FILE.
* WORD 0
* 2
* 0 4
* I-------------------------I----------------I
* I I I
* I SECONDS SINCE DEADSTART I MILLISECONDS I
* I I I
* I-------------------------I----------------I
*
* WORD 1
* 2 4 5
* 4 2 3
* I-------I---------I--------I---------I
* I I I I I
* I I OFF$CAL I I OFF$OPC I
* I I I I I
* I-------I---------I--------I---------I
*
* OFF$CAL - CALLING ADDRESS
* OFF$OPC - NETOFF OP$CODE (=7)
*
* NAMA614
* 4. ENTRY CONDITIONS NAMA614
* NEXT - WORKLIST NEXT AVAILABLE WORD PTR NAMA614
* NAMA614
* 5. EXIT CONDITIONS NAMA614
* DEFER$PRO = FALSE
* DEFER$GSM = FALSE
* LTAA = 0
* PARALLEL = FALSE
* PN - PROCESS NUMBER IS SET TO 0. NAMA614
* ACCEPTED - AIP ON/OFF SWITCH SET OFF NAMA614
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED.
* AIPDEF NP$CRT
* NP$DB NP$MODE NP$NWL NP$STAT
*
* 7. ROUTINES CALLED
* NP$CLK - DELIVERS TIME IN DISPLAY CODE (STAT DEFINED)
* NP$DATE - DELIVERS DATE IN DISPLAY CODE (STAT DEFINED)
* NP$PIOE - PROCESS I/O ERROR AFTER WRITE OPERATION ON FILE
* NP$RTIM - DELIVERS TIME FROM DEADSTART IN SECONDS AND
* MILLISECONDS (STAT/DEBUG DEFINED)
* NP$SPRT - OUTPUTS STATISTICS TO,THEN CLOSES,ZZZZZSN.(STAT)
* NP$WRTW - WRITES TEXT TO SPECIFIED FILE.(STAT/DEBUG DEFINED)
* NP$WRTR - CLOSES FILE BY WRITING EOR.(DEBUG DEFINED)
* NP$XFER - TRANSFERS WORKLIST TO NIP
*
* 8. DAYFILE MESSAGES
* NONE
*
#
*ENDIF
BEGIN
*CALL NP$CRT
# #
# EXTERNAL ROUTINES: #
# #
XREF BEGIN
*IF DEF,DEBUG
PROC NP$RTIM; #RETURNS TIME SINCE DEADSTART #
*IF DEF,XFR,1
PROC NP$ERR ; # ERROR MESSAGE TO DAYFILE #
PROC NP$WRTR; #WRITES EOR TO ZZZZZDN #
PROC NP$WRTW; #WRITES WORDS TO ZZZZZDN #
PROC NP$PIOE; # PROCESS I/O ERROR ON FILE #
*ENDIF
*IF DEF,STAT
PROC NP$CLK; #DELIVERS TIME IN DISPLAY CODE #
PROC NP$DATE; #DELIVERS DATE IN DISPLAY CODE #
PROC NP$SPRT; #PUTS STATISTICS ON ZZZZZSN #
*IF -DEF,DEBUG
PROC NP$WRTW; #WRITES WORDS ON FILE #
PROC NP$PIOE; # PROCESS I/O ERROR ON FILE #
*ENDIF
PROC NP$XFER; #TRANSFERS WORKLIST TO NIP #
END #XREFS#
# #
# LOCAL DECLARATIONS #
# #
ITEM
I I; #INDEX VARIABLE #
ARRAY OFFWL[0:3] P(1);
ITEM
OFFHDR I (0),
OFFHDR$P U (0,9,12), #PROCESS NUMBER #
OFFHDR$N U (0,22,8), #NO. OF ENTRIES IN WORKLIST #
OFFHDR$W U (0,30,12), #NO. OF WORDS IN WORKLIST #
OFFHDR$AWL U (0,42,18), #ADDR WHERE WORKLIST RETURNED #
OFFNWL I (0),
*IF DEF,DEBUG
OFFNWL$ID U (0,0,6), #UNPROCESSED WORKLIST ID = 35 #
*ENDIF
OFFNWL$BS U (0,6,18), #BLOCK SIZE #
OFFNWL$OP U (0,54,5); #OP CODE #
*IF DEF,DEBUG
# DEBUG OPTION ARRAY DEFINITIONS #
ARRAY OFFLINE P(2); # LOGS NETOFF ENTRY #
BEGIN
ITEM OFF$TIM U(0,0,60); # TIME OF CALL TO NETOFF #
ITEM OFF$CAL U(1,24,AL); # NETOFF CALLING ADDRESS #
ITEM OFF$OPC I(1,54,6); # NETOFF OPCODE (=7) #
END
# DEBUG OPTION ITEM DEFINITIONS #
ITEM TIMEWD U; # REAL TIME SINCE DEADSTART #
*ENDIF
*IF DEF,STAT
ITEM CHARWD C(10);
*ENDIF
*IF DEF,STAT
ARRAY STMSG P(5);
ITEM
ST$CC C(0,0,10)=["0 "], #DOUBLE SPACE #
ST$MSG12 C(1,0,35)=["NAM STATISTICS GATHERING TERMINATED"];
ARRAY STMSGA P(6);
ITEM
ST$CCA C(0,0,10)=[" "], #SINGLE SPACE #
ST$MSG3 C(1,0,13)=["NETOFF DATE "],
ST$DATE C(2,18,10),
ST$MSG4 C(3,18,7)=[" TIME"],
ST$TIME C(4,0,10),
ST$EOLA I(5,0,60)=[0];
*ENDIF
#**********************************************************************#
# #
# NETOFF EXECUTION BEGINS HERE: #
IF NOT ACCEPTED
THEN
RETURN; #NO NETON #
*IF DEF,DEBUG
# FORMAT LOG ENTRY FOR NETOFF CALL #
P<CALLADR> = LOC(NETOFF); # GET CALL ADDRESS #
NP$RTIM(TIMEWD); # GET REAL TIME SINCE DEADSTART #
OFF$TIM[0] = TIMEWD;
OFF$CAL[0] = CALLADDR[0];
OFF$OPC[0] = OP$OFF;
NP$WRTW(DB$FET,OFFLINE,2); # WRITE NETOFF TO DEBUG LOG #
NP$WRTR(DB$FET,1); # WRITE EOR TO DEBUG LOG #
#
CHECK FOR I/O ERROR IN DEBUG LOG FILE
#
IF FET$AT[0] NQ 0
THEN # I/O ERROR HAS OCCURRED ON FILE#
BEGIN
NP$PIOE(DB$FET); # PROCESS I/O ERROR #
END
#
NSUPWRD BASED ARRAY POINTER TO THE USER COMMUNICATION WORD
WAS SET BY NETON. THE ARRAY IS LOCATED IN NP$NWL COMDECK.
UPDATE MSGCNT IN NSUP COMMUNICATION WORD.
#
MSGCNT[0] = MSGCNT[0] +1;
# #
*ENDIF
*IF DEF,STAT
NP$DATE(CHARWD); #PUT CURRENT DATE IN OUTPUT LINE #
ST$DATE = CHARWD;
NP$CLK(CHARWD); #GET TIME IN DISPLAY CODE #
ST$TIME = CHARWD; #PUT DISPLAY CODE TIME IN CHARACTER ARRAY #
NP$WRTW(SN$FET,STMSG,5);
NP$WRTW(SN$FET,STMSGA,6);
#
CHECK FOR I/O ERROR IN STATISTICS FILE
#
IF SN$AT[0] NQ 0
THEN # I/O ERROR HAS OCCURRED ON FILE#
BEGIN
NP$PIOE(SN$FET); # PROCESS I/O ERROR #
END
NP$SPRT; #DUMP STATISTICS TO ZZZZZSN #
*ENDIF
# #
*IF DEF,XFR
*IF DEF,DEBUG,3
IF NUMFILEXFR NQ 0
THEN
NP$ERR("45"); # STILL FILE BEING TRANSFERRED #
# OUTSTANDING, ABORT C.P. #
*ENDIF
# BUILD NETOFF REQUEST IN OFFNWL #
# #
OFFHDR[NHDR] = LOC(OFFHDR[NHDR]) + 1;
OFFHDR$P[NHDR] = PN;
OFFHDR$N[NHDR] = 1;
OFFHDR$W[NHDR] = OPABHSIZ + NHDR;
I = NHDR + 1;
OFFNWL[I] = 0;
*IF DEF,DEBUG
OFFNWL$ID[I] = AWLID;
*ENDIF
OFFNWL$BS[I] = OPABHSIZ;
OFFNWL$OP[I] = OP$OFF;
# #
# SEND NWL TO NIP VIA SSCALL: #
# #
PARALLEL = FALSE;
NP$XFER(LOC(OFFWL[NCTL])); #SENDS WORKLIST TO NIP #
# #
# REINITIALIZE AIP STATES #
# #
DEFER$PRO = FALSE ;
DEFER$GSM = FALSE ;
LTAA = 0 ;
ACCEPTED = FALSE;
RETURN;
END #NETOFF#
TERM