*DECK DB$SR90 
USETEXT CUGBATX 
USETEXT MD10CTX 
USETEXT UTMPTTX 
USETEXT MDBCMTX 
      PROC DB$SR90; 
      BEGIN 
 #
* *   DB$SR90 - CHANGE CURRENT FILE TYPE         PAGE  1
* *             PERMANENT FILE INFORMATION
* *   J. G. SERPA                                DATE  11/03/80 
* 
* DC  PURPOSE 
* 
*     REPLACE PERMANENT FILE INFORMATION FOR: 
*       BASIC RECOVERY FILE        BRF
*       JOURNAL LOG FILE           JLF
*       QUICK RECOVERY FILE        QRF
*       RESTART IDENTIFIER FILE    RIF
* 
* DC  ENTRY CONDITIONS
* 
*     CURFILTYP - CONTAINS CURRENT FILE TYPE
*     MDPFINFO  - PERMANENT FILE INFORMATION
* 
* DC  EXIT CONDITIONS 
* 
*     PERMANENT FILE INFORMATION FOR THE FILE DEFINED BY CURFILTYP
*     HAS BEEN REPLACED.
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$DIAG;           # ISSUE DIAGNOSTIC                  #
      XREF PROC DB$MDPR;           # REPLACE PF INFO IN THE PFN TABLE  #
      XREF PROC DB$NO;             # SYNTAX TABLE DRIVER -NO- RETURN   #
# 
* 
* DC  DESCRIPTION 
* 
*     A STATUS SWITCH IS USED TO SET SITOFFSET TO THE APPROPRIATE 
*     OFFSET FROM THE BEGINNING OF THE SCHEMA INFORMATION TABLE TO THE
*     PERMANENT FILE INFORMATION FOR THE CURRENT FILE TYPE. THEN ALL
*     CODE PATHS JOIN AT LABEL ENDPROC. 
*     IF SITOFFSET IS ZERO, MEANING THAT THIS OPTION WAS NOT SELECTED 
*     IN THE OLD MD FILE, DIAGNOSTIC 150 IS ISSUED, AND AN EXIT TO
*     DB$NO IS TAKEN. 
*     BASED ARRAY PITPF IS USED HERE JUST AS A DUMMY ARRAY TO PICK UP 
*     PERMANENT FILE INFORMATION FROM THE SCHEMA INFORMATION TABLE. IT
*     HAS NOTHING TO DO WITH THE PERMANENT FILE INFORMATION TABLE 
*     SINCE SCHEMA-TYPE PERMANENT FILES DO NOT HAVE INFORMATION IN THE
*     PERMANENT FILE INFORMATION TABLE. 
*     CHECK IF THE CURRENT FILE TYPE IS JOURNAL. IF IT IS, APPEND "1" 
*     TO THE PERMANENT FILE NAME, AND CALL DB$MDPR TO REPLACE IT IN THE 
*     PFN TABLE. IF DB$MDPR RETURNS, REPLACE THE "1" WITH A "2", AND
*     AGAIN CALL DB$MDPR TO REPLACE THE PERMANENT FILE IN THE PFN TABLE.
*     IF DB$MDPR RETURNS, REMOVE THE "2" FROM THE PERMANENT FILE NAME.
*     IF THE CURRENT FILE TYPE IS NOT JOURNAL, CALL DB$MDPR TO REPLACE
*     THE PERMANENT FILE IN THE PFN TABLE.
*     REGARDLESS OF THE PERMANENT FILE TYPE, REPLACE THE PERMANENT FILE 
*     INFORMATION IN THE SCHEMA INFORMATION TABLE USING CURFILTYP AS
*     AN INDEX INTO MDPFINFO, AND SITOFFSET AS AN INDEX INTO THE SCHEMA 
*     INFORMATION TABLE.
*     EXIT IS TO DB$NO. 
* 
 #
  
  
      ITEM I;                      # DUMMY INDEX VARIABLE              #
      ITEM SITOFFSET;              # OFFSET TO ACCESS THE SIT          #
  
      SWITCH CHANGE:FILETYPE
             CHGBRF:BRF,           # CHANGE BASIC RECOVERY FILE        #
             CHGJLF:JLF,           # CHANGE JOURNAL LOG FILE           #
             CHGQRF:QRF,           # CHANGE QUICK RECOVERY FILE        #
             CHGRIF:RIF            # CHANGE RESTART IDENTIFIER FILE    #
             ;
      CONTROL EJECT;
      GOTO CHANGE[CURFILTYP];      # GO CHANGE CURRENT FILE PF INFO    #
  
CHGBRF: 
      SITOFFSET = MDSIBRFP[0];
      GOTO ENDPROC; 
  
CHGJLF: 
      SITOFFSET = MDSIJLFP[0];
      GOTO ENDPROC; 
  
CHGQRF: 
      SITOFFSET = MDSIQRFP[0];
      GOTO ENDPROC; 
  
CHGRIF: 
      SITOFFSET = MDSIRIFP[0];
      GOTO ENDPROC; 
  
ENDPROC:  
      IF SITOFFSET EQ 0            # IF OPTION NOT IN OLD MD           #
      THEN
        BEGIN 
        DB$DIAG(150,SCHNAME);      # ISSUE DIAGNOSTIC                  #
        DB$NO;                     # EXIT TO DB$NO                     #
  
        END 
      P<PITPF> = LOC(MDSICW[SITOFFSET]);  # PICK UP PERMANENT FILE     #
                                          # INFO WITHIN THE SIT        #
      IF CURFILTYP EQ S"JLF"       # IF THIS A CHANGE JOURNAL LOG      #
      THEN
        BEGIN 
        C<6,1>MDPFINAME[CURFILTYP] = "1";  # APPEND "1" TO THE PFN     #
        C<6,1>MDPITNAME[0] = "1"; 
        DB$MDPR(MDPITNAME[0],MDPITUNID[0],MDPITSNPN[0], 
          MDPFINAME[CURFILTYP],MDPFUNID[CURFILTYP],MDPFSNPN[CURFILTYP]);
        C<6,1>MDPFINAME[CURFILTYP] = "2";  # APPEND "2" TO THE PFN     #
        C<6,1>MDPITNAME[0] = "2"; 
        DB$MDPR(MDPITNAME[0],MDPITUNID[0],MDPITSNPN[0], 
          MDPFINAME[CURFILTYP],MDPFUNID[CURFILTYP],MDPFSNPN[CURFILTYP]);
        C<6,1>MDPFINAME[CURFILTYP] = " ";  # REMOVE NUMBER FROM PFN    #
        C<6,1>MDPITNAME[0] = " "; 
        END 
      ELSE
        BEGIN 
        DB$MDPR(MDPITNAME[0],MDPITUNID[0],MDPITSNPN[0], 
          MDPFINAME[CURFILTYP],MDPFUNID[CURFILTYP],MDPFSNPN[CURFILTYP]);
        END 
      P<GETENTRY> = LOC(MDPFINFO[CURFILTYP]); 
      P<PUTENTRY> = LOC(MDSCINFO[SITOFFSET]); 
      FOR I = 0 STEP 1             # REPLACE PF INFO IN THE SIT        #
        UNTIL DFPFENTLEN - 1
      DO
        BEGIN 
        PUTINT[I] = GETINT[I];
        END 
      DB$NO;                       # EXIT TO STD #
  
      END 
      TERM
