*DECK,INFOPE
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQCMD 
      PROC INFOPE( (FILENAME) );
        BEGIN    # INFOPE # 
# 
**    INFOPE     OPEN INCLUDE FILE. 
* 
*     OPENS A NEW INCLUDE FILE. 
* 
*     PROC INFOPE( (FILENAME) ) 
* 
*     ENTRY      FILENAME = NAME OF INCLUDE FILE
*                READINGINF = TRUE, IF ANOTHER INCLUDE FILE IS OPEN 
*                RETURNINF = TRUE, IF CURRENT FILE SHOULD BE RETURNED.
* 
*     EXIT       READINGINF = TRUE, IF FILENAME IS FOUND
*                RETURNINF = TRUE, IF FILENAME WAS NOT A LOCAL FILE 
*                INCLFILE = FILENAME, IF FOUND. 
* 
*     PROCESS    IF READING-FILE: 
*                  CALL INFCLO TO CLOSE CURRENT FILE. 
*                CALL FILINFO TO CHECK FOR LOCAL FILE 
*                IF FILE NOT LOCAL: 
*                  CALL FINDPF TO GET/ATTACH FILE 
*                  IF FILE NOT FOUND: 
*                    ISSUE MESSAGE TO OPERATOR
*                    RETURN.
*                ALLOCATE CMM BLOCK FOR FET AND BUFFER
*                SET COMANDS-READ-COUNT TO ZERO 
*                REWIND FILE
*                READ FILE
*                SET READING-FILE.
* 
# 
  
      ITEM FILENAME  C(7);         # INCLUDE FILE NAME #
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CMMALF;               # ALLOCATE CMM BLOCK # 
        PROC FILINFO;              # ISSUE FILE INFORMATION REQUEST # 
        FUNC FINDPF    U;          # FIND PERMANENT FILE #
        PROC INFCLO;               # CLOSE INCLUDE FILE # 
        PROC NAME;                 # DEBUG CODE # 
        PROC OPRMSG;               # SEND MESSAGE TO OPERATOR # 
        PROC READ;                 # ISSUE READ FUNCTION #
        PROC REWIND;               # ISSUE REWIND FUNCTION #
        FUNC XDTB      C(10);      # DELETE TRAILING BLANKS # 
        FUNC XSFW      C(10);      # SPACE FILL WORD #
        END 
  
# 
****  XREF END
# 
  
      DEF INFBUFLEN #129#;         # INCLUDE FILE CIO BUFFER LENGTH # 
      DEF INFFETLEN #06#;          # INCLUDE FILE FET LENGTH #
  
      DEF LEMSGIFN  #31#; 
      ARRAY EMSGIFN S(4); 
        BEGIN 
        ITEM $DEMSGIFN  C(00,00,LEMSGIFN) = 
                 ["INCLUDE FILE XXXXXXX NOT FOUND."]; 
        ITEM EMSGIFNLFN C(01,18,07);
        END 
  
      DEF LFILPARM  #05#;          # LENGTH OF FILINFO BLOCK #
      ARRAY FILPARM S(LFILPARM);
        BEGIN 
        ITEM FIL$LFN   C(00,00,07);  # LFN #
        ITEM FIL$LEN   U(00,42,06);  # LENGTH OF BLOCK #
        ITEM FIL$STAT  U(00,48,12); 
        ITEM FIL$WD2   U(01,00,60);  # STATUS/FLAGS # 
        END 
  
      ITEM I          I;           # STATUS VARIABLE #
  
        $BEGIN
        NAME("INFOPE");            # DEBUG CODE # 
        $END
  
      IF READINGINF                # IF READING FILE #
      THEN
        BEGIN 
        INFCLO;                    # CLOSE CURRENT FILE # 
        END 
  
      FILENAME = XDTB(FILENAME);   # REMOVE ANY TRAILING BLANKS # 
      FIL$LFN  = FILENAME;
      FIL$LEN  = LFILPARM;
      FIL$STAT = 0; 
      FIL$WD2  = 0; 
      INCLFILE = XSFW(FILENAME);   # SPACE FILL WORD #
      FILINFO(FILPARM); 
      IF FIL$WD2 EQ 0              # IF FILE NOT LOCAL #
      THEN
        BEGIN 
        IF FINDPF(FILENAME) NE 0   # IF PERMANENT FILE NOT FOUND #
        THEN
          BEGIN 
          EMSGIFNLFN = INCLFILE;
          INCLFILE = " "; 
          OPRMSG(LOC(EMSGIFN),LEMSGIFN);
          RETURN; 
          END 
  
        RETURNINF = TRUE;          # FILE WAS NOT LOCAL # 
        END 
  
      CMMALF( (INFFETLEN+INFBUFLEN), 0, CMMN, INFFET);
      P<FET> = INFFET;
      FOR I = 0 STEP 1 UNTIL INFFETLEN-1
      DO
        BEGIN 
        FETWD[I] = 0; 
        END 
  
      FETLFNC = FILENAME; 
      FETCOMP = TRUE; 
      FETEP   = TRUE; 
      FETFETL = INFFETLEN - 5;
      FETFIR  = INFFET + INFFETLEN; 
      FETIN   = FETFIR; 
      FETOUT  = FETFIR; 
      FETLIM  = FETFIR + INFBUFLEN; 
      REWIND(FET, 1); 
      READ(FET, 0); 
      READINGINF = TRUE;
      CMDSREAD = 0; 
  
      END  # INFOPE # 
    TERM
