*DECK NETON 
USETEXT AIPDEF
USETEXT NP$MODE 
USETEXT NP$DB 
USETEXT NP$NWL
USETEXT NP$ONAM 
USETEXT NP$STAT 
USETEXT NP$ZHDR 
*IF DEF,XFR 
USETEXT NX$ACBF 
USETEXT NX$ACBX 
*ENDIF
PROC NETON((ANAME),NSUP,RESULT,(MINACN),(MAXACN));
*IF DEF,IMS 
 #
*1DC  NETON 
* 
*     1. PROC NAME         AUTHOR               DATE
*        NETON             S. KRULEVITCH        78/11/10
* 
*     2. FUNCTIONAL DESCRIPTION 
*        SETS AIP VARIABLES TO INITIAL STATE.  FORMATS A NETON ENTRY
*        AND SENDS IT TO NIP BY USE OF NETSEND.  NIP AND CS WILL THEN 
*        EITHER ACCEPT THE APPLICATION AND BUILD TABLES RELEVANT TO IT
*        OR THEY WILL REJECT THE APPLICATION. 
* 
*     3. METHOD USED
*        A NETON ENTRY IS FORMATTED FOR NIP.  NIP RETURNS A PROCESS 
*        NUMBER AND ON ACCEPT/REJECT CODE (RESULT). 
* 
*     4. ENTRY CONDITIONS 
*        ACCEPTED - BOOLEAN VARIABLE WHICH SHOULD BE FALSE ON ENTRY 
*        ANAME - APPLICATION NAME 
*        MINACN - GREATER THAN ZERO AND LESS THAN OR EQUAL TO MAXACN
*        MAXACN - LESS THAN 4095 (ACNMX)
*        NSUP - THIS WORD CONTAINS FOUR FLAGS AS FOLLOWS: 
*          BIT: 0 1 2 3 4 
*               C   N I S 
* 
*          C - COMPLETE BIT CONTAINING THE STATUS FROM NETCHEK
*              =1  COMPLETE 
*              =0  NOT COMPLETE 
*          N - NAM AVAILABLE
*              =1  AVAILABLE
*              =0  NOT AVAILABLE
*          I - INPUT OTHER THAN ACN =0 AVAILABLE
*              =1  TRUE 
*              =0  FALSE
*          S - SUPERVISORY MESSAGES AVAILABLE  (NSUP) 
*              =1  TRUE 
*              =0  FALSE
*        NSUP ALSO CONTAINS A FIELD MSGCNT THAT TRACKS THE NUMBER OF
*        MESSAGES WRITTEN TO THE DEBUG LOG FILE ZZZZZDN.
* 
*     5. EXIT CONDITIONS
*        NSUP WORD FLAGS ARE PRESET AS FOLLOWS: 
*          C = 0
*          N = 1
*          I = 0
*          S = 0
*        DEFER$PRO = FALSE
*        NP$SMB POINTERS ARE PRESET: HEAD = FOOT = FIRST
*                                    NEXTSMLEN = 0
*        NP$NWL HEADER IS INITIALIZED.
*        NP$CRT  NP$MODE  NP$NWL  NP$STAT 
*        RESULT - STATUS OF NETON REQUEST, 0 = ACCEPTED, 1 = BUSY,
*        TRY AGAIN, 2 = REJECTED. 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        AIPDEF    NP$CRT    NP$DB     NP$LOF 
*        NP$MODE   NP$NWL    NP$ONAM   NP$STAT
*        NP$ZHDR
* 
*     7. ROUTINES CALLED
*        NP$ERR - PRINTS ERROR MESSAGE, THEN STOPS
*        NP$RCL - GO INTO RECALL
*        NP$SEND - SENDS WORKLIST TO NIP
* 
*     8. DAYFILE MESSAGES 
*        NETWORK APPLICATION ABORTED, RC = 30.
*        NETON: DUPLICATE NETON REQUEST.
* 
*        NETWORK APPLICATION ABORTED, RC = 40.
*        NETON: PREVIOUS REQUEST INCOMPLETE.
* 
* 
 #
*ENDIF
   BEGIN
  
*CALL NP$CRT
  
#                                                                     # 
#     PARAMETERS:                                                     # 
#                                                                     # 
      ITEM
        ANAME           C(7),# APPLICATION NAME                        #
        I               I,   # INDUCTION VARIABLE                      #
        NSUP            I,   #MORE SUPERVISORY MESSAGES IN SMB        # 
        RESULT          I,   #STATUS OF NETON REQUEST                 # 
        MINACN          I,   # 0<MINACN@MAXACN<4095                   # 
        MAXACN          I,
        NETTRY          B,   # NETON RETRY FLAG                       # 
        NETLOOP         I;
#                                                                     # 
#     ROUTINES CALLED:                                                # 
#                                                                     # 
   XREF BEGIN 
        PROC NP$ERR;                    #ERROR PROCESSOR              # 
        PROC NP$RCL;                    # GO INTO RECALL               #
        PROC NP$SEND;                   #SENDS NWL TO NIP VIA SSCALL  # 
        END #XREFS# 
  
  
  
#**********************************************************************#
# 
      NETON EXECUTION BEGINS HERE 
# 
      IF ACCEPTED 
      THEN
        NP$ERR("30");                  # DUPLICATE NETON.              #
      IF DEFER$PRO
      THEN
        NP$ERR("40");                  # PREVIOUS REQUEST INCOMPLETE.  #
  
# 
      AIP INITIALIZATION
# 
      NETTRY = TRUE;                    # SET RETRY FLAG TO TRUE       #
      FOR NETLOOP = 0 WHILE NETTRY      # TRY TO NETON                 #
      DO
        BEGIN 
        DAWORD = 0;                     # CLEAR DATA AVAILABILITY WORD #
        RESULT = 0;                     # CLEAR RESULT WORD            #
        NETTRY = FALSE;                 # CLEAR RETRY FLAG             #
        NSUP = O"10000000000000000000"; #NAM AVAILABLE FLAG SET        #
        P<NSUPWRD> = LOC(NSUP);         # LOCATION OF NSUP COMM/WORD.  #
# 
        INITIALIZE NETWORK WORKLIST BUFFER
# 
        P<WORKLIST> = LOC(NWLBUF);      # LOCATION OF NWL BUFFER       #
        NEXT = NHDR + 1;                #SET NWL POINTERS AND          #
        SPACE$LEFT=LWL;                 #        COUNTERS              #
        DOWNUSE = FALSE;                # DOWNLINE BUFFERING NOT IN USE#
        N$AWL[0] = 0;        # CLEAR AWL RESPONSE INDICATORS           #
# 
        INITIALIZE POINTERS FOR SUPERVISORY MESSAGE BUFFER - SMB
# 
        HEAD = FIRST;                   #FIRST IS START OF SMB        # 
        FOOT = HEAD;                    #SMB IS EMPTY: NO MESSAGES    # 
        NEXTSMLEN = 0;                  #NO SUPERVISORY MSGS IN NIP   # 
# 
      INITIALIZE POINTERS FOR AIP UPLINE DATA MESSAGE BUFFER - GMB
# 
      GMBHEAD = 1;                      # INITIAL INDX FOR FWA TO WRITE#
      GMBFOOT = 1;                      # INITIAL INDX FOR LWA TO WRITE#
      GMBUSE = FALSE;                   # INIT GMB NOT IN USE FLAG     #
      GMBTRUNC = FALSE;                 # INIT NO TRUNCATION OF DATA   #
      GMBLAST = 1;                      # INITIAL INDEX FOR END OF BUF #
      GMBCN = 0;                        # INIT CON NUMBER FOR GMB      #
      GMBLN = 0;                        # INIT LIST NUMBER FOR GMB     #
      GMMESIZE = 0;                     # INIT FOR NO GMM ENTRY NEEDED #
# 
        SET UP NWL HEADER 
# 
        HDR[NHDR]=LOC(HDR[NHDR]) + 1;   #RETURN AWL AFTER CONTROL WDS # 
        HDR$N[NHDR]=1;                  #ONLY 1 ENTRY, I.E. THE NETON # 
        HDR$W[NHDR] = 1 + NONBSIZE; 
# 
        FORMAT NETON NWL ENTRY
# 
        N$NETONAWL[0] = 1;     # FLAG NETON AWL TO PROCESS            # 
        NWL[NEXT]=0;           #CLEAR AND BUILD OP WORD               # 
        NWL$OP[NEXT]=OP$ON; 
        NWL$ID[NEXT] = AWLID;  #UNPROCESSED WORKLIST ID = AWLID (=11) # 
        NWL$BS[NEXT] = NONBSIZE;
        NON[NEXT+1]=0;
        NON$AN[NEXT+1] = ANAME; 
        NON[NEXT+2] = MINACN; 
        NON[NEXT+3] = MAXACN; 
        NON[NEXT+4] = LOC(DAWORD);      # INFORM NIP OF DAWORD ADDRESS #
        NON[NEXT+5] = LOC(RESULT);      # SAVE LOCATION OF RESULT      #
  
*IF DEF,DEBUG 
        ZH$ANAM[0] = ANAME; 
        P<CALLADR> = LOC(NETON);
        ON$CALL[0] = CALLADDR[0]; 
        ON$MIN[0] = MINACN; 
        ON$MAX[0] = B<48,12>MAXACN ;   # THE MAX ACN FROM APPLICATION  #
*ENDIF
# 
        SEND NETON NWL TO NIP 
# 
      SENDGETMM = FALSE;     # NO NEED TO PICK UP DATA MSGS UNTIL NETON#
        SENDGETSM = FALSE;   # NO NEED TO PICK UP SUP MSGS UNTIL NETON #
        NP$SEND;
        IF RESULT EQ 1 AND N$FLAG[0]     # IF NETON REJECT CODE 1 AND  #
        THEN
          BEGIN 
          NETTRY = TRUE;     # RETRY NETON                             #
          FOR I = 1 STEP 1 UNTIL 20 
          DO                 # DELAY BEFORE REISSUING NETON            #
            BEGIN 
            NP$RCL(0);       # GO INTO TIME DELAY RECALL               #
            END 
          END                # END IF                                  #
        END                  # END WHILE                               #
      SENDGETMM = TRUE; 
      SENDGETSM = TRUE; 
*IF DEF,XFR 
      MINIACN = MINACN ;
                             # MAXACN INPUT PARAM IS                   #
                             # A COMBINATION OF 2 MAX CONNECTION LIMIT:#
                             #  . BIT 48-59: MAX ACN                   #
                             #  . BIT 36-47: RESERVED OUTGOING CONS.   #
        MAXIACN = B<48,12>MAXACN ;
        NUMIRCN = B<36,12>MAXACN ;
      NUMFILEXFR = 0 ;
      GROUPNAME = 0 ; 
*ENDIF
  
      RETURN; 
   END #NETON # 
TERM
