*DECK DB$SR29 
USETEXT MD10CTX 
USETEXT UTMPTTX 
USETEXT MDBCMTX 
      PROC DB$SR29; 
      BEGIN 
 #
* *   DB$SR29 - PROCESS PF INFO FOR AREA WITH    PAGE  1
* *             SAME AS MASTER
* *   J. G. SERPA                                DATE  07/26/80 
* *   BOB MCALLESTER                             DATE  03/30/84 
* 
* DC  PURPOSE 
* 
*     SET PERMANENT FILE INFORMATION FOR THIS AREA THE SAME 
*     AS THE ONE FOR THE MASTER VERSION.
* 
* DC  ENTRY CONDITIONS
* 
*     AREACNT - CONTAINS THE NUMBER OF ENTRIES IN THE AREA DIRECTORY. 
*     AREANAM - CONTAINS THE NAME OF THE CURRENT AREA.
*     AREAORD - CONTAINS THE AREA ID. 
*     VERSCNT - CONTAINS THE NUMBER OF ENTRIES IN THE VERSION DIRECTORY.
* 
* DC  EXIT CONDITIONS 
* 
*     PFN OFFSET IN VIT FOR THIS AREA HAS BEEN SET TO POINT TO
*     THE SAME PIT ENTRY AS THE ONE POINTED TO BY THE MASTER. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$UAOS;           # ADJUST OFFSET FOR SWAPPED SEGMENTS#
      XREF PROC DB$NO;             # SYNTAX TABLE DRIVER -NO- RETURN   #
# 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     TLC HEADER
* 
* DC  DESCRIPTION 
* 
*     SEARCH THE VIT FOR THE MASTER VERSION ENTRY FOR THIS AREA, AND
*     THEN SET THE PFN OFFSET FOR THE AREA IN THE CURRENT VIT TO THE
*     SAME AS THE ONE FOR THE MASTER VERSION. 
*     UPDATE THE PIT FIELD THAT CONTAINS THE NUMBER OF VERSIONS THAT
*     USE THE SAME PERMANENT FILE INFORMATION (MDPITNOVER). 
*     ACCESSING THE PIT ENTRY MAY REQUIRE READING A SEGMENT OF THE PIT
*     TABLE FROM THE SWAP FILE. 
*     RETURN IS TO DB$NO. 
 #
  
      BASED ARRAY VERINFO [0:0] S(DFMDVIEN);  # VERSION INFO TABLE     #
        BEGIN 
*CALL MDVITDCLS              VERSION INFORMATION TABLE
        END 
  
  
#     LOCAL ITEMS                                                      #
  
      ITEM I;                      # INDEX VARIABLE                    #
      ITEM J;                      # INDEX VARIABLE                    #
      ITEM OFFSET;                 # OFFSET TO PIT ENTRY WITHIN TABLE  #
  
  
  
#     B E G I N   D B $ S R 2 9   E X E C U T A B L E   C O D E .      #
  
  
      P<TLC> = B<42,18>VERINFBP;
# 
*     DB$UAOS WILL READ THE SEGMENT CONTAINING THE MASTER VERSION AND 
*     ADJUST THE CORRESPONDING TABLE OFFSET.
# 
      OFFSET = (AREAORD -1) * DFMDVIEN; 
      DB$UAOS(OFFSET);
      J = OFFSET / DFMDVIEN;       # CONVERT AN OFFSET TO A SUBSCRIPT  #
# 
*     THE VIT IS ALLOCATED WITH AREACNT ENTRIES AT A TIME.
*     THIS ASSURES THAT THE LAST AREACNT ENTRIES THAT WERE ALLOCATED
*     ARE STILL IN THE BUILD SEGMENT AT (TLCUSED - (AREACNT*DFMDVIEN)). 
# 
      I = (TLCUSED[0] / DFMDVIEN) - AREACNT + AREAORD -1; 
# 
*     COPY THE MASTER VIT ENTRY TO THE CURRENT VERSION. 
# 
      P<VERINFO> = LOC(TLC) + TLCHLEN[0]; 
      MDVIT1WRD[I] = MDVIT1WRD[J];
      MDVIT2WRD[I] = MDVIT2WRD[J];
# 
*     ADJUST THE NUMBER OF VERSIONS ACCESSING THIS FILE (IN THE PIT). 
# 
      P<TLC> = B<42,18>PITBP;              # TLC HEADER FOR THE PIT   # 
      OFFSET = MDVITFOFF[I] - DFPITHDR; 
  
      DB$UAOS(OFFSET);             # ADJUST OFFSET FOR SWAPPED SEGMENTS#
  
                                   # SET PERM FILE INFO POINTER        #
      P<PFINFO> = LOC(TLC) + TLCHLEN[0] + DFPITHDR + OFFSET;
      IF OFFSET + DFPITHDR LS TLCBSBW[0]
      THEN
        BEGIN 
        TLCDSMF[0] = TRUE;         # SET DISK SEGMENT MODIFIED FLAG    #
        END 
  
      MDPITNOVER[0] = MDPITNOVER[0] + 1;    # INCREMENT NUMBER OF      #
                                            # VERSIONS FIELD           #
      DB$NO;                       # EXIT TO DB$STD                    #
  
      END 
      TERM
