]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/packlib/zebra/rz/rzquot.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzquot.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.2  1996/04/24 17:27:06  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:26  mclareni
10 * Zebra
11 *
12 *
13 #include "zebra/pilot.h"
14       SUBROUTINE RZQUOT(NQUOTA)
15 *
16 ************************************************************************
17 *
18 *       To set the quota (number of blocks) for the CWD
19 * Input:
20 *   NQUOTA  The maximum  number of records which  can be used by  the CWD
21 *           and its subdirectories
22 *           By default NQUOTA is equal to the minimum of the total number
23 *           of records allowed  for the complete file  (parameter NREC in
24 *           RZFILE) and the quota of the parent directory.
25 *
26 * Called by <USER>
27 *
28 *  Author  : R.Brun DD/US/PD
29 *  Written : 03.04.86
30 *  Last mod: 09.01.91
31 *          : 30.01.95 J.Shiers. Permit NQUOTA>65000 for new RZ format
32 *
33 ************************************************************************
34 #include "zebra/zunit.inc"
35 #include "zebra/rzcl.inc"
36 #include "zebra/rzk.inc"
37 *
38 *-----------------------------------------------------------------------
39 *
40
41 #include "zebra/q_jbyt.inc"
42
43       IQUEST(1)=0
44       NQUOT=NQUOTA
45       LOGLV=JBYT(IQ(KQSP+LTOP),15,3)-3
46       IVERS=IQ(KQSP+LTOP+KRZVER)
47 *
48 *     Limit quota to maximum for original RZ format
49 *
50       IF(IVERS.EQ.0.AND.NQUOT.GT.65000)THEN
51          NQUOT=65000
52          IF(LOGLV.GE.-1) WRITE(IQLOG,4000) NQUOT
53  4000 FORMAT(' RZQUOT. Quota set to maximum allowed value = ',I6)
54       ENDIF
55 *
56 *         Check permission
57 *
58       IFLAG=0
59       CALL RZMODS('RZQUOT',IFLAG)
60       IF(IFLAG.NE.0)GOTO 99
61 *
62 *         Sub-directory case
63 *
64       IF(LCDIR.NE.LTOP)THEN
65          LPAR=LQ(KQSP+LCDIR+1)
66          IF(NQUOT.GE.IQ(KQSP+LPAR+KQUOTA))THEN
67             IF(LOGLV.GE.-2) WRITE(IQLOG,1000)
68  1000       FORMAT(' RZQUOT. Quota exceeds parent directory quota')
69             IQUEST(1)=1
70             IQUEST(10)=NQUOT
71             IQUEST(11)=IQ(KQSP+LPAR+KQUOTA)
72             GOTO 99
73          ENDIF
74          IQ(KQSP+LCDIR+KQUOTA)=NQUOT
75          IF(NQUOT.LT.IQ(KQSP+LCDIR+KRUSED))THEN
76             IF(LOGLV.GE.-1) WRITE(IQLOG,2000)
77  2000       FORMAT(' RZQUOT. WARNING !! Records exceed new quota')
78             IQUEST(10)=NQUOT
79             IQUEST(11)=IQ(KQSP+LCDIR+KRUSED)
80          ENDIF
81          GOTO 99
82       ENDIF
83 *
84 *         Top-directory
85 *
86       IF(NQUOT.EQ.IQ(KQSP+LTOP+KQUOTA))GOTO 99
87       IF(NQUOT.LT.IQ(KQSP+LTOP+KQUOTA))THEN
88          IF(NQUOT.LT.IQ(KQSP+LTOP+KRUSED))THEN
89             NQUOT=IQ(KQSP+LTOP+KRUSED)
90             IF(LOGLV.GE.-1) WRITE(IQLOG,3000)NQUOT
91  3000       FORMAT(' RZQUOT. Cannot reduce quota below ',I5,' records')
92          ENDIF
93          GOTO 80
94       ENDIF
95 *
96 *         Increase quota for the file
97 *
98       LB=IQ(KQSP+LTOP+KLB)
99       NWREC=IQ(KQSP+LTOP+LB)
100       NWNEW=(NQUOT-1)/32 +1
101       IF(NWNEW.EQ.NWREC)GOTO 80
102       IQ(KQSP+LTOP+LB)=NWNEW
103       NWFREE=IQ(KQSP+LTOP+KNFREE)
104       NMORE=NWNEW-NWREC
105       IF(NMORE.GT.NWFREE)THEN
106          CALL RZEXPD('RZQUOT',NMORE+5)
107          IF(IQUEST(1).NE.0)GOTO 99
108       ENDIF
109 *
110 *        Copy S and K blocks
111 *
112       LS=IQ(KQSP+LTOP+KLS)
113       LK=IQ(KQSP+LTOP+KLK)
114       LF=IQ(KQSP+LTOP+KLF)
115       CALL UCOPY2(IQ(KQSP+LTOP+LS),IQ(KQSP+LTOP+LS+NMORE),LF-LS)
116       CALL VZERO(IQ(KQSP+LTOP+LS),NMORE)
117       IQ(KQSP+LTOP+KLS)=LS+NMORE
118       IQ(KQSP+LTOP+KLK)=LK+NMORE
119       IQ(KQSP+LTOP+KLF)=LF+NMORE
120       IQ(KQSP+LTOP+KNFREE)=NWFREE-NMORE
121 *
122   80  IQ(KQSP+LTOP+KQUOTA)=NQUOT
123       NFREE=IQ(KQSP+LFREE+1)
124       IQ(KQSP+LFREE+2*NFREE+1)=NQUOT
125 *
126   99  END