*DECK FCSIPPF 
USETEXT TEXTFCS;
      PROC FCSIPPF; 
*CALL COPYRITE
# TITLE FCSIPPF - PROCESS PROLOG FILE.                                 #
  
      BEGIN                            # FCSIPPF                       #
  
# 
**    FCSIPPF - PROCESS PROLOG FILE.
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE PROCESSES THE USER SPECIFIED PROLOG FILE.
* 
*     PROC FCSIPPF
* 
*     ENTRY   FTPPROLOG  = PROLOG FILE NAME.
* 
*     EXIT    PROLOG FILE PROCESSED.
* 
*     NOTES   ANY MBT ENTRIES CREATED AFTER THE PROLOG FILE MBT 
*             ENTRY WILL NEED MODIFICATION OF THEIR FET POINTERS AND
*             GLOBAL INDEX AFTER THE MBT ENTRY FOR THE PROLOG FILE
*             IS DEALLOCATED. 
* 
*     METHOD  IF PROLOG FILE PROCESSING DESIRED THEN
*               VALIDATE PROLOG FILE CHARACTERISTICS. 
*               INITIALIZE MBT ENTRY FOR PROLOG FILE. 
*               IF PROLOG FILE NOT LOCAL THEN 
*                 ATTEMPT TO *GET* PROLOG FILE. 
*                 IF PROLOG FILE NOT LOCAL THEN 
*                   ATTEMPT TO *ATTACH* PROLOG FILE.
*               IF PROLOG FILE LOCAL THEN 
*                 PROCESS ALL USER COMMANDS IN PROLOG FILE UNTIL
*                 EOR/EOI/EOF OR *QUIT* USER COMMAND PROCESSED. 
*               RETURN PROLOG FILE IF IT WAS NOT ORIGINALLY LOCAL.
*               DEALLOCATE MBT ENTRY FOR PROLOG FILE. 
* 
# 
  
# 
****  PROC FCSIPPF - XREF LIST
# 
      XREF
        BEGIN 
        FUNC CBTZ C(10);               # CONVERT BLANKS TO ZERO        #
        FUNC FATTACH I;                # ATTACH A PERMANENT FILE       #
        PROC FCSCPES;                  # COMMAND EXECUTION SEQUENCER   #
        PROC FCSMDTS;                  # DEALLOCATE TABLE SPACE        #
        PROC FCSOFTO;                  # FLUSH TERMINAL OUTPUT         #
        PROC FCSOWOF;                  # WRITE TO OUTPUT FILE          #
        PROC FCSRPUC;                  # PARSE USER COMMAND            #
        PROC FCSRRUC;                  # READ USER COMMAND             #
        FUNC FCSUIMB B;                # INITIALIZE MBT ENTRY          #
        FUNC FCSUVFC B;                # VALIDATE FILE CHARACTERISTICS #
        FUNC FGET I;                   # GET A PERMANENT FILE          #
        PROC FSTATUS;                  # CHECK IF LOCAL FILE EXISTS    #
        PROC RECALL;                   # WAIT TILL OPERATION COMPLETES #
        PROC RETERN;                   # RETURN A LOCAL FILE           #
        PROC REWIND;                   # REWIND A LOCAL FILE           #
        END 
# 
****
# 
      ITEM KEEPLOCAL     B;            # KEEP PROLOG FILE LOCAL FLAG   #
      ITEM LOCAL         B;            # PROLOG FILE LOCAL FLAG        #
      ITEM RESULT        I;            # RESULT FROM *READC* MACRO     #
      ITEM SPACING       U = O"55550000000000000000"; 
  
      ARRAY NOPRLG [00:00] S(5);
        BEGIN 
        ITEM NOP$TEXT    C(00,00,43) =
       ["--WARNING--  PROLOG FILE NOT FOUND OR BUSY."]; 
        ITEM NOP$ZBYTE   U(04,18,42) = [0]; 
        END 
  
      ARRAY NPPRLG [00:00] S(5);
        BEGIN 
        ITEM NPR$TEXT    C(00,00,40) =
       ["--WARNING--  PROLOG FILE NOT PROCESSED. "];
        ITEM NPR$ZBYTE   U(04,00,60) = [0]; 
        END 
  
      ARRAY STPRLG [00:00] S(5);
        BEGIN 
        ITEM STP$TEXT    C(00,00,41) =
       ["--INFORMATIVE--  PROCESSING PROLOG FILE. "]; 
        ITEM STP$ZBYTE   U(04,06,54) = [0]; 
        END 
  
      ARRAY NDPRLG [00:00] S(6);
        BEGIN 
        ITEM NDP$TEXT    C(00,00,50) =
       ["--INFORMATIVE--  PROLOG FILE PROCESSING COMPLETE. "];
        ITEM NDP$ZBYTE   U(05,00,60) = [0]; 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF FTPPROLOG EQ "0" 
      THEN
        BEGIN                          # USER WANTS NO PROLOG FILE     #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     VALIDATE FILE CHARACTERISTICS.
# 
      IF NOT FCSUVFC (CBTZ (FTPPROLOG), FALSE, TRUE, FALSE) 
      THEN
        BEGIN                          # INVALID FILE CHARACTERISTICS  #
        FCSOWOF (NPPRLG, INTERNAL$);   # WRITE MESSAGE TO OUTPUT FILE  #
        FCSOWOF (SPACING, INTERNAL$);  # WRITE BLANK LINE              #
        FCSOFTO;                       # FLUSH TERMINAL OUTPUT         #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     INITIALIZE MBT ENTRY FOR PROLOG FILE AND DETERMINE STATUS.
# 
      IF FCSUIMB (FTPROLOG, CBTZ (FTPPROLOG)) 
      THEN
        BEGIN 
        MBPX  = MBTX;                  # SAVE PROLOG FILE MBT INDEX    #
        LOCAL = TRUE;                  # DEFAULT TO LOCAL FILE EXISTS  #
        IF NOT ((FTPINTER) AND
                (FTPPROLOG EQ "INPUT" OR FTPPROLOG EQ "OUTPUT"))
        THEN
          BEGIN                        # NOT INTERACTIVE INPUT/OUTPUT  #
          FSTATUS (MBT[MBPX]);         # DETERMINE FILE STATUS         #
          LOCAL = MBT$FSTAT[MBPX] NQ 0;# DETERMINE IF LOCAL FILE       #
          END 
        KEEPLOCAL = LOCAL;             # KEEP PROLOG FILE LOCAL        #
        IF LOCAL
        THEN
          BEGIN                        # PROLOG FILE LOCAL             #
          REWIND (MBT[MBPX]);          # REWIND PROLOG FILE            #
          RECALL (MBT[MBPX]);          # WAIT TILL OPERATION COMPLETES #
          IF (FTPINTER) AND 
             (FTPPROLOG EQ "INPUT" OR FTPPROLOG EQ "OUTPUT") AND
             (MBT$DT[MBPX] EQ 0)
          THEN
            BEGIN                      # *INPUT* / *OUTPUT* NOT THERE  #
            MBT$DT[MBPX] = "TT";       # ASSIGN IT TO THE TERMINAL     #
            END 
          MBT$STAT[MBPX] = 1;          # CLEAR STATUS + SET COMPLETION #
          END 
        ELSE
          BEGIN                        # PROLOG FILE NOT LOCAL         #
          MBT$PFN[MBPX] = 
            MBT$LFN[MBPX];             # STORE PERMANENT FILE NAME     #
          LOCAL = FGET (MBT[MBPX])
                  EQ 0;                # ATTEMPT TO GET PROLOG FILE    #
          IF NOT LOCAL
          THEN
            BEGIN                      # GET UNSUCCESSFUL              #
            LOCAL = FATTACH (MBT[MBPX]) 
                    EQ 0;              # ATTEMPT TO ATTACH PROLOG FILE #
            END 
          END 
# 
*     PROCESS THE PROLOG FILE IF IT EXISTS. 
# 
        IF NOT LOCAL
        THEN
          BEGIN                        # PROLOG FILE NOT FOUND OR BUSY #
          FCSOWOF (NOPRLG, INTERNAL$); # WRITE MESSAGE TO OUTPUT FILE  #
          FCSOWOF (SPACING, INTERNAL$);# WRITE BLANK LINE              #
          FCSOFTO;                     # FLUSH TERMINAL OUTPUT         #
          END 
        ELSE
          BEGIN                        # PROLOG FILE FOUND             #
          FCSOWOF (STPRLG, INTERNAL$); # WRITE MESSAGE TO OUTPUT FILE  #
          FCSOFTO;                     # FLUSH TERMINAL OUTPUT         #
          FOR RESULT = 0
            WHILE (FTPSTATE LAN FTPUQUIT EQ 0) AND
                  (RESULT EQ 0) DO
            BEGIN                      # LOOP UNTIL QUIT OR EOR/EOF/EOI#
            FCSRRUC (MBPX, FALSE,      # READ NEXT USER COMMAND        #
                     RESULT);          # (DO NOT WRITE TO OUTPUT FILE) #
            IF (RESULT EQ 0) OR 
               (USCLEN NQ 0)
            THEN
              BEGIN                    # NOT EOR/EOF/EOI OR SOME DATA  #
              RESULT = 0;              # CLEAR ANY EOR/EOF/EOI SEEN    #
              FCSRPUC;                 # PARSE USER COMMAND            #
              FCSCPES;                 # PROCESS USER COMMAND          #
              FCSOFTO;                 # FLUSH TERMINAL OUTPUT         #
              END 
            END 
# 
*     RETURN PROLOG FILE IF IT WAS NOT ORIGINALLY LOCAL.
# 
          IF NOT KEEPLOCAL
          THEN
            BEGIN                      # FILE NOT ORIGINALLY LOCAL     #
            RETERN (MBT[MBPX]);        # RETURN PROLOG FILE            #
            END 
          FCSOWOF (NDPRLG, INTERNAL$); # WRITE MESSAGE TO OUTPUT FILE  #
          FCSOWOF (SPACING, INTERNAL$);# WRITE BLANK LINE              #
          FCSOFTO;                     # FLUSH TERMINAL OUTPUT         #
          END 
  
        FCSMDTS (P<MBT>, MBPX*MBTESIZ$, 
                 MBTESIZ$);            # DEALLOCATE PROLOG MBT ENTRY   #
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSIPPF                       #
  
      TERM
