*DECK NDLMAIN 
USETEXT NDLTBLT 
      PROC NDLMAIN; 
      BEGIN 
*IF,DEF,IMS 
# 
**    NDLMAIN - NDLP MAIN PROCEDURE.
* 
*     D.K. ENDO    81/10/12 
* 
*     THIS IS THE MAIN PROCEDURE FOR NDLP.
* 
*     PROC NDLMAIN
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     MESSAGES     LFN - NO ERRORS ENCOUNTERED. 
*                  LFN - XXX ERRORS AND YY WARNINGS.
*                  NDLP COMPLETE. 
* 
*     METHOD
* 
*     LOAD INITIALIZATION OVERLAY.
*     IF THIS IS A CREATION RUN,
*     THEN, 
*       FOR EACH DIVISION UNTIL EOI,
*         LOAD PASS 1 OVERLAY.
*         IF THIS IS NCF DIVISION,
*         THEN
*           LOAD NCF OVERLAY. 
*         OTHERWISE,
*           IF THIS IS LCF DIVISION,
*             LOAD LCF OVERLAY. 
*         LOAD LIST OVERLAY.
*         SEND ERROR MESSAGE TO DAYFILE 
*       RETURN ALL THE SCRATCH FILES
*     OTHERWISE 
*       LOAD LIST OVERLAY.
*     SEND NDLP COMPLETE MESSAGE TO DAYFILE.
* 
# 
*ENDIF
# 
****  PROC NDLMAIN - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC ABORT;          # ABORTS JOB ON REQUEST                   #
        PROC NDLOVLD;        # LOADS OVERLAY                           #
        PROC RECALL;         # RETURNS CONTROL WHEN RECALL BIT IS SET  #
        PROC RETERN;         # RETURNS FILE ON REQUEST                 #
        PROC MESSAGE;        # PUTS MESSAGE INTO DAYFILE               #
        FUNC XCDD C(10);     # CONVERT INTEGER TO DECIMAL DISPLAY CODE #
        FUNC XSFW C(10);     # BLANK FILL A ZERO FILLED NAME           #
        END 
# 
****
# 
      CONTROL PRESET; 
      CONTROL NOLIST;        # DATANDL, ER1CNDL, FETSNDL, OVLCNDL      #
*CALL DATANDL 
*CALL ER1CNDL 
*CALL FETSNDL 
*CALL OVLCNDL 
      CONTROL LIST; 
      ITEM CRNT$LFN C(10);   # TEMPORARY FOR CURRENT FILE NAME         #
      ITEM CTEMP C(10);      # CHARACTER TEMPORARY                     #
      ITEM I;                # USED IN MAIN FOR LOOP                   #
  
      DEF MXERR # 999 #;     # MAXIMUM NUMBER OF ERRORS                #
  
      ARRAY E$MSG1 [00:00] S(4);       # LFN - NO ERRORS ENCOUNTERED.  #
        BEGIN 
        ITEM E$MSG1$TEXT C(00,00,33) =
                             ["         - NO ERRORS ENCOUNTERED."]; 
        ITEM E$MSG1$LFN  C(00,06,07);  # FILE NAME                     #
        ITEM E$MSG1$ZBYT C(03,18,12) = [0]; # ZERO BYTE TERMINATOR     #
        END 
      ARRAY E$MSG2 [00:00] S(4);       # LFN - X ERRORS AND Y WARNINGS.#
        BEGIN 
        ITEM E$MSG2$TEXT C(00,00,39) =
                            ["         -     ERRORS AND     WARNINGS."];
        ITEM E$MSG2$LFN  C(00,06,07);  # FILE NAME                     #
        ITEM E$MSG2$ECNT C(01,06,03);  # ERROR COUNT FIELD             #
        ITEM E$MSG2$WCNT C(02,36,03);  # WARNING COUNT FIELD           #
        ITEM E$MSG2$ZBYT C(03,48,12) = [0];  # ZERO BYTE TERMINATOR    #
        END 
      ARRAY NDLCOMP S(2); 
        ITEM
          COMTEXT C(0,0,15) = [" NDLP COMPLETE."],
          COMZERO U(1,30,30) = [0]; 
  
#                            NDLMAIN CODE BEGINS HERE                  #
#                                                                      #
      NTAB = MXTBLS;         # SET NTAB TO FORCE LOADING OF TABLES CMN #
      NDLOVLD(OVL$ENT[OVLY"INIT"]);# LOAD AND EXECUTE INIT OVERLAY     #
      IF CRERUN 
      THEN                   # THIS IS A CREATION RUN                  #
        BEGIN 
        FOR I=0 STEP 1 WHILE NOT EOINP DO 
          BEGIN              # EXECUTE UNTIL END OF INPUT IS FOUND     #
          NDLOVLD(OVL$ENT[OVLY"PSS1"]);# LOAD AND EXECUTE PASS 1       #
          CRNT$LFN = " ";    # CLEAR CURRENT FILE NAME                 #
          IF NCFDIV          # PROCESS NCF STATEMENTS                  #
          THEN
            BEGIN 
            NDLOVLD(OVL$ENT[OVLY"NCF"]);# LOAD NCF PROCESSOR           #
            CRNT$LFN = XSFW(NCFLFN[0]); # SAVE NCF FILE NAME           #
            END 
          ELSE               # NOT AN NCF DIVISION                     #
            BEGIN 
            IF LCFDIV        # PROCESS LCF STATEMENTS                  #
            THEN
              BEGIN 
              NDLOVLD(OVL$ENT[OVLY"LCF"]); # LOAD LCF PROCESSOR        #
              CRNT$LFN = XSFW(LCFLFN[0]);  # SAVE LCF FILE NAME        #
              END 
            END 
          NDLOVLD(OVL$ENT[OVLY"LIST"]);# LOAD AND EXECUTE LIST ROUTINE #
          IF ERRCNT EQ 0 AND
             WARNCNT EQ 0 
          THEN               # IF THERE ARE NO ERRORS OR WARNINGS      #
            BEGIN 
            E$MSG1$LFN[0] = CRNT$LFN;  # PUT FILE NAME IN MESSAGE      #
            MESSAGE(E$MSG1,0);         # SENT MSG TO DAYFILE           #
            END 
          ELSE               # ERRORS AND/OR WARNINGS ENCOUNTERED      #
            BEGIN 
            E$MSG2$LFN[0] = CRNT$LFN;        # PUT FILE NAME IN MSG    #
            IF ERRCNT GR MXERR
            THEN                             # ERROR COUNT EXCEEDS MAX #
              BEGIN 
              ERRCNT = MXERR;                # SET ERROR COUNT TO MAX  #
              END 
            CTEMP = XCDD(ERRCNT);            # CONVERT TO DISPLAY CODE #
            E$MSG2$ECNT[0] = C<7,3>CTEMP;    # PUT ERROR COUNT IN MSG  #
            CTEMP = XCDD(WARNCNT);           # CONVERT TO DISPLAY CODE #
            E$MSG2$WCNT[0] = C<7,3>CTEMP;    # PUT WARNING COUNT IN MSG#
            MESSAGE(E$MSG2,0);         # SEND MESSAGE TO DAYFILE       #
            IF ERRCNT GR 0             # IF FATAL ERROR EXIST          #
            THEN
              BEGIN 
              ABRTFLG = TRUE;          # SET ABORT FLAG                #
              END 
            END 
          END 
        RETERN(ERR1FET);               # RETURN SCRATCH FILES          #
        RETERN(ERR2FET);
        RETERN(ESIFET); 
        RETERN(LRFET);
        RETERN(SECFET); 
        RETERN(STFET);
        RECALL(STFET);
        END  #CREATION RUN# 
      ELSE                   #THIS IS A FILE SUMMARY RUN               #
        BEGIN 
        NDLOVLD(OVL$ENT[OVLY"LIST"]);  # LOAD AND EXECUTE LIST ROUTINE #
        END 
      MESSAGE(NDLCOMP,0);    # SEND -NDLP COMPLETE- DAYFILE MESSAGE    #
      IF ABRTFLG             # IF ABORT FLAG IS SET                    #
      THEN
        BEGIN 
        ABORT;               # ABORT JOB                               #
        END 
      RETURN; 
      END # NDLMAIN # 
      TERM
