*DECK NDLNFNT 
USETEXT NDLDATT 
USETEXT NDLER2T 
USETEXT NDLFETT 
USETEXT NDLNCFT 
USETEXT NDLPS2T 
USETEXT NDLTBLT 
      PROC NDLNFNT; 
      BEGIN 
*IF,DEF,IMS 
# 
**    NDLNFNT - NCF NETWORK ELEMENTS
* 
*     S.M. ILMBERGER         81/11/2
* 
*     PROCESS NETWORK ELEMENT STATEMENTS
* 
*     PROC NDLNFNT
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES
*     INVALID STMT I.D.-ABORT FROM NCFNET 
* 
*     METHOD
* 
*     FOR EACH "NETWORK" OR "TRUNK" TYPE STATEMENT IN STMT$TABLE
*       READ FULL STATEMENT 
*       IF STATEMENT IS NFILE 
*         CLEAR PRFX$TABLE AND VERIFY$ENTRY 
*         CALL NFILE STATEMENT PROCESSOR
*       IF STATEMENT IS NPU 
*         GET AND CLEAR NEXT ENTRY OF NPU$XREF TABLE
*         CALL NPU STATEMENT PROCESSOR
*       IF STATEMENT IS SUPLINK 
*         GET AND CLEAR NEXT ENTRY OF SUPLINK TABLE 
*         CALL SUPLINNK STATEMENT PROCESSOR 
*       IF STATEMENT IS COUPLER 
*         GET AND CLEAR NEXT ENTRY OF PLINK$XREF TABLE
*         CALL COUPLER STATEMENT PROCESSOR
*       IF STATEMENT IS LOGLINK 
*         GET AND CLEAR NEXT ENTRY OF LOGLINK$XREF
*         CALL LOGLINK STATEMENT PROCESSOR
*       IF STATEMENT IS TRUNK 
*         GET AND CLEAR NEXT ENTRY OF PLINK$XREF TABLE
*         CALL TRUNK STATEMENT PROCESSOR
*       IF STATEMENT HAS NOT MATCHED A STATEMENT ID 
*         SEND ERROR MESSAGE
*       READ NEXT STATEMENT HEADER
*     END 
* 
# 
*ENDIF
# 
****  PROC NDLNFNT - XREF LIST BEGINS 
# 
      XREF
        BEGIN 
        PROC ABORT;          # ABORTS NDLP                             #
        PROC SSTATS;         # ALLOCATE MORE TABLE SPACE               #
        PROC MESSAGE;        # MAKE DAYFILE AND SYSTEM CONSOLE MESSAGE #
        PROC READW;          # READ STATEMENT TABLE                    #
        PROC NDLTRNK;        # PROCESS TRUNK STATEMENT                 #
        PROC NDLWNCF;        # WRITE RECORD TO NCF-FILE                #
        END 
# 
****
# 
  
      DEF FSTCT # 1 #;       # FIRST ENTRY IN COUPLER TABLE            #
      DEF FSTLL # 1 #;       # FIRST ENTRY IN LOGLINK-XREF-TABLE       #
      DEF FSTLLT # 1 #;      # FIRST ENTRY IN LOGLINK TABLE            #
      DEF FSTNT # 1 #;       # FIRST ENTRY IN NPU TABLE                #
      DEF FSTPL # 1 #;       # FIRST ENTRY IN PHYSICAL-LINK-XREF TAB   #
      DEF LEN$FH$TAB # 17 #; # LENGTH OF TABLE TO WRITE TO NCF         #
      DEF SECLL # 2 #;       # SECOND ENTRY IN LOGLINK-XREF TAB        #
  
      ITEM COMM$RD$ER  B;    # INDICATES STMT IS COMMUNICATION TYPE OR #
                             # A READ ERROR OCCURED                    #
      ITEM CPL$CNT I;        # NUMBER OF COUPLERS ON CURRENT NPU       #
      ITEM CRNT$CPL C(7);    # NAME OF CURRENT COUPLER                 #
      ITEM CRNT$CNID;        # NODE I.D. OF CRUENT COUPLER             #
      ITEM CRNT$HNAM C(7);   # NAME OF CURRENT HNAME                   #
      ITEM FWAWSA;           # 1ST WORD ADDRESS OF WORKING STORAGE AREA#
      ITEM I;                # LOOP COUNTER                            #
      ITEM PRI$USED B;       # PRIMARY SPECIFIED FLAG                  #
      ITEM SEC$USED B;       # SECONDARY SPECIFIED FLAG                #
  
      ARRAY STMT$TAB [0:11] S(1); #  ROUTES STMT TO NETWORK OR         #
        BEGIN                     #  COMMUNICATION PROCESSOR           #
        ITEM STMT$TYPE C(0,0,10) = [,"NETWORK   ",    # NFILE    #
                                     "NETWORK   ",    # NPU      #
                                     "NETWORK   ",    # SUPLINK  #
                                     "NETWORK   ",    # COUPLER  #
                                     "NETWORK   ",    # LOGLINK  #
                                     "COMMUNIC  ",    # GROUP    #
                                     "COMMUNIC  ",    # LINE     #
                                     "COMMUNIC  ",    # REPEAT   #
                                     "COMMUNIC  ",    # TERMINAL #
                                     "COMMUNIC  ",    # DEVICE   #
                                     "TRUNK     "     # TRUNK    #
                                   ]; 
        END 
  
      SWITCH NET$ELEM        ERR$NET ,  # UNK     # 
                             NFILE$ST,  # NFILE   # 
                             NPU$ST  ,  # NPU     # 
                             SLINK$ST,  # SUPLINK # 
                             COUP$ST ,  # COUPLER # 
                             LLINK$ST,  # LOGLINK # 
                             ERR$NET ,
                             ERR$NET ,
                             ERR$NET ,
                             ERR$NET ,
                             ERR$NET ,
                             TRNK$ST ;  # TRUNK   # 
  
      CONTROL EJECT;
      PROC CHKNODE(NODE$VAL,MXNO,UNQFLG,INRANGE); 
          #   CHECKS THAT NODE NUMBER IS UNIQUE                        #
      BEGIN # CHKNODE PROC   #
*IF,DEF,IMS 
# 
**    CHKNODE - CHECK NODE VALUE
* 
*     S.M. ILMBERGER         81/10/30 
* 
*     CHECK UNIQUENESS OF NODE NUMBER 
* 
*     PROC CHKNODE(NODE$VAL,MXNO,UNQFLG,INRANGE)
* 
*     ENTRY        NODE$VAL - NODE NUM TO CHECK UNIQUENESS OF 
*                  MXNO - MAXIMUM VALUE NODE CAN HAVE 
* 
*     EXIT         UNQFLG - FLAG INDICATING IF NODE IS UNIQUE 
*                  INRANGE - FLAG INDICATING IF NODE IS IN RANGE
* 
*     MESSAGES     NONE 
* 
*     METHOD
* 
*     CALL RNGNODE TO CK IF NODE IS IN RANGE
*     IF NODE IS INRANGE
*       CK BITMAP FOR UNIQUENESS
*       IF NOT UNIQUE 
*         SEND ERROR MSG
*       ELSE
*         SET BIT IN BITMAP 
*     END 
* 
# 
*ENDIF
  
      ITEM CNODEVAL C(10);   # CHARACTER STORAGE FOR NODE NUMBER       #
      ITEM NODE$VAL I;       # NODE NUMBER TO CHECK UNIQUENESS ON      #
      ITEM MXNO     I;       # MAX NUMBER NODE CAN HAVE                #
      ITEM UNQFLG   B;       # NODE UNIQUENESS FLAG                    #
                             # TRUE IF VALUE IS UNIQUE                 #
      ITEM INRANGE  B;       # RANGE RESTRAINT FLAG                    #
                             # TRUE WHEN NODE NUMBER IS IN RANGE       #
  
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN ERROR-FILE-2             #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO DECIMAL DISPLAY CODE#
        END 
  
      ITEM BIT;              # INDICATES BIT NUMBER OF BITMAP          #
      ITEM WORD;             # INDICATES WORD OF BITMAP                #
  
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      BIT = 0;
      WORD = 0; 
      UNQFLG = TRUE;         # NODE IS UNIQUE                          #
      RNGNODE(NODE$VAL,MXNO,INRANGE); # CK IF NODE IS RANGE            #
      IF INRANGE
      THEN
        BEGIN 
        WORD = (NODE$VAL-1) / 60; # COMPUTE CORRECT WORD OF BITMAP     #
        BIT = (NODE$VAL-1) - (60 * WORD); # AND BIT TO REFER TO        #
        IF B<BIT,1>BITMAP[WORD] EQ 1 # TEST BIT IN BITMAP              #
        THEN                 # IF ALREADY SET                          #
          BEGIN 
          CNODEVAL = XCDD(NODE$VAL);   # CONVERT INTEGER TO DEC DISPLAY#
          NDLEM2(ERR125,STLNUM[0],CNODEVAL); # SEND ERROR MSG          #
          UNQFLG = FALSE;    # SET FLAG TO INDICATE VALUE NOT UNIQUE   #
          END 
        ELSE                 # OTHERWISE SET FLAG                      #
          BEGIN 
          B<BIT,1>BITMAP[WORD] = 1; 
          END 
        END   # IF INRANGE #
      RETURN; 
  
      END   # CHKNODE PROC #
  
      CONTROL EJECT;
      PROC CPLERPR;          # PROCESS COUPLER STATEMENT               #
      BEGIN 
*IF,DEF,IMS 
# 
**    CPLERPR - COUPLER PROCESSOR 
* 
*     S.M. ILMBERGER         81/10/30 
* 
*     PROCESS COUPLER STATEMENT 
* 
*     PROC CPLERPR
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES
*     INVALID KEYWORD I.D.-ABORT FROM CPLERPR 
* 
*     METHOD
* 
*     IF NO LABEL ERROR 
*       SAVE COUPLER NAME 
*       SET COUPLER FLAG IN PLINK$XREF
*     FOR EACH KEYWORD ON STATEMENT 
*       IF NO VALUE ERROR 
*       SAVE INFO IN APPROPRIATE POSITION OF PLINK$XREF TABLE 
*     IF NO NODE OR HNAME PARAMETER SPECIFIED 
*       FLAG ERROR
*     IF DUPLICATE COUPLER LOC VALUE
*       FLAG ERROR
*     IF MORE THAN TWO COUPLERS 
*       FLAG ERROR
*     SET BIT IN LOC BITMAP FOR LOC VALUE 
*     END 
* 
# 
*ENDIF
  
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKE ENTRY IN ERROR-FILE-2              #
        END 
  
      DEF COUP$PAR # "COUPLER" #; # FOR ERROR MESSAGE                  #
      DEF HNAME$PAR # "HNAME" #; # FOR ERROR MESSAGE                   #
      DEF MX$NODE # 255 #;   # MAX NODE NUMBER ON COUPLER STATEMENT    #
      DEF NODE$PAR # "NODE" #; #FOR ERROR MESSAGE                      #
      DEF PRI1 # 0 #;        # LOC VALUE FOR PRIMARY                   #
      DEF SEC1 # 1 #;        # LOC VALUE FOR SECONDARY                 #
      DEF SEC # "SECOND" #; 
  
      ITEM COUPCNT;          # NUMBER OF COUPLERS TO CURRENT NPU       #
      ITEM I;                # LOOP COUNTER                            #
      ITEM INRFLG B;         # NODE NUMBER IN RANGE                    #
      ITEM KWD$MAP;          # KEYWORD EXISTS BIT MAP                  #
      ITEM LOC$PAR C(10);    # LOC PARAMETER VALUE                     #
      ITEM NODEVAL;          # NODE VALUE                              #
      ITEM UNQFLG B;          # NODE NUMBER UNIQUE FLAG                #
  
      SWITCH CPL$PAR         ERR$CP ,  # UNK     #
                             NODE$ID,  # NODE    #
                             ERR$CP ,  # VARIANT #
                             ERR$CP ,  # OPGO    #
                             ERR$CP ,  # DMP     #
                             ERR$CP ,  # LLNAME  #
                             ERR$CP ,  # UNK     #
                             ERR$CP ,  # UNK     #
                             ERR$CP ,  # UNK     #
                             ERR$CP ,  # UNK     #
                             HNAM$ID,  # HANME   #
                             LOC$ID ;  # LOC     #
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      CRNT$CPL = " "; 
      CRNT$CNID = 0;
      CRNT$HNAM = " ";
      KWD$MAP = 0;           # CLEAR BIT MAP                           #
      LOC$PAR = "PRIMARY";   # SET DEFAULT LOC VALUE                   #
      PLWC[0] = PLWC[0] +1; 
      IF NOT STLBERR[1] 
      THEN
        BEGIN 
        PLNAME[PLWC[0]] = STLABEL[1]; 
        PLTYPE[PLWC[0]] = 0; # INDICATES THIS IS A COUPLER STMT        #
        END 
      PLNID1[PLWC[0]] = CRNT$NID; 
      PLHNAME[PLWC[0]] = " "; #BLANK FILL HOST NAME BY DEFAULT# 
      FOR I=FSTKID2 STEP 1 UNTIL STWC[0]
      DO
        BEGIN 
        B<STKWID[I],1>KWD$MAP = 1;     # SET BIT FOR KEYWORD           #
        IF NOT STVLERR[I] 
        THEN
          BEGIN 
          IF STKWID[I] LS KID"NODE" 
            OR STKWID[I] GR KID"LOC"
          THEN
            GOTO ERR$CP;
          ELSE
            GOTO CPL$PAR[STKWID[I]];
  
NODE$ID:                     # PARAMETER IS - NODE                     #
          NODEVAL = STVALNUM[I];
          CHKNODE(NODEVAL,MX$NODE,UNQFLG,INRFLG);   #CK NODE NUMBER  #
          IF UNQFLG AND INRFLG
          THEN
            PLHNID[PLWC[0]] = STVALNUM[I];
          CRNT$CPL = STLABEL[1];
          CRNT$CNID = STVALNUM[I];
          TEST I; 
  
HNAM$ID:                      # NEXT PARAMETER = HNAME                 #
          PLHNAME[PLWC[0]] = STVALNAM[I]; 
          CRNT$HNAM = STVALNAM[I];
          IF PLNAME[PLWC[0]] EQ PLHNAME[PLWC[0]]
          THEN
            NDLEM2(ERR122,STLNUM[0],HNAME$PAR); 
          TEST I; 
  
LOC$ID: 
                             # NEXT PARAMETER = LOC                    #
          LOC$PAR = STVALNAM[I];       # SAVE LOC VALUE                #
          IF STVALNAM[I] EQ SEC 
          THEN
            PLLOC[PLWC[0]] = 1; 
          TEST I; 
  
ERR$CP: 
          EPRC2[0] = "CPLERPR"; 
          MESSAGE(ABRTMSG2,0);
          ABORT;
          END 
        END # I LOOP #
      IF B<KID"NODE",1>KWD$MAP NQ 1 
      THEN                   # IF NODE NOT SPECIFIED, FLAG ERROR       #
        NDLEM2(ERR103,STLNUM[0],NODE$PAR); # FLAG ERROR                #
      IF (PLLOC[PLWC[0]] EQ PRI1
        AND PRI$USED) 
      OR (PLLOC[PLWC[0]] EQ SEC1
        AND SEC$USED) 
      THEN
        NDLEM2(ERR124,STLNUM[0],LOC$PAR);  # FLAG ERROR-DUP LOC VALUE  #
      IF CPL$CNT GQ 2 
      THEN
        NDLEM2(ERR123,STLNUM[0],COUP$PAR); # FLAG ERROR-TOO MANY CPLER #
      CPL$CNT = CPL$CNT + 1; # INCREMENT COUPLER COUNT                 #
      IF PLLOC[PLWC[0]] EQ PRI1 
      THEN
        PRI$USED = TRUE;
      ELSE
        SEC$USED = TRUE;
      RETURN; 
  
      END # CPLERPR PROC #
  
      CONTROL EJECT;
      PROC LLINKPR;          # PROCESS LOGLINK STATEMENT               #
      BEGIN 
*IF,DEF,IMS 
# 
**    LLINKPR - LOGICAL LINK PROCESSOR
* 
*     S.M. ILMBERGER         81/10/30 
* 
*     PROCESS LOGICAL LINK STATEMENTS AND BUILD LOGLINK$XREF TABLE
* 
*     PROC LLINKPR
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES
*     INVALID KEYWORD I.D.-ABORT FRM LLINKPR
* 
*     METHOD
* 
*     IF NO LABEL ERROR 
*       SAVE LOGLINK NAME IN LOGLINK$XREF TABLE 
*     SAVE CURRENT NPU NODE AND CURRENT COUPLER NODE IN LOGLINK$XREF
*     FOR EACH PARAMETER ON THE LOGLINK LINE
*       SET APPROPRIATE BIT IN KEYWORD BITMAP 
*       IF NO VALUE ERROR 
*         IF PARAMETER IS NCNAME
*           SEARCH NPU$TABLE FOR NPU NAME = NCNAME VALUE
*           IF NCNAME VALUE IS A NPU NAME 
*             SAVE CORRESPONDING NODE ID IN LOGLINK$XREF
*           ELSE
*             SEARCH COUP$TABLE FOR COUPLER NAME = NCNAME 
*             IF NAME DEFINED IN COUPLER TABLE
*               SAVE CORRESPONDING NODE ID IN LOGLINK$XREF
*             ELSE
*               FLAG ERROR - INVALID NCNAME 
*           IF DUPLICATE LOGLINK
*             FLAG ERROR - DUP LOGLINK
*         IF PARAMETER IS DI
*           SET FLAG IN LOGLINK$XREF TABLE
*         IF PARAMETER IS NOT DI OR NCNAME
*           SEND DAYFILE ERROR MESSMGE - ABORT
*     IF NCNAME PARAMETER NOT SPECIFIED 
*       FLAG ERROR - PARAMETER MISSING
*     END 
* 
# 
*ENDIF
  
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKE ENTRY IN PASS 2 ERROR FILE         #
        END 
  
      DEF DI$YES # "YES" #;    # VALUE FOR DI PARAMETER                #
      DEF LLNK$PAR # "LOGLINK" #; 
      DEF NCNM$PAR # "NCNAME" #; # FOR ERROR MSG                       #
  
      ITEM CPL$ENT;          # ENTRY OF COUPLER TABLE                  #
      ITEM FOUND B;          # FOUND FLAG                              #
      ITEM I;                # LOOP COUNTER                            #
      ITEM J;                # LOOP COUNTER                            #
      ITEM KWD$MAP;          # KEYWORD EXISTS MAP                      #
      ITEM NPU$ENT;          # ENTRY OF NPU TABLE                      #
  
      SWITCH LLK$PAR         ERR$LL ,  # UNK     #
                             ERR$LL ,  # NODE    #
                             ERR$LL ,  # VARIANT #
                             ERR$LL ,  # OPGO    #
                             ERR$LL ,  # DMP     #
                             ERR$LL ,  # LLNAME  #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  # HNAME   #
                             ERR$LL ,  # LOC     #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             ERR$LL ,  #         #
                             NCNA$ID,  # NCNAME  #
                             DI$ID  ;  # DI      #
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      KWD$MAP = 0;           # CLEAR KEYWORD EXISTS MAP                #
      LLWC[0] = LLWC[0] + 1;
      IF NOT STLBERR[1] 
      THEN
        BEGIN                # NO LABEL ERROR                          #
        LLNAME[LLWC[0]] = STLABEL[1]; # SET LLINK NAME                 #
        END 
      LLHNID1[LLWC[0]] = CRNT$CNID; 
      LLNID1[LLWC[0]] = CRNT$NID; 
      LLHNAME[LLWC[0]] = CRNT$HNAM; 
      FOR I=FSTKID2 STEP 1 UNTIL STWC[0]
      DO                     # PROCESS REST OF PARAMETERS              #
        BEGIN 
        B<STKWID[I],1>KWD$MAP = 1;     # SET BIT FOR KEYWORD           #
        IF NOT STVLERR[I] 
        THEN
          BEGIN              # NO VALUE ERRORS                         #
          IF STKWID[I] LS KID"NODE" 
            OR STKWID[I] GR KID"DI" 
          THEN
            GOTO ERR$LL;
          ELSE
            GOTO LLK$PAR[STKWID[I]];
  
NCNA$ID:                     # NEXT PARAMETER IS NCNAME                #
          NPU$ENT = 0;
          FOR J=FSTNT STEP NTENTSZ WHILE NPU$ENT EQ 0 
            AND J LQ NTWC[0]
          DO
            BEGIN 
            IF NTNAME[J] EQ STVALNAM[I] 
            THEN
              NPU$ENT = J;
            END # J LOOP #
          IF NPU$ENT GR 0 
          THEN
            BEGIN 
            LLHNID2[LLWC[0]] = NTNID[NPU$ENT];
            LLNID2[LLWC[0]] = NTNID[NPU$ENT]; 
            END 
          ELSE
            BEGIN 
            CPL$ENT = 0;
            FOR J=FSTCT STEP CTENTSZ WHILE CPL$ENT EQ 0 
              AND J LQ CTENT[0] 
            DO
              BEGIN          # CHK COUPLER TABLE                       #
              IF CTNAME[J] EQ STVALNAM[I] 
              THEN
                CPL$ENT = J;
              END   # J LOOP #
            IF CPL$ENT GR 0 
            THEN             # NAME DEFINED IN COUPLER-TABLE           #
              BEGIN 
              LLTYPE[LLWC[0]] = 1;
              LLHNID2[LLWC[0]] = CTHNID[CPL$ENT]; 
              LLNID2[LLWC[0]] = CTNID[CPL$ENT]; 
              END 
            ELSE
              NDLEM2(ERR121,STLNUM[0],NCNM$PAR);
            END 
          IF LLHNID1[LLWC[0]] NQ 0
            AND LLHNID2[LLWC[0]] NQ 0 
          THEN
            BEGIN 
            FOR J=1 STEP 1 UNTIL LLWC[0] - 1
            DO
              BEGIN 
              IF ( LLHNID1[J] EQ LLHNID1[LLWC[0]] 
                AND LLHNID2[J] EQ LLHNID2[LLWC[0]] )
              OR ( LLHNID1[J] EQ LLHNID2[LLWC[0]] 
                AND LLHNID2[J] EQ LLHNID1[LLWC[0]] )
              THEN
                BEGIN 
                NDLEM2(ERR120,STLNUM[0],LLNK$PAR);
                END 
              END   # J LOOP #
            END 
          TEST I; 
  
DI$ID:                       # NEXT PARAMETER = DI                     #
          IF STVALNAM[I] EQ DI$YES
          THEN
            LLST[LLWC[0]] = TRUE; 
          TEST I; 
  
ERR$LL: 
          EPRC2[0] = "LLINKPR"; 
          MESSAGE(ABRTMSG2,0);
          ABORT;
          END 
        END # I LOOP #
  
      IF B<KID"NCNAME",1>KWD$MAP NQ 1 
      THEN                   # IF NCNAME NOT SPECIFIED, FLAG ERROR     #
        NDLEM2(ERR103,STLNUM[0],NCNM$PAR);
  
      IF LLNID1[LLWC[0]] NQ LLNID2[LLWC[0]] AND 
        (LLNID1[LLWC[0]] NQ 0 AND LLNID2[LLWC[0]] NQ 0) 
      THEN                   # IF THIS IS A LOGLINK TO A REMOTE NODE   #
        BEGIN                #   AND NPU NODE I.D.-S WERE DETERMINED   #
        FOUND = FALSE;                 # CLEAR FOUND FLAG              #
        FOR I=1 STEP TNIENTSZ WHILE NOT FOUND AND 
                                    I LQ TNIWC[0] 
        DO                   # FOR EACH ENTRY IN THE TNI TABLE         #
          BEGIN 
          IF (LLNID1[LLWC[0]] EQ TNIN1[I] AND 
              LLNID2[LLWC[0]] EQ TNIN2[I]) OR 
             (LLNID1[LLWC[0]] EQ TNIN2[I] AND 
              LLNID2[LLWC[0]] EQ TNIN1[I])
          THEN                         # IF TRUNK SUPPORTS LOGLINK     #
            BEGIN 
            FOUND = TRUE;              # SET FOUND FLAG                #
            END 
          END 
        IF NOT FOUND                   # IF NO TRUNK FOUND             #
        THEN
          BEGIN              # FLAG ERROR -- NO TRUNK FOR THIS LOGLINK #
          NDLEM2(ERR154,STLNUM[0]," "); 
          END 
        END 
      RETURN; 
  
      END # LLINKPR PROC #
  
      CONTROL EJECT;
      PROC NFILEPR;          # PROCESS NFILE STATEMENT                 #
  
      BEGIN 
*IF,DEF,IMS 
# 
**    NFILEPR -  NFILE STATEMENT PROCESSOR
* 
*     S.M. ILMBERGER         81/11/2
* 
*     PROCESS NFILE STATEMENT 
* 
*     PROC NFILEPR
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES     NONE 
* 
*     METHOD
* 
*     IF NO LABEL ERROR 
*       INITIALIZE NCFFET 
*       SET UP PRFX$TABLE 
*       SET UP VERIFY$ENTRY TABLE 
*       INITIALIZE NCF$INDEX TABLE
*     IF LABEL ERROR
*       CLEAR FILE NAME IN FET
*     END 
* 
# 
*ENDIF
      XREF
        BEGIN 
        FUNC EDATE C(10);    # UNPACK DATE                             #
        FUNC ETIME C(10);    # UNPACK TIME                             #
        PROC PDATE;          # GET PACKED DATE AND TIME                #
        PROC RECALL;         # RETURNS CONTROL WHEN PROCESS FINISHED   #
        PROC REWIND;         # REWINDS SPECIFIED FILE                  #
        PROC VERSION;        # GET VERSION NUMBER OF OPERATING SYSTEM  #
        PROC NDLZFIL;        # ZERO FILL UNUSED PART OF WORD           #
        END 
  
      DEF BLANK # " " #;
  
*CALL NAMLEV
  
      ITEM I;                # LOOP COUNTER                            #
      ITEM J;                # DUMMY VARIBLE                           #
      ITEM TEMP1 U;          # TEMP STORAGE                            #
      ITEM TEMPACDAT U;      # STORAGE FOR PACKED DATE                 #
      ITEM TEMPDAT C(10);    # STORAGE FOR DATE                        #
      ITEM TEMPNAM C(10);    # STORAGE FOR NDLZFIL                     #
      ITEM TEMPT1 C(10);     # STORAGE FOR TIME                        #
      ITEM TEMPTIM U;        # STORAGE FOR TIME                        #
      ITEM TEMPVER C(10);    # STORAGE FOR VERSION NO. OF OP. SYSTEM   #
  
      ARRAY TEMPTAB [0:0] S(1); 
        BEGIN 
        ITEM BC U(0,0,12);   # NUMBER OF 12 BIT BYTES TO RETURN        #
        ITEM SB U(0,12,12);  # STARTING BYTE IN SOURCE FIELD           #
        ITEM BP U(0,24,12);  # STARTING BYTE IN RECEIVING FIELD        #
        ITEM WADDR U(0,42,18); # ADDR OF FIELD RECEIVING VERSION NUMB  #
        END 
  
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      IF NOT STLBERR[1] 
      THEN                   # NO LABEL ERROR                          #
        BEGIN 
        PT$ID[0] = O"7700";  # SET TABLE I.D.                          #
        PTWC[0] = 0014;      # SET WORD COUNT                          #
        PT$FNAME[0] = STLABEL[1];  # SET FILE HEADER NAME              #
        TEMPNAM = STLABEL[1]; 
        NDLZFIL(TEMPNAM);    # ZERO FILL FILE NAME                     #
        NCFLFN[0] = TEMPNAM; # INITIALIZE NCFFET                       #
        REWIND(NCFFET);      # REWIND NCF FILE                         #
        RECALL(NCFFET); 
        PDATE(TEMPACDAT);    # GET PACKED DATE AND TIME                #
        VEWORD1[0] = TEMPACDAT; # SET PAKED DATE-CLEARS REST OF WORD   #
        TEMPTIM = 0;
        B<42,18>TEMPTIM = B<42,18>TEMPACDAT;
        TEMPT1 = ETIME(TEMPTIM);  # UNPACK TIME - STORE IN TABLE       #
        PT$TIME[0] = C<1,8>TEMPT1;
        TEMP1 = 0;
        C<7,3>TEMP1 = C<4,3>TEMPACDAT;     # SET UP FOR EDATE          #
        TEMPDAT = EDATE(TEMP1); # UNPACK DATE                          #
        PT$DATE[0] = C<1,8>TEMPDAT; # SET DATE                         #
        BC[0] = 5;           # SET UP FOR VERSION CALL                 #
        SB[0] = 0;
        BP[0] = 0;
        WADDR[0] = LOC(TEMPVER);
        VERSION(TEMPTAB);    # GET VERSION OF OPERATING SYSTEM         #
        PT$OPS[0] = TEMPVER; # PUT VERSION IN TABLE                    #
        PT$PNAME[0] = "NDLP"; 
        PT$PVER[0] = C<9,3>NAMVER[0]; # SET PROGRAM VERSION NUMBER     #
        PT$PLEV[0] = C<2,3>NAMLV[0]; # SET PROGRAM LEVEL               #
        PT$BLNK1[0] = BLANK; # CLEAR FIELD                             #
        PT$BLNK2[0] = BLANK;
        PT$TITLE[0] = TITLE$WORD[0];
  
      # SET VERIFY TABLE ENTRIES                                       #
  
        VE$ID[0] = "VERSION"; # SET TABLE I.D.                         #
  
#     INITIALIZE NCF DIRECTORY HEADER  #
  
        NCFWORD[0] = 0;      # CLEAR FIRST WORD                        #
        NCF$RECID[0] = O"7000";        # SET RECORD I.D.               #
        NCF$NAM[0] = "NCF";  # SET FILE IDENTIFIER                     #
        NCFWORD1[0] = 0;     # CLEAR SECOND WORD                       #
  
        END 
      ELSE
        BEGIN                # LABEL ERROR EXISTS                      #
        NCFWORD0[0] = 0;     # ZERO FILE NAME IN FET                   #
        END 
      RETURN; 
  
      END   # NFILEPR # 
  
      CONTROL EJECT;
      PROC NPUPR; 
  
      BEGIN 
*IF,DEF,IMS 
# 
**    NPUPR - NPU PROCESSOR 
* 
*     S.M. ILMBERGER         81/11/2
* 
*     PROCESS NPU STATEMENT 
* 
*     PROC NPUPR
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES
*     INVALID KEYWORD I.D.-ABORT FROM NPUPR 
* 
*     METHOD
* 
*     IF NO LABEL ERROR 
*       SAVE NPU NAME IN NPU$XREF TABLE 
*     FOR EACH PARAMETER ON NPU STATEMENT 
*       SET APPROPRIATE BIT IN KEYWORD BITMAP 
*       IF NO VALUE ERROR 
*         STORE PARAMETER VALUE IN APPROPRIATE NPU$XREF ITEM
*       ELSE VALUE ERROR EXISTS 
*         SEND DAYFILE MESSAGE - ABORT
*     IF NODE OR VARIANT PARAMETER NOT SPECIFIED
*       FLAG ERROR - MISSING PARAMETER
*     CK IF SUPERVISORY LINK EXISTS FOR CURRENT NPU 
*     IF NO SUPLINK STATEMENT 
*       COUNT NUMBER OF LOGLINKS
*       IF MORE THAN ONE LOGLINK
*         FLAG ERROR - MISSING SUPLINK STATEMENT
*       IF NO LOGLINKS
*         FLAG ERROR - NO LOGLINKS TO NPU 
*       ELSE
*         MAKE DEFAULT SUPLINK TABLE ENTRY
*     END 
* 
# 
*ENDIF
      XREF
        BEGIN 
        PROC NDLEM2;         # NMAKE ENTRY IN ERROR-FILE-2             #
        END 
  
      DEF LLINK$STMT # "LOGLINK" #; 
      DEF MXNODE # 255 #;    # MAX NODE NUMBER ON NPU STATEMENT        #
      DEF NODE$PARAM # "NODE" # ; 
      DEF SLINK$STMT # "SUPLINK" #; 
      DEF VARI$PARAM # "VARIANT" #; 
  
      ITEM FOUND B; 
      ITEM I;                # LOOP COUNTER                            #
      ITEM INDEX; 
      ITEM KWD$MAP;          # KEYWORD EXISTS BIT MAP                  #
      ITEM NODE$INR B;       # TRUE WHEN NODE NUMBER IS IN RANGE       #
      ITEM NODE$UNQ B;       # TRUE WHEN NODE NUMBER IS UNIQUE         #
      ITEM NUMLLINK I;       # NUMBER OF LOGLINKS TO THIS NPU          #
      ITEM SPL$EXST B;       # TRUE WHEN SUPLINK EXISTS FOR THIS NPU   #
      ITEM DMP$USED B;       # DMP SPECIFIED FLAG                      #
  
      SWITCH NPU$PAR         ERR$NPU,  # UNK     #
                             NODE$ID,  # NODE    #
                             VARI$ID,  # VARIANT #
                             OPGO$ID,  # OPGO    #
                             DMP$ID;   # DMP     #
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      NPWC[0] = NPWC[0] + 1;
      CRNT$CPL = " "; 
      CRNT$CNID = 0;
      CPL$CNT = 0;           # CLEAR COUPLER COUNT                     #
      KWD$MAP = 0;           # CLEAR BIT MAP                           #
      PRI$USED = FALSE;      # CLEAR LOC=PRIMARY SPECIFIED FLAG        #
      SEC$USED = FALSE;      # CLEAR LOC=SECOND SPECIFIED FLAG         #
      DMP$USED = FALSE;      # CLEAR DMP SPECIFIED FLAG                #
      IF NOT STLBERR[1] 
      THEN                   # NO LABEL ERROR EXISTS                   #
        BEGIN 
        NPNAME[NPWC[0]] = STLABEL[1];   # PUT NPU NAME IN NPU$XREF     #
        END 
      FOR I=FSTKID2 STEP 1 UNTIL STWC[0]
      DO
        BEGIN 
        B<STKWID[I],1>KWD$MAP = 1;     # SET BIT FOR KEYWORD           #
        IF NOT STVLERR[I]    # NO VALUE ERROR                          #
        THEN
          BEGIN 
          IF STKWID[I] LS KID"NODE" 
            OR STKWID[I] GR KID"DMP"
          THEN
            GOTO ERR$NPU; 
          ELSE
            GOTO NPU$PAR[STKWID[I]];
  
NODE$ID:                     # NEXT PARAMETER = NODE                   #
          CRNT$NPU = STLABEL[1];
          CRNT$NID = STVALNUM[I]; 
          CHKNODE(CRNT$NID,MXNODE,NODE$UNQ,NODE$INR);   # CK NODE NUMB #
          IF NODE$UNQ AND NODE$INR
          THEN               # NODE NUMBER UNIQUE AND IN RANGE         #
            NPNID[NPWC[0]] = CRNT$NID;     # SET NODE NUM IN NPU$XREF  #
          TEST I; 
  
VARI$ID:                     # NEXT PARAMETER = VARIANT                #
          NPVARNT[NPWC[0]] = STVALNAM[I];     # SET VARIANT NUMBER IN  #
                                              # NPU-XREF-TABLE         #
          TEST I; 
  
OPGO$ID:                     # NEXT PARAMETER = OPGO                   #
          IF STVALNAM[I] EQ "YES" 
          THEN
            NPOPGO[NPWC[0]] = TRUE;  # SET OPGO FLAG IN NPU$XREF TABLE #
          TEST I; 
DMP$ID:                      # NEXT PARAMETER = DMP                    #
          DMP$USED = TRUE;   # SET DMP SPECIFIED FLAG TO TRUE          #
          IF STVALNAM[I] EQ "YES"      # IF VALUE IS -YES-             #
          THEN
            BEGIN 
            NPDMP[NPWC[0]] = TRUE;     # SET DMP FLAG IN ENTRY         #
            END 
          TEST I; 
  
ERR$NPU:  
          EPRC2[0] = "NPUPR"; 
          MESSAGE(ABRTMSG2,0);
          ABORT;
          END 
        END # I LOOP #
      IF NOT DMP$USED        # IF DMP NOT SPECIFIED                    #
      THEN
        BEGIN 
        NPDMP[NPWC[0]] = TRUE; # SET DMP FLAG IN ENTRY                 #
        END 
      IF B<KID"NODE",1>KWD$MAP NQ 1 
      THEN                   # IF -NODE- NOT SPECIFIED                 #
        NDLEM2(ERR103,STLNUM[0],NODE$PARAM); # FLAG ERROR              #
      IF B<KID"VARIANT",1>KWD$MAP NQ 1
      THEN                   # IF -VARIANT- NOT SPECIFIED              #
        NDLEM2(ERR103,STLNUM[0],VARI$PARAM); # FLAG ERROR              #
      SPL$EXST = FALSE; 
      FOUND = FALSE;
      FOR I=FSTNT STEP NTENTSZ UNTIL NTWC[0]
      DO
        BEGIN                # SEE IF SUPLINK EXISTS                   #
        IF NOT FOUND
        THEN
          BEGIN 
          IF NTNAME[I] EQ NPNAME[NPWC[0]] 
          THEN
            BEGIN 
            FOUND = TRUE; 
            IF NTSPLK[I]
            THEN
              SPL$EXST = TRUE;
            END 
          END 
        END 
      IF NOT SPL$EXST 
      THEN                   # NO SUPLINK EXISTS                       #
        BEGIN                # CHECK FOR MORE THAN 1 LOGLINK           #
        NUMLLINK = 0; 
        FOR I=FSTLLT STEP LLTENTSZ UNTIL LLTENT[0]
        DO                   # COUNT LLINKS                            #
          BEGIN 
          IF LLTNID[I] EQ CRNT$NID
          THEN
            BEGIN 
            NUMLLINK = NUMLLINK + 1;
            INDEX = I;       # INDEX FOR LOGLINK TABLE                 #
            END 
          END  # I LOOP # 
        IF NUMLLINK GR 1
        THEN                 # MORE THAN 1 LOGLINK EXISTS AND NO SLINK #
          NDLEM2(ERR126,STLNUM[0],SLINK$STMT);
        ELSE
          BEGIN 
          IF NUMLLINK EQ 0
          THEN               # NO LOGLINK TO THIS NPU                  #
            NDLEM2(ERR127,STLNUM[0],LLINK$STMT);
          ELSE               # ONLY 1 LOGLINK TO THIS NPU              #
            SLINKXR(INDEX);  # MAKE DEFAULT SUPLINK TABLE ENTRY        #
          END 
        END 
      RETURN; 
  
      END   # NPUPR PROC #
  
      CONTROL EJECT;
      PROC RNGNODE(NODEVAL,MAX,RNGFLG); 
      # CHECK THAT NODE IS WITHIN RANGE                                #
      BEGIN  # RNGNODE PROC # 
*IF,DEF,IMS 
# 
**    PRGNODE - CK RANGE OF NODE
* 
*     S.M. ILMBERGER         81/11/2
* 
*     CHECK THAT NODE VALUE IS WITHIN RANGE 
* 
*     PROC RNGNODE(NODEVAL,MAX,RNGFLG)
* 
*     ENTRY        NODEVAL - NODE NUMBER
*                  MAX - MAXIMUM VALUE FOR NODE VALUE 
* 
*     EXIT         RNGFLG - FLAG INDICATING IF NODE VALUE IS IN RANGE 
* 
*     MESSAGES     NONE 
* 
*     METHOD
* 
*     IF NODEVAL IS GREATER THAN MAX OR LESS THAN 0 
*       SEND ERROR MESSAGE
*       SET RNGFLG TO FALSE 
*     ELSE
*       SET RNGFLG TO TRUE
*     END 
* 
# 
*ENDIF
  
      ITEM CNODE C(10);      # CHARACTER STORAGE FOR NODE VALUE        #
      ITEM NODEVAL I;        # NODE NUMBER TO CHECK                    #
      ITEM MAX     I;        # MAX NUMBER FOR NODEVAL                  #
      ITEM RNGFLG  B;        # FLAG INDICATING NODE IS IN RANGE        #
                             # TRUE WHEN IN RANGE                      #
  
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN ERROR-FILE-2             #
        FUNC XCDD C(10);     # CONVERT INTEGER TO DEC DISPLAY CODE     #
        END 
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      IF NODEVAL GR MAX OR NODEVAL LQ 0 
      THEN
        BEGIN                # NODE NUMBER IS NOT IN RANGE             #
        CNODE = XCDD(NODEVAL);     # CONVERT INTEGER NODE TO CHARCATER #
        NDLEM2(ERR100,STLNUM[0],CNODE);   # SEND ERROR MSG             #
        RNGFLG = FALSE;      # SET NODE IN RANGE FLAG TO FALSE         #
        END 
      ELSE
        RNGFLG = TRUE;
      RETURN;                # *** RETURN ***                          #
  
      END   # RNGNODE PROC #
  
      CONTROL EJECT;
      PROC SLINKPR; 
      BEGIN                  # PROCESS SUPLINK STATEMENT               #
*IF,DEF,IMS 
# 
**    SLINKPR - SUPLINK PROCESSOR 
* 
*     S.M. ILMBERGER         81/11/2
* 
*     PROCESS SUPLINK STATEMENT 
* 
*     PROC SLINKPR
* 
*     ENTRY        NONE 
* 
*     EXIT         NONE 
* 
*     MESSAGES     NONE 
* 
*     METHOD
* 
*     FOR EACH KEYWORD ON STATEMENT 
*       IF NO VALUE ERROR 
*         IF KEYWORD = LLNAME 
*           SEARCH LOGLINK TABLE FOR LLNAME VALUE 
*           IF LLNAME IN LOGLINK TABLE
*             IF CURRENT NPU NODE MATCHES LOGLINK ENTRY 
*               BUILD SUPLINK TABLE ENTRY 
*             ELSE
*               SEND ERROR MESSAGE - NO LOGLINK TO THIS NPU 
*           ELSE
*             LLNAME NOT VALID LOGLINK
*     IF LLNAME PARAMETER NOT SPECIFIED 
*       SEND ERROR MESSAGE - REQUIRED PARAMETER MISSING 
*     END 
* 
# 
*ENDIF
  
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
  
      DEF LLNAME$PAR # "LLNAME" #; # USED FOR NDLEM2                   #
  
      ITEM I;                # LOOP COUNTER                            #
      ITEM J;                # LOOP COUNTER                            #
      ITEM LL$ENT;           # LOGLINK TABLE ENTRY THAT MATCHES LLNAME #
      ITEM LLNAME$FLG B;     # LLNAME PARAMETER IS SPECIFIED IF SET    #
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      LLNAME$FLG = FALSE; 
      FOR I=FSTKID1 STEP 1 UNTIL STWC[0]
      DO
        BEGIN 
        LLNAME$FLG = TRUE;   # SET LLNAME SPECIFIED FLAG               #
        IF NOT STVLERR[I] 
        THEN                 # NO VALUE ERROR EXISTS                   #
          BEGIN 
          IF STKWID[I] EQ KID"LLNAME" 
          THEN               # NEXT KEYWORD = LLNAME                   #
            BEGIN 
            LL$ENT = 0; 
            FOR J=FSTLLT STEP LLTENTSZ UNTIL LLTENT[0]
            DO               # SEARCH LOGLINK TABLE FOR SAME LLNAME    #
              BEGIN 
              IF LLTNAME[J] EQ STVALNAM[I]
              THEN
                LL$ENT = J; 
              END 
            IF LL$ENT NQ 0
            THEN             # FOUND LLNAME IN LOGLINK TABLE           #
              BEGIN 
              IF LLTNID[LL$ENT] EQ CRNT$NID 
              THEN           # CURRENT NPU NODE MATCHES LOGLINK ENTRY  #
                SLINKXR(LL$ENT); # BUILD SUPLINK TABLE ENTRY           #
              ELSE
                NDLEM2(ERR128,STLNUM[0],STVALNAM[I]); 
              END 
            ELSE             # LLNAME NOT IN LOGLINK TABLE             #
              NDLEM2(ERR129,STLNUM[0],STVALNAM[I]); 
            END 
          END   # NO VALUE ERROR #
        END  # I LOOP # 
      IF NOT LLNAME$FLG      # LLNAME PARAMETER NOT SPECIFIED ON SUPLNK#
      THEN                   # STATEMENT                               #
        NDLEM2(ERR103,STLNUM[0],LLNAME$PAR);
      RETURN; 
  
      END   # SLINKPR PROC #
  
      CONTROL EJECT;
      PROC SLINKXR(LLENT);   # MAKES ENTRIES IN SUPLINK TABLE          #
      BEGIN 
*IF,DEF,IMS 
# 
**    SLINKXR - SUPLINK CROSS REFERINCE 
* 
*     S.M. ILMBERGER         81/11/2
* 
*     MAKE ENTRIES IN SUPLINK TABLE 
* 
*     PROC SLINKXR(LLENT) 
* 
*     ENTRY        LLENT - NUMBER ASSOCIATED W/LOGLINK TABLE ENTRY
* 
*     EXIT         NONE 
* 
*     MESSAGES     NONE 
* 
*     METHOD
* 
*     SET SUPLINK TABLE NAME AND HOST NODE FROM LOGLINK ENTRY 
*     SEARCH COUPLER TABLE TO SEE IF SUPLINK IS LOCAL OR REMOTE 
*     SET SUPLINK TYPE
*     END 
* 
# 
*ENDIF
  
      ITEM LLENT;            # NUMBER ASSOCIATED W/LLINK TABLE ENTRY   #
  
      DEF REMOTE # 1 #;      # NPU IS REMOTE TO NPU                    #
  
      ITEM K;                # LOOP COUNTER                            #
      ITEM MATCH B;          # INDICATES COUPLER TABLE ENTRY AND       #
                             # SUPLINK TABLE ENTRY MATCH               #
      ITEM NENTSL;           # NEXT ENTRY IN SUPLINK TABLE             #
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      NENTSL = SLTWC[0] + 1; #  MAKE ENTRIES IN SUPLINK TABLE          #
      SLTNAME[NENTSL] = LLTNAME[LLENT]; 
      SLTHNID[NENTSL] = LLTHNID[LLENT]; 
      SLTNID[NENTSL] = CRNT$NID;
      MATCH = FALSE;
      FOR K=FSTCT STEP CTENTSZ WHILE K LQ CTENT[0] AND NOT MATCH
      DO                      # SEARCH COUPLER TABLE TO DETERMINE IF   #
        BEGIN                 # SUPLINK IS LOCAL OR REMOTE TO THIS NPU #
        IF CTHNID[K] EQ SLTHNID[NENTSL] 
          AND CTNID[K] EQ CRNT$NID
        THEN
          BEGIN 
          MATCH = TRUE; 
          END 
        END 
      IF NOT MATCH
      THEN
        SLTTYPE[NENTSL] = REMOTE; # SET SUPLINK TYPE TO "REMOTE"       #
      SLTWC[0] = SLTWC[0] + SLTENTSZ; 
      RETURN; 
  
      END   # SLINKXR # 
  
      CONTROL EJECT;
#                                                                      #
#                            CODE BEGINS HERE                          #
#                                                                      #
  
      FOR I=0 WHILE STMT$STAT EQ TRNS$OK #STMT IS NETWORK ELEMENT TYPE #
        AND (STMT$TYPE[STSTID[0]] EQ "NETWORK" # AND NO READ ERRORS    #
          OR STMT$TYPE[STSTID[0]] EQ "TRUNK") 
      DO
        BEGIN 
        READW(STFET,STMT$TABLE[1],STWC[0],STMT$STAT); # READ FULL STMT #
        IF STMT$STAT NQ TRNS$OK 
        THEN
          GOTO ERR$NET; 
        ELSE
          GOTO NET$ELEM[STSTID[0]]; 
  
NFILE$ST: 
        PTWORD0[0] = 0;      # CLEARS WORD 0 OF PRFX$TABLE TABLE       #
        PTWORD1[0] = 0;      # CLEARS WORD 1 OF PRFX$TABLE TABLE       #
        VEWORD0[0] = 0;      # CLEARS VERIFY$ENTRY TABLE               #
        VEWORD1[0] = 0; 
        NFILEPR;             # CALL NFILE STATEMENT PROCESSOR          #
        FWAWSA = LOC(PTWORD0[0]); #SAVE 1ST WORD ADDRESS OF FH TABLE   #
        NDLWNCF(TABLE"FH",FWAWSA,LEN$FH$TAB); # WRITE FILE HEADER REC  #
        GOTO RDNXT; 
  
NPU$ST: 
        NPWORD[NPWC[0]+1] = 0; #CLEAR NEXT 2 WORDS OF NPU$XREF TABLE   #
        NPWORD1[NPWC[0]+1] = 0; 
        NPUPR;               # CALLS NPU STATEMENT PROCESSOR           #
        GOTO RDNXT; 
  
SLINK$ST: 
        IF ( SLTWC[0]+1+SLTENTSZ ) GR SLT$LENG
        THEN                 # NOT ENOUGH SPACE IN SUPLINK$TAB         #
          BEGIN 
          SSTATS(P<SUPLINK$TABL>,SLTENTSZ); # ALLOCATE 1 MORE WORD FOR #
          END                            # SUPLINK TABLE               #
        SLTWORD[SLTWC[0]+1] = 0; # CLEARS NEW WORD OF TABLE            #
        SLINKPR;             # CALL SUPLINK STMT PROCESSOR             #
        GOTO RDNXT; 
  
COUP$ST:  
        IF ( (PLWC[0]*PLENTSZ)+1+PLENTSZ ) GR PL$LENG 
        THEN                 # NEED MORE SPACE IN PLINK$XREF TABLE     #
          BEGIN 
          SSTATS(P<PLINK$XREF>,PLENTSZ); # ALLOCATE 2 WORDS            #
          END 
        PLWORD[PLWC[0]+1] = 0; # CLEAR NEW TABLE ENTRIES               #
        PLWORD1[PLWC[0]+1] = 0; 
        CPLERPR;             # CALL COUPLER PROCESSOR                  #
        GOTO RDNXT; 
  
LLINK$ST: 
        LLWORD[LLWC[0]+1] = 0; # CLEAR NEW TABLE ENTRIES               #
        LLWORD1[LLWC[0]+1] = 0; 
        LLINKPR;               # CALL LOGLINK STMT PROCESSOR           #
        GOTO RDNXT; 
  
TRNK$ST:  
        IF ( (PLWC[0]*PLENTSZ)+1+PLENTSZ ) GR PL$LENG 
        THEN                   # NEED MORE ROOM IN PLINK$XREF TABLE    #
          BEGIN 
          SSTATS(P<PLINK$XREF>,PLENTSZ); # ALLOCATE 2 MORE WORDS       #
          END 
        PLWORD[PLWC[0]+1] = 0; # CLEAR NEW TABLE ENTRIES               #
        PLWORD1[PLWC[0]+1] = 0; 
        NDLTRNK;             # CALL TRUNK STMT PROCESSOR               #
        GOTO RDNXT; 
  
ERR$NET:  
        EPRC1[0] = "NCFNET";
        MESSAGE(ABRTMSG1,0);
        ABORT;
        TEST I; 
  
RDNXT:  
        READW(STFET,STMT$TABLE,1,STMT$STAT);   # READ NXT STMT HEADER  #
        TEST I; 
        END # I LOOP #
      RETURN; 
  
      END # NDLNFNT # 
      TERM
