*DECK OPITRCE 
USETEXT NIPDEF
USETEXT BPIPBUF 
USETEXT DBGBUF
PROC OPITRCE((LFN),(FRWD));  # INITIALIZE NIP DEBUG LOG FILE           #
STARTIMS; 
 #
*1DC  OPITRCE 
* 
*         1. SUBROUTINE      AUTHOR              DATE 
*            OPITRCE         E. GEE              86/02/03 
* 
*         2. FUNCTIONAL DESCRIPTION.
*            INITIALIZE NIP DEBUG LOG FILE. 
* 
*         3. METHOD USED. 
*            IF JOB RECORD FILE NEEDS TO BE READ, 
*              RESET FET FOR JOB RECORD FILE. 
*              IF JOB RECORD FILE NEEDS TO BE REWOUND,
*                CALL REWIND TO REWIND JOB RECORD FILE. 
*              IF NO I/O ERROR, 
*                CALL READ TO READ IN JOB RECORD. 
*              IF I/O ERROR,
*                CALL OMSG TO ISSUE INFORMATIVE DAYFILE MESSAGE.
*              ELSE (NO I/O ERROR OCCURRED),
*                CALL WRITER TO WRITE JOB RECORD AND EOR TO ZZZZZDN.
*                IF I/O ERROR ON ZZZZZDN FILE,
*                  CALL OMSG TO ISSUE INFORMATIVE DAYFILE MESSAGE.
*                  CALL OPRETN TO RETURN BAD ZZZZZDN FILE.
*            RESET FET POINTERS.
*            CALL ILOFS TO SET FLUSH FET LIST.
*            CALL ITRACE TO SET UP HEADER ENTRY IN CIO BUFFER.
*            CALL WRITER TO FLUSH CIO BUFFER AND WRITE END OF RECORD. 
*            IF NO I/O ERROR, 
*              CALL DAYTIME TO GET CURRENT CLOCK TIME.
*              CALL WRITEO TO COPY CLOCK TIME TO CIO BUFFER.
*            ELSE (I/O ERROR ON DEBUG LOG FILE),
*              CALL OMSG TO ISSUE INFORMATIVE DAYFILE MESSAGE.
* 
*         4. ENTRY PARAMETERS.
*            LFN             NAME OF FILE WITH JOB RECORD IF NEEDED 
*            FRWD            REWIND FILE FLAG 
*                            = 0 REWIND FILE BEFORE READ
*                            = 1 NO REWIND
* 
*         5. EXIT PARAMETERS. 
*            BPAT[0]         NONZERO IF I/O ERROR 
* 
*         6. COMMON DECKS CALLED AND SYMPL TEXT USED. 
*            BPIPBUF         FET AND CIO BUFFER FOR DEBUG LOG FILE
*            DBGBUF          DEBUG BUFFERS
*            NIPDEF          NIP CONSTANT DEFINITIONS 
* 
*         7. SUBROUTINES AND MACROS CALLED. 
*            DAYTIME         GET CURRENT TIME 
*            ILOFS           EXECUTE SETLOF MACRO 
*            ITRACE          CREATE HEADER ENTRY IN CIO BUFFER
*            OMSG            ISSUE DAYFILE MESSAGE
*            OPRETN          RETURN FILE
*            READ            READ FILE
*            REWIND          REWIND FILE
*            WRITEO          WRITE ONE WORD TO CIO BUFFER 
*            WRITER          WRITE END OF RECORD TO FILE
*            XTRACE          RECORD PROCEDURE CALL
* 
*         8. DAYFILE MESSAGES.
*            " CIO ERROR XXB, LFN = ZZZZZZZ." 
* 
 #
STOPIMS;
      BEGIN 
# 
      INPUT PARAMETERS
# 
      ITEM LFN C(10);                  # NAME OF LOCAL JOB RECORD      #
      ITEM FRWD B;                     # REWIND FLAG                   #
# 
      EXTERNAL ROUTINES CALLED
# 
      XREF
        BEGIN 
        PROC DAYTIME;                  # GET CURRENT TIME              #
        PROC ILOFS;                    # EXECUTE SETLOF MACRO          #
        PROC ITRACE;                   # WRITE HDR ENTRY TO CIO BUFFER #
        PROC OMSG;                     # ISSUE DAYFILE MESSAGE         #
        PROC OPRETN;                   # RETURN FILE                   #
        PROC READ;                     # READ FILE                     #
        PROC REWIND;                   # REWIND FILE                   #
        PROC WRITEO;                   # WRITE 1 WD FROM WSA TO CIO BUF#
        PROC WRITER;                   # WRITE END OF REC TO FILE      #
        PROC XTRACE;                   # RECORD PROCEDURE CALL         #
        END 
# 
      LOCAL VARIABLES 
# 
      CONTROL IFEQ ZZDN,1;
  
      ITEM DTIME;                      # WORD TO CONTAIN CURRENT TIME  #
  
      ARRAY WRMSG S(4);      # ERROR MESSAGE IF WRITE FAILS            #
        BEGIN 
        ITEM WRMSG1   C(0,0,30) = [" CIO ERROR XXB, LFN = ZZZZZDN."]; 
        ITEM WRMSGAT  U(1,6,12);  # ABNORMAL TERMINATION CODE FROM CIO #
        ITEM WRMSGLN  C(2,12,7);  # NAME OF FILE WITH I/O ERROR        #
        ITEM WRMSGE   U(4,00,60) = [0]; 
        END 
  
      CONTROL FI; 
  
#**********************************************************************#
# 
      EXECUTABLE CODE BEGINS HERE 
# 
      CONTROL IFEQ ZZDN,1;
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("OPITRC");              # RECORD PROCEDURE CALL         #
      CONTROL FI; 
# 
      IF MC IS NONZERO, THERE IS A JOB RECORD FILE WHICH MUST BE READ 
# 
      IF MC NQ 0
      THEN                             # JOB RECORD FILE TO READ       #
        BEGIN 
        BPNAME[0] = LFN;               # INITIALIZE LOCAL FILE NAME    #
        BPIN[0] = BPFIRS[0];           # INITIALIZE FET IN POINTER     #
        BPOUT[0] = BPFIRS[0];          # INITIALIZE FET OUT POINTER    #
        BPAT[0] = 0;                   # INITIALIZE ABNORMAL TERM FIELD#
        IF NOT FRWD 
        THEN                           # NEED TO REWIND JOB RECORD FILE#
          BEGIN 
          REWIND(BPFET);               # REWIND JOB RECORD FILE        #
          END 
        IF BPAT[0] EQ 0 
        THEN                           # NO I/O ERR ON JOB RECORD FILE #
          BEGIN 
          READ(BPFET,1);               # READ JOB RECORD INTO CIO BUF  #
          END 
        IF BPAT[0] EQ 0 
        THEN                           # NO I/O ERR ON JOB RECORD FILE #
          BEGIN 
          BPNAME[0] = "ZZZZZDN";       # NAME OF NIP DEBUG LOG FILE    #
          WRITER(BPFET,1);             # WRITE JOB REC PLUS EOR TO FILE#
          IF BPAT[0] NQ 0 
          THEN                         # I/O ERR ON NIP DEBUG LOG FILE #
            BEGIN 
            WRMSGAT[0] = ((BPAT[0]/8)+27)*64 + BPAT[0]-(BPAT[0]/8)*8+27;
            WRMSGLN[0] = BPNAME[0];    # NAME OF FILE WITH I/O ERROR   #
            OMSG(WRMSG,0);             # ISSUE DAYFILE MESSAGE         #
            OPRETN(BPFET);             # RETURN BAD FILE               #
            END 
          END 
        ELSE                           # I/O ERR ON JOB RECORD FILE    #
          BEGIN 
          WRMSGAT[0] = ((BPAT[0]/8)+27)*64 + BPAT[0] - (BPAT[0]/8)*8+27;
          WRMSGLN[0] = BPNAME[0];      # NAME OF FILE WITH I/O ERROR   #
          OMSG(WRMSG,0);               # ISSUE DAYFILE MESSAGE         #
          END 
        END 
# 
      REINITIALIZE FET
# 
      BPNAME[0] = "ZZZZZDN";           # INITIALIZE LOCAL FILE NAME    #
      BPIN[0] = BPFIRS[0];             # INITIALIZE FET IN POINTER     #
      BPOUT[0] = BPFIRS[0];            # INITIALIZE FET OUT POINTER    #
      BPAT[0] = 0;                     # INITIALIZE ABNORMAL TERM FIELD#
  
      MSGCNT = 0;                      # REINITIALIZE MESSAGE COUNT    #
  
      ILOFS;                           # EXECUTE SETLOF MACRO          #
      ITRACE(BPFET);                   # WRITE HDR ENTRY TO CIO BUFFER #
      WRITER(BPFET,1);                 # FLUSH CIO BUF AND WRITE EOR   #
# 
,     CHECK FOR I/O ERROR AFTER WRITING END OF RECORD 
# 
      IF BPAT[0] EQ 0 
      THEN                             # NO I/O ERROR ON ZZZZZDN FILE  #
        BEGIN 
        DAYTIME(DTIME);                # GET CURRENT TIME              #
        WRITEO(BPFET,1);               # WRITE CURRENT TIME TO CIO BUF #
        END 
      ELSE                             # I/O ERROR OCCURRED ON ZZZZZDN #
        BEGIN 
# 
        ISSUE INFORMATIVE DAYFILE MESSAGE 
# 
        WRMSGAT[0] = ((BPAT[0]/8)+27)*64 + BPAT[0] - (BPAT[0]/8)*8+27;
        WRMSGLN[0] = BPNAME[0];        # NAME OF FILE WITH I/O ERROR   #
        OMSG(WRMSG,0);                 # ISSUE DAYFILE MESSAGE         #
        END 
      CONTROL FI; 
  
      RETURN; 
      END 
TERM
