.TITLE UNLOCK .IDENT /V01/ ; ; UNLOCK IS A 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 A 'EXTERNAL *UNLOCK' IN HIS DATA DEFINITIONS ; AND CODES HIS FILE OPEN AS 'OPEN (UNIT=nn,......,USEROPEN=UNLOCK)' ; ; GLEN HOFFING APRIL 6, 1981 ; .GLOBL $FCHNL .MCALL OFNB$ UNLOCK::MOV 2(R5),R0 ;GET FDB ADDRESS BIS #FA.ENB!FA.DLK,F.ACTL(R0) ;SET DO NOT LOCK OFNB$ ;OPEN THE FILE ; ; IF THIS OPEN FAILS BECAUSE FILE WAS NOT FOUND (IE.NSF), MUST ; CHECK TO SEE IF FILE WAS OPENED WITH TYPE='UNKNOWN', IN ; WHICH CASE MUST TRY TO OPEN AGAIN AS A NEW FILE. ; CMPB #IE.NSF,F.ERR(R0) ;TEST OPEN STATUS BNE EXIT ;EXIT IF NOT 'NO SUCH FILE' MOVB F.LUN(R0),R2 ;MOV LUN TO R2 MOV R0,R4 ;SAVE FDB ADDRESS CALL $FCHNL ;RETURN ADDRESS OF LUB IN R0 BIT #1000,2(R0) ;TEST 'UNKNOWN' BIT BEQ EXIT2 ;EXIT IF 'UNKNOWN' BIT NOT SET MOV R4,R0 ;RESTORE FDB ADDRESS BISB #FA.CRE,F.FACC(R0) ;SET 'CREATE' BIT OFNB$ ;REOPEN AS A 'NEW' FILE EXIT: MOV F.ERR(R0),R0 ;RETURN COMPLETION STATUS RETURN EXIT2: MOV R4,R0 ;RESTORE FDB MOV F.ERR(R0),R0 ;RETURN COMPLETION STATUS RETURN .END