0RP 
          IDENT  0RP,DRPX 
          PERIPH J
          TITLE  0RP - RELEASE PERMANENT FILE.
          BASE   MIXED
          SST 
 QUAL$    EQU    1           DEFINE UNQUALIFIED COMMON DECKS
*COMMENT  0RP - RELEASE PERMANENT FILE. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       0RP - RELEASE PERMANENT FILE. 
*         J. L. WARDELL      72/10/20.
*         S. L. KSANDER.     75/05/26.
*         W. E. GOEBEL.      77/01/14.
*         P. C. SMITH.       79/04/27.
          SPACE  4
***              0RP IS A LOCATION FREE ROUTINE TO BE USED FOR
*         RELEASING PERMANENT FILES.
* 
*         IF THE FILE IS ATTACHED IN WRITE MODE THE SYSTEM SECTOR 
*         OF THE FILE WILL BE UPDATED TO CLEAR THE WRITE LOCKOUT
*         STATUS. 
* 
*         IF THE FILE WAS ATTACHED IN READ MODE THE SYSTEM SECTOR OF
*         THE FILE WILL BE UPDATED TO REFLECT ONE LESS USER 
*         ACCESSING THE FILE. 
* 
*         IF THE PURGE BIT IS SET THE FILE WILL BE DROPPED IF THE 
*         USER COUNT INDICATES NO OTHER USERS ACCESSING FILE. 
* 
*         ACTIVE FILE COUNT FOR DEVICE WILL BE DECREMENTED. 
*         MMF USER COUNTS IN THE SYSTEM SECTOR WILL BE UPDATED. 
* 
*         AN EVENT WILL BE ISSUED TO ROLL IN USERS WAITING FOR
*         THE FILE. 
          SPACE  4
***       CALL. 
* 
*         ENTRY  ((LA)-1) = FILE STATUS.
*                         6/0,1/0,1/A/,1/M,1/E/,1/U,1/R 
*                            A = APPEND 
*                            M = MODIFY 
*                            E = EXECUTE
*                            U = UTILITY ATTACH.
*                            R = READ ONLY
*                (FS - FS+4) = FST INFORMATION. 
* 
*         EXIT   (A) .LT. 0 IF PERMANENT FILE DEVICE INACCESSIBLE.
*                (T5) = EST ORDINAL OF PERMANENT FILE DEVICE. 
*                (T6) = FIRST TRACK OF PERMANENT FILE.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         *EQXXX, TYYYY, SYSTEM SECTOR ERROR.*
*         THIS MESSAGE IS ISSUED FOR EITHER READ OR WRITE ERRORS OR 
*         IF THE TRACK OR LINKAGE BYTES CONTAINED IN THE SYSTEM 
*         SECTOR ARE NOT VALID. 
*         EQ     EQUIPMENT MNEMONIC.
*         XXX    EST ORDINAL. 
*         YYYY   TRACK NUMBER.
          SPACE  4
***       USES   LOCATIONS 0 - 17, BFMS.
* 
*         MUST BE LOADED BELOW BFMS.
          SPACE  4
***       ROUTINES USED.
* 
*         CALLS  DFM, RDS, WDS. 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMSCPS 
          QUAL   EVENT
*CALL     COMSEVT 
          QUAL   *
*CALL     COMSPFM 
*CALL     COMPREL 
*CALL     COMSMSP 
*CALL     COMSZOL 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CF       EQU    16          CHECKPOINT REQUEST FLAG
 FS       EQU    20 - 24     FST INFORMATION (5 LOCATIONS)
  
****
          TITLE  MAIN ROUTINE.
**        DRP MAIN ROUTINE. 
  
  
          ORG    5
 DRP      SUBR               ENTRY/EXIT 
  
*         INTERLOCK TRACK.
  
 DRP1     LDD    FS          SET EST ORDINAL
          STD    T5 
          ADD    TH          IMMEDIATE RETURN ON INACCESSIBLE DEVICE
          STD    CM+1 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          ZJN    DRPX        IF NO TRACKS ASSIGNED
          STD    CM+2 
          LDN    STIS        SET TRACK INTERLOCK
          STD    CM+3 
          MONITOR STBM
          LDD    CM+1 
          ZJN    DRP3        IF INTERLOCK SET 
          SHN    21-11
          MJN    DRPX        IF DEVICE INACCESSIBLE 
          LCN    77 
          STD    T1 
  
*         DELAY 1/2 SECOND AND RETRY. 
  
 DRP2     SOD    T1 
          ZJN    DRP1        IF DELAY EXPIRED RETRY INTERLOCK 
          PAUSE 
          DELAY 
          LDD    CM+1 
          LMN    ORET 
          NJN    DRP2        IF NO OPERATOR OVERRIDE
          LJM    DRP15       DECREMENT FILE COUNT AND EXIT
  
*         READ SYSTEM SECTOR. 
  
 DRP3     STD    T7 
          STD    CF          CLEAR CHECKPOINT FLAG
          SETMS  IO,RW
          LDD    CM+3        SET EQUIPMENT IN ERROR MESSAGE 
          LPC    3777 
          STM    DRPE 
          LDC    BFMS        READ NEXT SECTOR 
          RJM.   RDS
          PJN    DRP5        IF NO ERROR
 DRP4     SHN    21-12
          MJN    DRP6        IF NON-RECOVERABLE ERROR 
          RJM    ITR         CLEAR TRACK INTERLOCK
          LCN    0
          LJM    DRPX        RETURN 
  
 DRP5     LDM.   BFMS+1 
          LMN    77 
          NJN    DRP9        IF NOT SYSTEM SECTOR WORD COUNT
          LDM.   BFMS        CHECK NEXT SECTOR
          LMC    3777 
          NJN    DRP9        IF NOT SYSTEM SECTOR ID
          LDD    T6          CHECK TRACK
          LMM.   FTSS 
 DRP6     NJN    DRP9        IF ERROR IN SYSTEM SECTOR
          LDM.   FISS 
          NJN    DRP8        IF FAST ATTACH ENTRY 
  
*         SET ACCESS AND USER COUNTS FOR NORMAL FILE. 
  
          RJM    UAM         UPDATE ACCESS MODE AND USER COUNTS 
          ZJN    DRP10       IF NO MORE USERS 
          LMN    40          CHECK PURGE BIT
          NJN    DRP10       IF USERS ACCESSING FILE
          LDM.   CTSS+FCEF   CHECK FOR BOI/EOI VERIFICATION ERROR 
          SHN    0-13 
          NJN    DRP11       IF ERROR (LEAVE IN CURRENT STATE)
  
*         DROP FILE BEING PURGED. 
  
          LCN    STBM-DTKM   CHANGE TO DROP FILE
          RAM    ITRA 
          AOD    CF 
 DRP8     UJN    DRP11       RELEASE FILE 
  
 DRP9     ENDMS 
          UJN    DRP13       ISSUE ERROR MESSAGE
  
*         ISSUE EVENT WHILE WAITING FOR DISK REVOLUTION.
  
 DRP10    LDN    0           ISSUE EVENT
          STD    CM+1 
          LDD    T6 
          STD    CM+4 
          LDD    T5 
          STD    CM+3 
          MONITOR EATM
          LDC    BFMS+WLSF   REWRITE SYSTEM SECTOR
          RJM.   WDS
 DRP11    PJN    DRP14       IF NO WRITE ERROR
          LJM    DRP4        CHECK ERROR STATUS 
  
*         ISSUE ERROR MESSAGE.
  
 DRP13    LDD    T5          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    DRPE+1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          RAM    DRPE+2 
          LDD    T6          SET TRACK NUMBER IN ERROR MESSAGE
          SHN    -6 
          RJM    C2D
          STM    DRPE+4 
          LDD    T6 
          RJM    C2D
          STM    DRPE+5 
          LDC    DRPE        ISSUE DAYFILE MESSAGE
          ADD    LA 
          RJM.   DFM
  
*         CLEAR TRACK INTERLOCK / DROP TRACK. 
  
 DRP14    ENDMS 
          RJM    ITR         ISSUE TRACK REQUEST
          LDD    CF 
          ZJN    DRP15       IF *DTKM* NOT ISSUED 
  
*         INCREMENT PRU LIMIT FIELD IN CONTROL POINT AREA.
*         NUMBER OF SECTORS RETURNED BY *DTKM* IS IN (CM+3 - CM+4). 
  
          LDN    CICS        INCREMENT CP AREA FIELD FUNCTION CODE
          STD    CM 
          LDK    ACLW        ADDRESS OF MASS STORAGE PRU LIMIT
          STD    CM+1 
          LDN    0D*100+18D  POSITION AND WIDTH OF LIMIT FIELD
          STD    CM+2 
          LDD    MA          WRITE *UADM* PARAMETERS TO MESSAGE BUFFER
          CWD    CM 
          LDN    1
          STD    CM+1        REQUEST COUNT
          STD    CM+2        DO NOT DROP PP 
          MONITOR  UADM 
  
*         UPDATE DEVICE STATUS. 
  
 DRP15    LDD    T5          DECREMENT USER COUNT 
          STD    CM+1 
          LDN    DUCS 
          STD    CM+3 
          MONITOR  SMDM 
  
*         ISSUE OVERCOMMITMENT EVENT FOR AUXILIARY REMOVABLE
*         DEVICE WITH ZERO USER COUNT.
  
          SFA    EST,T5      CHECK FOR AUXILIARY REMOVABLE DEVICE 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          ADN    STLL-MDGL
          CRD    T0          GET USER COUNT 
          LDD    CM 
          SHN    -12
          LMN    3
          NJN    DRP16       IF FAMILY OR NON-REMOVABLE DEVICE
          LDD    T0+3 
          NJN    DRP16       IF USERS 
          STD    CM+1        ISSUE OVERCOMMITMENT EVENT 
          LDC    /EVENT/OVRE
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          MONITOR EATM
 DRP16    LJM    DRPX        EXIT 
  
  
 DRPE     DATA   C*EQ000, T0000, SYSTEM SECTOR ERROR.*
 ITR      SPACE  4,10 
**        ITR - ISSUE TRACK REQUEST.
* 
*         ENTRY  (CF) = CHECKPOINT REQUEST FLAG.
*                (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK OF FILE.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 ITR      SUBR               ENTRY/EXIT 
          LDD    T6 
          STD    CM+2        SET FIRST TRACK
          LDD    CF 
          SHN    13-0        CHECKPOINT FLAG
          LMD    T5 
          STD    CM+1        APPEND TO EST ORDINAL
          LDN    CTIS 
          STD    CM+3        CLEAR TRACK INTERLOCK
 ITRA     MONITOR  STBM 
*         MONITOR  DTKM      (FILE PURGED)
*         LDN    0
          UJN    ITRX        RETURN 
          TITLE  SUBROUTINES. 
 UAM      SPACE  4
**        UAM - UPDATE ACCESS MODE AND COUNTS.
* 
*         ENTRY  (CASS) = ACCESS MODE OF FILE.
*                         BIT  DESCRIPTION
*                         0    UNUSED.
*                         1    FILE MAY BE EXTENDED (W, M OR A MODE). 
*                         2    UNUSED.
*                         3    FILE MAY BE REWRITTEN (W, M OR U MODE).
*                         4    FILE MAY BE SHORTENED (W MODE).
*                         5    FILE PURGED. 
*                         6    FILE ATTACHED BY SYSTEM UTILITY. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   (CASS) = NEW ACCESS MODE OF FILE.
*                (A) .NE. 0 IF OTHER USERS ACCESSING FILE OR FILE 
*                         PURGED. 
*                (A) = 40 IF FILE PURGED. 
* 
*         USES   T2, T3, CM - CM+4. 
* 
*         MACROS SFA. 
* 
*         NOTES  WHEN A FILE IS ATTACHED IN A READ MODE AND THE USER
*                COUNT IS TO BE DECREMENTED, IT IS DONE BY COMMON 
*                CODE.  THIS IS DUE TO THE CORRESPONDENCE BETWEEN THE 
*                FILE STATUS VALUES FROM THE LOCAL FNT ENTRY FOR READ 
*                MODES AND THE BYTE WHERE THE APPROPRIATE USER COUNT
*                IS LOCATED.  ADDING ONE TO THE VALUE OF BITS 3-5 OF
*                THE STATUS WILL GIVE THE BYTE NUMBER.
  
  
 UAM4     SHN    1-3         DETERMINE USER COUNT OFFSET
          LPN    3
          STD    T3 
          RAD    T2          ADD WORD OFFSET OF LOCAL COUNTS
          SOP    UCSS+6,T2   DECREMENT LOCAL USER COUNT 
          SOP    UCSS+1,T3   DECREMENT GLOBAL USER COUNT
  
*         RETURN FILE STATUS. 
  
 UAM5     LDM.   UCSS+1 
          ADM.   UCSS+2 
          ADM.   UCSS+3 
          ADM.   UCSS+4 
          SHN    6
          ADM.   CASS 
  
 UAM      SUBR               ENTRY/EXIT 
          SFA    EST,T5      COMPUTE BASE ADDRESS OF LOCAL COUNTS 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    DULL        GET MACHINE INDEX
          CRD    CM 
          LDD    CM+2 
          LPN    17 
          STD    T2 
          SHN    2
          RAD    T2 
          LDM    -1 
          LPN    2
          ZJN    UAM2        IF UTILITY ATTACH STATUS NOT SET 
  
*         CLEAR SYSTEM UTILITY ATTACH FLAGS.
  
          LDC    -100        CLEAR GLOBAL UTILITY ATTACH FLAG 
          RAM.   CASS 
          LCN    2           CLEAR LOCAL UTILITY ATTACH FLAG
          RAP    UCSS+5,T2
  
*         WRITE MODE PROCESSOR. 
  
 UAM2     LDM    -1 
          SHN    21-0 
          PJN    UAM3        IF WRITABLE MODE 
          LJM    UAM4        PROCESS NON-WRITEABLE MODES
  
 UAM3     LDM.   CASS        CLEAR ALL WRITE BITS 
          SCN    32 
          STM.   CASS 
          LDP    UCSS+5,T2   CLEAR LOCAL WRITE FLAG 
          SCN    1
          STP    UCSS+5,T2
          LJM    UAM5        RETURN FILE STATUS 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
          SPACE  4
          OVERFLOW 5,ZRPL 
          END 
