*DECK DB$CKUP 
USETEXT CDCSCTX 
      FUNC DB$CKUP B; 
      BEGIN 
 #
* *   DB$CKUP - CHECK TRANSACTION UPDATE COUNT   PAGE  1
* *   W P CEAGLIO                                DATE  10/15/80 
* 
* DC  PURPOSE 
* 
*     TO VERIFY THAT THE TRANSACTION UPDATE LIMIT IS NOT EXCEEDED.
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
* 
*     NONE
* 
*     ASSUMPTIONS 
* 
*     P<TQT> SET FOR RUN-UNIT.
*     SALX SET FOR SCHEMA.
* 
* DC  ENTRY CONDITIONS
* 
*     NORMAL   - FUNCTION SET TO *TRUE*.  UPDATE COUNT IN ART ENTRY IS
*                INCREMENTED BY 1.
* 
*     ABNORMAL - FUNCTION SET TO *FALSE*. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DEL$ - DELETE CONTROL SYMBIONT 
*     DB$REW$ - REWRITE CONTROL SYMBIONT
*     DB$WR2$ - WRITE CONTROL SYMBIONT
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;     # GENERATE FLOW POINT                     #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     ART - ART ENTRY CORRESPONDING TO ORDINAL IN TQARTX. 
* 
* DC  DESCRIPTION 
* 
*     -  INITIALIZE FUNCTION RESULT TO *TRUE*.
* 
*     -  IF ART ORDINAL IN TQT IS NON-ZERO, POINT TO ART USING ADDRESS
*        IN SAL ENTRY.  EXTRACT THE MAXIMUM UPDATE COUNT STORED IN THE
*        ART HEADER.  EXTRACT THE CURRENT UPDATE COUNT FROM THE ART 
*        ENTRY CORRESPONDING TO THE ORDINAL IN THE TQT, AND INCREMENT BY
*        1.  IF THE UPDATED COUNT EXCEEDS THE MAXIMUM, THEN SET THE 
*        FUNCTION RESULT TO *FALSE*, ELSE STORE THE NEW UPDATE COUNT IN 
*        THE ART ENTRY. 
* 
 #
  
#     LOCAL VARIABLES                                                  #
  
      ITEM CURUPDAT     I;   # CURRENT TRANSACTION UPDATE COUNT        #
      ITEM MAXUPDAT     I;   # MAXIMUM TRANSACTION UPDATE LIMIT        #
  
*CALL ARTDCLS 
  
  
  
  
# S T A R T  O F  D B $ C K U P  E X E C U T A B L E  C O D E          #
  
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("CKUP");     # GENERATE FLOW POINT                     #
      CONTROL ENDIF;
  
#     ASSUME FUNCTION RESULT IS TRUE.                                  #
  
      DB$CKUP = TRUE; 
  
#     IF THE RUN-UNIT IS IN TRANSACTION MODE (ART INDEX NONZERO), THEN #
#     COMPARE THE INCREMENTED UPDATE COUNT IN THE ART ENTRY TO THE     #
#     MAXIMUM RECORDED IN THE ART HEADER.  IF THE MAXIMUM IS EXCEEDED, #
#     SET THE FUNCTION RESULT TO FALSE, OTHERWISE, STORE THE UPDATED   #
#     COUNT IN THE ART ENTRY FOR THE RUN-UNIT.                         #
  
      IF TQARTX[0] NQ 0 
      THEN
        BEGIN 
        P<ART> = SAARTPTR[SALX];
        MAXUPDAT = ARNTUP[0]; 
        CURUPDAT = ARCURUP[TQARTX[0]] + 1;
        IF CURUPDAT GR MAXUPDAT 
        THEN
          BEGIN 
          DB$CKUP = FALSE;
          END 
        ELSE
          BEGIN 
          ARCURUP[TQARTX[0]] = CURUPDAT;
          END 
        END 
  
      RETURN; 
  
      END 
      TERM
