]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzfree.F
Use tgt_ prefix for binary target directories
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzfree.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/04/24 17:26:50 mclareni
6* Extend the include file cleanup to dzebra, rz and tq, and also add
7* dependencies in some cases.
8*
9* Revision 1.1.1.1 1996/03/06 10:47:23 mclareni
10* Zebra
11*
12*
13#include "zebra/pilot.h"
14 SUBROUTINE RZFREE(CHLOCK)
15*
16************************************************************************
17*
18* To free a directory previously locked by RZLOCK
19* Input:
20* CHLOCK Character variable identifying the owner of the lock.
21*
22* Called by <USER>
23*
24* Author : R.Brun DD/US/PD
25* Written : 02.05.86
26* Last mod: 09.01.91
27*
28************************************************************************
29#include "zebra/zunit.inc"
30#include "zebra/rzcl.inc"
31#include "zebra/rzclun.inc"
32#include "zebra/rzk.inc"
33 CHARACTER*(*) CHLOCK
34 DIMENSION IHL(2)
35*
36*-----------------------------------------------------------------------
37*
38#include "zebra/q_jbyt.inc"
39
40 IQUEST(1)=0
41 IF(LQRS.EQ.0)GO TO 99
42 IF(LTOP.EQ.0)GO TO 99
43*
44 LOGLV=JBYT(IQ(KQSP+LTOP),15,3)-3
45 NCH=LEN(CHLOCK)
46 IF(NCH.GT.8)NCH=8
47 CALL UCTOH(CHLOCK,IHL,4,NCH)
48 IF(NCH.LT.5)CALL VBLANK(IHL(2),1)
49 CALL ZHTOI(IHL,IHL,2)
50*
51* Check write permission
52*
53*** IF(JBIT(IQ(KQSP+LCDIR),1).NE.0)THEN
54*** IQUEST(1)=4
55*** IF(LOGLV.GE.-2) WRITE(IQLOG,9010)
56*** 9010 FORMAT(' RZFREE. No authorisation to write in that directory')
57*** GO TO 99
58*** ENDIF
59*
60* Lock first record
61*
62 LRIN = LQ(KQSP+LTOP-7)
63 LPURG = LQ(KQSP+LTOP-5)
64 LROUT = LQ(KQSP+LTOP-6)
65 IF(LRIN.EQ.0)THEN
66 CALL MZBOOK(JQPDVS,LRIN,LTOP,-7,'RZIN',0,0,LREC+1,2,-1)
67 IQ(KQSP+LRIN-5)=IQ(KQSP+LTOP-5)
68 ENDIF
69 NWL =50
70 NTRY=0
71 10 CALL RZIODO(LUN,NWL,1,IQ(KQSP+LRIN+1),1)
72 IF(IQUEST(1).NE.0)GO TO 99
73 IF(IQ(KQSP+LRIN+2).GT.NWL)THEN
74 NWL=IQ(KQSP+LRIN+2)
75 GO TO 10
76 ENDIF
77 NWL=IQ(KQSP+LRIN+2)
78 IQ(KQSP+LTOP+KIRIN)=0
79 IF(IQ(KQSP+LRIN+3).NE.0)THEN
80 NWL=50
81 NTRY=NTRY+1
82#if defined(CERNLIB_QMVAX)
83 IF(IRELAT.NE.0)UNLOCK(UNIT=LUN)
84 CALL LIB$WAIT(0.1)
85#endif
86 IF(NTRY.LT.100)GO TO 10
87 IF(LOGLV.GE.-2) WRITE(IQLOG,1000)
88 1000 FORMAT(' RZFREE. Cannot lock that directory')
89 IQUEST(1)=1
90 GO TO 99
91 ENDIF
92 IQ(KQSP+LRIN+3)=1
93 CALL RZIODO(LUN,MAX(NWL,50),1,IQ(KQSP+LRIN+1),2)
94*
95* Read fresh Top directory
96*
97 IF(LTOP.NE.LCDIR)CALL RZRTOP
98*
99* Save directories
100*
101 CALL RZSAVE
102*
103 IQ(KQSP+LRIN+3)=0
104 NLOCK=IQ(KQSP+LRIN+1)
105 LDC=IQ(KQSP+LCDIR+KLD)
106 IRD=IQ(KQSP+LCDIR+LDC+1)
107*
108* Search lock-id
109*
110 IF(NLOCK.GT.0)THEN
111 LL=4
112 20 NLESS=IQ(KQSP+LRIN+LL)
113 IF(NLESS.NE.0)THEN
114 IF(IQ(KQSP+LRIN+LL+1).EQ.IHL(1).AND.
115 + IQ(KQSP+LRIN+LL+2).EQ.IHL(2).AND.
116 + IQ(KQSP+LRIN+LL+4).EQ.IRD)THEN
117 CALL UCOPY2(IQ(KQSP+LRIN+LL+NLESS),
118 + IQ(KQSP+LRIN+LL),NWL-LL+1)
119 NWL=NWL-NLESS
120 IQ(KQSP+LRIN+1)=IQ(KQSP+LRIN+1)-1
121 IQ(KQSP+LRIN+2)=NWL
122 ELSE
123 LL=LL+NLESS
124 GO TO 20
125 ENDIF
126 ENDIF
127 ENDIF
128*
129* Delete list of allocated records
130*
131 IF(LFREE.NE.0)THEN
132 CALL VZERO(IQ(KQSP+LFREE+1),IQ(KQSP+LFREE-1))
133 ENDIF
134*
135* Write back record 1
136*
137 CALL RZIODO(LUN,MAX(NWL,50),1,IQ(KQSP+LRIN+1),2)
138 IQUEST(10)=IQ(KQSP+LRIN+1)
139*
140 99 RETURN
141 END