.TITLE UNLOCK .IDENT /RMSV01/ ; ; THIS IS THE RMS VERSION OF THE FORTRAN USEROPEN FUNCTION THAT ; SPECIFIES THAT THE FILE BEING OPENED IS NOT TO BE LOCKED IN ; THE EVENT OF A TASK ABNORMAL EXIT. THE FORTRAN USER INCLUDES AN ; 'EXTERNAL *UNLOCK' IN HIS DATA DEFINITIONS AND CODES HIS FILE OPEN ; AS 'OPEN (UNIT=nn,.......,USEROPEN=UNLOCK)' ; ; GLEN HOFFING AUGUST 24, 1981 ; ; THIS SUBROUTINE IS ASSEMBLED AS FOLLOWS: ; MAC UNLOCKRMS=DR:[1,1]RMSMAC.MLB/ML,dev:[grp,mem]UNLOCKRMS ; ; REGISTER USAGE - R0 - ERROR STATUS RETURN ; R1 - ADDRESS OF LOGICAL UNIT BLOCK (LUB) ; R2 - LOGICAL UNIT NUMBER (LUN) ; R3 - ADDRESS OF FILE ACCESS BLOCK (FAB) ; R5 - CALLING PARAMETERS; 2(R5) == FAB ADDRESS ; 4(R5) == RAB ADDRESS .MCALL $SET,$OPEN,$CREATE,$CONNECT,FABOF$,$RMSTAT UNLOCK:: FABOF$ RMS$L ;DEFINE FAB OFFSETS $RMSTAT ;DEFINE ERROR CODES MOV 2(R5),R3 ;FAB POINTER IN R3 BIS #20,O$FOP(R3) ;SET 'DO NOT LOCK' BIT IN FAB MOVB O$LCH(R3),R2 ;MOVE LOGICAL UNIT NO. TO R2 CALL $FCHNL ;RETURNS ADDRESS OF LUB IN R0 MOV 2(R5),R3 ;RESTORE FAB POINTER MOV R0,R1 ;MOVE LUB POINTER TO R1 BIT #4000,2(R1) ;TEST 'NEW' BIT BEQ NOTNEW ;BRANCH IF NOT SET, BR CREATE ;ELSE CREATE NEW FILE NOTNEW: $OPEN R3 ;OPEN FILE MOV O$STS(R3),R0 ;GET ERROR STATUS BGT CONECT ;EXIT IF NO ERROR CMP R0,#ER$FNF ;TEST IF ERROR WAS 'FILE NOT FOUND' BNE EXIT ;EXIT IF ANY OTHER ERROR BIT #1000,2(R1) ;TEST 'UNKNOWN' BIT BEQ EXIT ;EXIT IF NOT SET BIS #4000,2(R1) ;SET 'NEW' BIT CREATE: $CREATE R3 ;CREATE NEW FILE MOV O$STS(R3),R0 ;GET ERROR STATUS BLE EXIT ;EXIT IF CREATE ERROR CONECT: $CONNECT 4(R5) ;CONNECT RAB MOV O$STS(R3),R0 ;GET ERROR STATUS EXIT: RETURN ;RETURN .END