*DECK NP$ON 
USETEXT AIPDEF
USETEXT NP$MODE 
USETEXT NP$NWL
USETEXT NP$STAT 
USETEXT NP$ZHDR 
*IF,DEF,DEBUG 
USETEXT NP$DB 
USETEXT NP$ONAM 
*ENDIF
PROC NP$ON; 
*IF DEF,IMS 
 #
*1DC  NP$ON 
* 
*     1. PROC NAME        AUTHOR                DATE
*        NP$ON            V.M.SZIGETI           77/07/29
* 
*     2. FUNCTIONAL DESCRIPTION 
*        PROCESS NETON REQUEST RESPONSE FROM NIP. 
* 
*     3. METHOD USED
*        RESULT FROM THE NETON RESPONSE ENTRY IS STORED IN THE
*        USER"S CALLING PARAMETER AREA. 
*        WHEN DEBUG OPTION IS DEFINED A FOUR WORD HEADER IS WRITTEN TO
*        THE DEBUG LOG FILE.
* 
*        WORD 0 - ANAME 
* 
*        WORD 1 
*                                   2 
*         0                         4 
*        I-------------------------I----------------I 
*        I                         I                I 
*        I SECONDS SINCE DEADSTART I MILLISECONDS   I 
*        I                         I                I 
*        I-------------------------I----------------I 
* 
*        WORD 2 - CLOCK TIME:  HH.MM.SS.
* 
*        WORD 3 - DATE:  YY/MM/DD 
* 
*        WHEN DEBUG OPTION IS DEFINED A 4 WORD NETON ENTRY IS ALSO
*        WRITTEN TO THE DEBUG LOG FILE. 
* 
*        WORD 0 - SAME AS HEADER WORD 1 (RTIME) 
* 
*        WORD 1 
*                        2         4    5 
*              6         4         2    3 
*        I----I---------I---------I----I---------I
*        I    I         I         I    I         I
*        I    I ON$NSUP I ON$CALL I    I  ON$OPC I
*        I    I         I         I    I         I
*        I----I---------I---------I----I---------I
  
*        ON$NSUP - LOCATION OF THE USER COMMUNICATION WORD
*        ON$CALL - CALLING ADDRESS OF ROUTINE 
*        ON$OPC - NETON OPCODE (=6) 
* 
*        WORD 2 - MINACN
* 
*        WORD 3 - MAXACN
* 
*     4. ENTRY CONDITIONS 
*        NEXT - POINTS TO THE NETON REQUEST/RESPONSE ENTRY
*        IN THE NWL 
* 
*     5. EXIT CONDITIONS
*        ACCEPTED - TRUE IF NETON SUCCESSFUL
*        RESULT WILL CONTAIN THE RESULT OF THE NETON
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*     AIPDEF       NAMLEV    NP$CRT 
*     NP$DB        NP$MODE   NP$NWL    NP$ONAM
*     NP$STAT      NP$ZHDR
* 
*     7. ROUTINES CALLED
*        NP$CLK 
*        NP$DATE
*        NP$ERR 
*        NP$MSG - DAYFILES LOCAL MESSAGE WITHOUT RECALL.
*        NP$PIOE - PROCESS I/O ERROR ON DISK FILE 
*        NP$TIM 
*        NP$WRTW
*        NP$XCDD
*        NP$XCOD
* 
*     8. DAYFILE MESSAGES 
*        NETWORK APPLICATION ABORTED, RC = 50.
*        NP$ON: INVALID PROCESS NUMBER. 
* 
*        NAM VERSION X.X-XXX
* 
 #
*ENDIF
   BEGIN
*CALL NP$CRT
# 
      EXTERNAL ROUTINE
# 
   XREF BEGIN 
*IF -DEF,DEBUG
*IF DEF,STAT
        PROC NP$CLK;                    # CLOCK TIME IN DISPLAY CODE   #
        PROC NP$DATE;                   # DATE IN DISPLAY CODE         #
*ENDIF
*IF DEF,DEBUG 
        PROC NP$CLK;                    # CLOCK TIME IN DISPLAY CODE   #
        PROC NP$DATE;                   # DATE IN DISPLAY CODE         #
        PROC NP$ERR;                    # ERROR ON INVALID PROCESS NO. #
*ENDIF
        PROC NP$MSG;                    # DAYFILES A MESSAGE           #
        PROC NP$PIOE;                   # PROCESS I/O ERROR ON FILE    #
*IF DEF,DEBUG 
        PROC NP$RTIM;                   # REAL TIME SINCE DEADSTART    #
*ENDIF
*IF DEF,STAT
        PROC NP$TIM;                    # GETS ACCUMULATED CPU TIME    #
*ENDIF
*IF DEF,DEBUG 
        PROC NP$WRTW;                   # WRITES WORDS TO LOG FILES    #
        PROC NP$WRTO ;
        PROC NP$WRTR ;
*ENDIF
*IF -DEF,DEBUG
*IF DEF,STAT
        PROC NP$WRTW; 
*ENDIF
        END 
# 
      COMMON VARIABLES
# 
*CALL NAMLEV
# 
      LOCAL VARIABLES 
# 
*IF DEF,DEBUG 
      DEF PNMAX   #255#;
  
      ITEM CHARWD       C(10);
*ENDIF
*IF -DEF,DEBUG
*IF DEF,STAT
      ITEM CHARWD       C(10);
*ENDIF
      ITEM I;                # LOCAL VARIABLE AND STAT LOOP VARIABLE   #
*IF DEF,DEBUG 
      ITEM TIMEWD;           # REAL TIME SINCE DEADSTART               #
*ENDIF
  
      BASED ARRAY RES    ;
        ITEM
         RESULT   I(0) ;
*IF DEF,DEBUG 
  
*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 STARTED   "];
      ARRAY STMSGA      P(6); 
        ITEM
          ST$CCA    C(0,0,10)=["          "],     #SINGLE SPACE       # 
          ST$MSG3       C(1,0,13)=["NETON   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
      ARRAY NINMSG [0:0] S(3) ; 
        BEGIN 
        ITEM NINMSG1       C(0,0,17) = ["NETON WITH NIN = "] ;
        ITEM NINCUR        C(1,42,3) ;
        ITEM NINMSG2       U(2,42,18) =[0] ;
        END 
#**********************************************************************#
  
#     NP$ON EXECUTION BEGINS HERE                                      #
  
      P<RES> = NON[NEXT+5];             # ADDRESS OF RESULT            #
#                                                                     # 
#     PROCESS NETON RESPONSE:                                         # 
#                                                                     # 
      IF CTL$NONAM[NCTL] OR CTL$BUSY[NCTL]
      THEN
        BEGIN 
        RESULT=1;                       #NIP NOT AVAILABLE AT A SCP   # 
        GOTO EXIT;
  
        END #CTL$FLAGS NQ 0#
  
      IF NWL$RC[NEXT] NQ 0
      THEN
        BEGIN 
        RESULT = NWL$RC[NEXT];          #NETON REJECTED BY NIP        # 
        GOTO EXIT;
  
        END #NWL$RC NQ 0# 
  
      RESULT=0;                         #NETON ACCEPTED               # 
      PN = NWL[NEXT+1]; 
*IF DEF,DEBUG 
      IF ((PN LQ 0) OR (PN GR PNMAX)) 
      THEN
        NP$ERR("50");                  # INVALID PROCESS NUMBER.       #
*ENDIF
      HDR$P[NHDR]=PN; 
#                                                                     # 
      I = 3;       #SEND MESSAGE TO USER DAYFILE AND LINE 1 OF CTRL PT# 
      NP$MSG(NAMLEV,I);                 #DAYFILE THE NAM LEVEL W/O RCL# 
      NINCUR[0] = NWL$NIN[NEXT] ; 
      NP$MSG(NINMSG,I) ;
      ACCEPTED = TRUE;                  #SUCCESSFUL NETON             # 
*IF DEF,DEBUG 
  
#     INITIALIZE FET FOR FILE ZZZZZDN IF NOT ALREADY DONE              #
  
      IF FET$LFN NQ "ZZZZZDN" THEN
        BEGIN 
        FET$LFN = "ZZZZZDN";
        FET$LN[0] = 0;                  # INITIALIZE LEVEL NO FIELD    #
        FET$AT[0] = 0;                  # INITIALIZE ABNORMAL TERM FLD #
        FET$CODE = 1;             # SET COMPLETION BIT                 #
        FET$LEN = 3;              # SET FET LENGTH                     #
        DB$OP = LOC(DB$BUF);      # DB$OP USED AS TEMPORARY STORE      #
        FET$FIRST = DB$OP;        # INITIALIZE CIRCULAR BUFFER PTRS    #
        FET$IN = DB$OP; 
        FET$OUT = DB$OP;
        FET$LIMIT = DB$OP + ZDNCIOBUFL; 
        END 
  
  
#     FORMAT LOG ENTRY FOR NETON CALL                                  #
  
      NP$RTIM(TIMEWD);
      ON$TIM[0] = TIMEWD; 
      ZH$TIM[0] = TIMEWD;               # REAL TIME SINCE DEADSTART    #
      NP$CLK(CHARWD);                   # GET CLOCK TIME               #
      ZH$CLK[0] = CHARWD; 
      NP$DATE(CHARWD);                  # GET DATE                     #
      ZH$DATE[0] = CHARWD;
      NP$WRTW(DB$FET,ZHDR,4);           # OUTPUT HEADER TO ZZZZZDN     #
  
#     WRITE AN EOR AFTER THE HEADER                                    #
      NP$WRTR(DB$FET,1) ; 
      NP$CLK(CHARWD) ;
      NP$WRTO(DB$FET,CHARWD) ;
  
      ON$OPC[0] = OP$ON;
      ON$NSUP[0] = P<NSUPWRD>;
      NP$WRTW(DB$FET,ONLINE,4);         # OUTPUT NETON TO ZZZZZDN      #
# 
      NSUPWRD BASED ARRAY POINTER TO THE COMMUNICATION WORD 
      WAS SET BY NETON.  THE ARRAY IS LOCATION IN NP$NWL COMDECK. 
  
      UPDATE  MSGCNT IN NSUP COMMUNICATION WORD.
# 
      MSGCNT[0] = MSGCNT[0] + 1;
# 
      CHECK FOR I/O ERROR IN DEBUG LOG FILE 
# 
      IF FET$AT[0] NQ 0 
      THEN                              # I/O ERROR HAS OCCURRED ON FIL#
        BEGIN 
        NP$PIOE(DB$FET);                # PROCESS I/O ERROR            #
        END 
#                                                                      #
*ENDIF
*IF DEF,STAT
#                                                                     # 
#     INITIALIZE FET FOR FILE ZZZZZSN IF NOT ALREADY DONE             # 
#                                                                     # 
      IF SN$LFN NQ "ZZZZZSN"
      THEN
        BEGIN 
        SN$LFN = "ZZZZZSN"; 
        SN$CODE = 1;                    #SET COMPLETION BIT           # 
        SN$LEN = 3;                     #SET FET LENGTH               # 
        SN$FIRST = LOC(SN$BUF);         #INITIALIZE CIRCULAR BUFFER   # 
        SN$IN = SN$FIRST;               # POINTERS                    # 
        SN$OUT = SN$FIRST;
        SN$LIMIT = SN$FIRST + ZSNCIOBUFL; 
        END 
  
      FOR I=0 STEP 1 UNTIL STATSIZE DO
        STAT[I] = 0;                    #INITIALIZE STATISTICS ARRAY  # 
      NP$TIM(ST$TIM[0]);
      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 
*ENDIF
  
EXIT: 
      RETURN; 
  
   END                       # NP$ON                                   #
TERM
