*DECK DB$SR1H 
USETEXT MDBCMTX 
USETEXT MD10CTX 
USETEXT UTMPTTX 
USETEXT CUGBATX 
      PROC DB$SR1H; 
      BEGIN 
 #
* *   DB$SR1H - CHANGE AREA LOG OPTIONS          PAGE  1
* *   H.S.WOO                                    04/12/81 
* *   BOB MCALLESTER - TABLE SEGMENTATION        03/30/84 
* 
* DC  PURPOSE 
* 
*     REPLACE THE LOG OPTIONS OF THE CURRENT AREA IN THE PERMANENT FILE 
*     INFORMATION TABLE (PIT).  IF THE CURRENT VERSION IS MASTER, THEN
*     REPLACE THE LOG OPTION FLAGS IN THE AREA INFORMATION TABLE (AIT). 
* 
* DC  ENTRY CONDITIONS
* 
*     ARINFOBP    - ADDRESS OF BLOCK FOR AREA INFORMATION TABLE 
*     AREAORD     - ORDINAL OF CURRENT AREA IN THE AREA DIRECTORY 
*     AREACNT     - NO OF ENTRIES IN THE AREA DIRECTORY 
*     PITBP       - ADDRESS OF BLOCK FOR PIT
*     VERINFBP    - ADDRESS OF BLOCK FOR VIT
*     VERSORD     - ORDINAL OF CURRENT VERSION IN VERSION DIRECTORY 
* 
* DC  EXIT CONDITIONS 
* 
*     AREA LOG OPTIONS HAVE BEEN REPLACED IN THE PERMANENT FILE 
*     INFORMATION TABLE. EXIT IS ALWAYS TO DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$NO;             # STD NO RETURN                     #
      XREF PROC DB$UAOS;           # ADJUST TABLE OFFSET               #
# 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDAIFLAGS  - FLAGS IN THE AREA INFORMATION TABLE
*     MDPITFLAGS - FLAGS IN THE PERMANENT FILE INFORMATION TABLE
* 
* DC  DECRIPTIONS 
* 
*     IN A MODIFICATION RUN, IF AN AREA IS BEING CHANGED, THEN AN 
*     INDEX FILE FOR THAT AREA MAY BE OPTIONALLY SPECIFIED.  IF IT IS 
*     SPECIFIED, A CHECK IS MADE FOR THE SPECIFICATION OF LOG OPTIONS 
*     AFTER IT (BY DB$SNTX).  IF THE LOG OPTIONS ARE CHANGED, THEY WILL 
*     BE REPLACED IN THE PERMANENT FILE INFORMATION TABLE FOR THE 
*     CURRENT AREA, AND IN THE AREA INFORMATION TABLE IF THE CURRENT
*     VERSION NAME IS MASTER. 
 #
# 
*     LOCAL VARIABLES 
# 
      ITEM OFFSET;                 # OFFSET AS ADJUSTED FOR SEGMENTS   #
  
  
      BASED ARRAY VERINFO [0:0] S(DFMDVIEN);    # VERSION INFO TABLE   #
        BEGIN 
*CALL MDVITDCLS 
        END 
  
      BASED ARRAY MDARINFO [0:0] S(1);   # AREA INFORMATION TABLE      #
        BEGIN 
*CALL MDARIDCLS 
        END 
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM FLAGS    U(0,00,06);  # AREA LEVEL FLAGS                  #
        ITEM INDEX    B(0,00,01);  # INDICATE EXISTENCE OF INDEX FILE  #
        ITEM BIREC    B(0,01,01);  # BEFORE IMAGE RECORD FLAG          #
        ITEM AIREC    B(0,02,01);  # AFTER IMAGE RECORD FLAG           #
        ITEM BIBLK    B(0,03,01);  # BEFORE IMAGE BLOCK FLAG           #
        ITEM RECAREA  B(0,04,01);  # RECOVER AREA FLAG                 #
        END 
  
  
  
#                                                                      #
# E X E C U T A B L E   C O D E   B E G I N S   H E R E                #
#                                                                      #
  
      IF AREAFLAGS[0] EQ 0         # IF OPTIONS NOT CHANGED THEN       #
        AND CHANGFLAGS[0] EQ 0     # RETURN                            #
      THEN
        BEGIN 
        DB$NO;
  
        END 
  
      AREACHGF = TRUE;             # SET OPTION CHANGE FLAG FOR AREA   #
      P<TLC> = B<42,18>VERINFBP;   # TLC HEADER FOR VIT                #
      OFFSET = (VERSORD - 1) * AREACNT * DFMDVIEN;
  
      DB$UAOS(OFFSET);             # ADJUST OFFSET FOR SWAPPED SEGMENTS#
  
      P<VERINFO> = LOC(TLC) + TLCHLEN[0] + DFVITHDR + OFFSET; 
  
      P<TLC> = B<42,18>PITBP;      # TLC HEADER FOR THE PIT            #
      OFFSET = MDVITFOFF[AREAORD -1] - 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 
  
      FLAGS[0] = MDPITFLAGS[0]; 
  
      IF ARLOGBIRN[0]              # LOG BEFORE IMAGE RECORD OPTION ON #
      THEN
        BEGIN 
        BIREC = ARLOGBIR[0];
        END 
  
      IF ARLOGAIRN[0]              # LOG AFTER IMAGE RECORD OPTION ON  #
      THEN
        BEGIN 
        AIREC = ARLOGAIR[0];
        END 
  
      IF ARLOGBIBN[0]              # LOG BEFORE IMAGE BLOCK OPTION ON  #
      THEN
        BEGIN 
        BIBLK = ARLOGBIB[0];
        END 
  
      MDPITFLAGS[0] = FLAGS[0];    # REPLACE LOG OPTIONS               #
  
      IF VERSORD EQ 1              # CURRENT VERSION IS MASTER         #
      THEN
        BEGIN                      # POSITION AREA INFORMATION TABLE# 
        P<MDARINFO> = ARINFOBP + 1 + (AREAORD - 1) * DFMDAIEN;
        MDAIFLAGS[0] = FLAGS[0];
        END 
  
      DB$NO;
  
      END 
TERM
