*DECK DB$POLE 
USETEXT CDCSCTX 
USETEXT JLPCMTX 
      PROC DB$POLE; 
      BEGIN 
 #
* *   DB$POLE - POSITION JOURNAL LOG TO EOI      PAGE  1
* *   W P CEAGLIO / P A MURRAY                   DATE  05/18/81 
* 
* DC  PURPOSE 
* 
*     TO POSITION THE JOURNAL LOG FOR A SPECIFIED SCHEMA IMMEDIATELY
*     AFTER END-OF-INFORMATION. 
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     SALX IS SET.
*     SAL 
*        SAJLFPTR POINTS TO THE JOURNAL LOG QUEUE.
*     JOURNAL LOG IS ATTACHED.
*     P<JLREC> POINTS TO THE JOURNAL LOG HEADER RECORD. 
*     P<RCB> SET SO THAT DB$MBA CALLS CAN BE DONE.
* 
* DC  EXIT CONDITIONS 
* 
*     THE JOURNAL LOG IS POSITIONED AT END-OF-INFORMATION.
* 
* DC  CALLING ROUTINES
* 
*     DB$JFIN      INITIALIZE JOURNAL LOG FILE
* 
* DC  CALLED ROUTINES 
# 
      XREF FUNC DB$CBIN I;         # CONVERT DISPLAY CODE TO BINARY    #
      XREF PROC DB$FLOP;           # RECORD A FLOW POINT               #
      XREF PROC DB$MBA;            # ALLOCATE TEMPORARY CMM BLOCK      #
      XREF PROC DB$MBF;            # RELEASE TEMPORARY CMM BLOCK       #
      XREF FUNC DB$RDLG;           # READ RECORD FROM JOURNAL LOG      #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     I/O BUFFER IN JOURNAL LOG QUEUE.
* 
* DC  DESCRIPTION 
* 
*     -  POINT TO THE FET IN THE SAL JOURNAL LOG QUEUE. 
* 
*     -  ALLOCATE A TEMPORARY I/O BUFFER (WSA) FOR THE READ.
* 
*     -  INITIALIZE THE FET.
* 
*     -  READ THE JOURNAL LOG RECORD BY RECORD UNTIL EOI IS REACHED.
* 
*     -  RELEASE THE TEMPORARY I/O BUFFER.
* 
 #
  
  
  
#     LOCAL VARIABLES                                                  #
  
      ITEM BUFLOC    I;            # JOURNAL LOG BUFFER LOCATION       #
      ITEM IX        I;            # SCRATCH - FOR LOOPS               #
      ITEM LOGRL     I;            # JOURNAL LOG RECORD LENGTH         #
  
*CALL JFQUEDCLS 
  
      BASED ARRAY FET;             # FOR JOURNAL LOG FET               #
*CALL FETDCLS 
  
  
  
  
# S T A R T   O F   D B $ P O L E   E X E C U T A B L E   C O D E      #
  
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("POLE");
      CONTROL ENDIF;
  
#     POINT TO THE FET IN THE SAL JOURNAL LOG QUEUE.                   #
  
      P<JFQUEUE> = SAJLFPTR[SALX];
      P<FET> = LOC(JFQFET[0]);
  
#     INITIALIZE FILE POSITION TO THE LAST RECOVERY POINT.             #
  
      FETRR[0] = DB$CBIN(JLFRLRPTL[0],10,10); 
      FETSA[0] = FETRR[0];
      FETSR[0] = 0; 
  
#     ALLOCATE I/O WORKING STORAGE AREA FOR READ OF JOURNAL LOG.       #
  
      DB$MBA((SASCMAXLOG[SALX]+9)/10, P<JLREC>);
  
#     INITIALIZE THE FET.                                              #
  
      BUFLOC = LOC(FET) + DFFETLEN + DFJLHDREC; 
      FETCODE[0] = DFFIRSTC;
      FETFIRST[0] = BUFLOC; 
      FETIN[0] = BUFLOC;
      FETOUT[0] = BUFLOC; 
      FETLIMIT[0] = BUFLOC + DFLOGBUF;
  
#     READ THE JOURNAL LOG RECORD BY RECORD UNTIL EOI IS REACHED.      #
  
      LOGRL = 0;
      FOR IX = IX 
        WHILE LOGRL GQ 0
      DO
        BEGIN 
        LOGRL = DB$RDLG(P<FET>,P<JLREC>); 
        IF LOGRL EQ DFRDLGEOR 
        THEN                 # AN END-OF-RECORD BOUNDARY HAS BEEN FOUND#
          BEGIN 
          LOGRL = 0;
          FETCODE[0] = DFFIRSTC;  # REINITIALIZE FETCODE AND CONTINUE  #
          END 
        END 
  
#     RELEASE TEMPORARY WORKING STORAGE AREA.                          #
  
      DB$MBF(P<JLREC>); 
  
      RETURN; 
  
      END 
      TERM; 
