]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - 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
diff --git a/MINICERN/packlib/zebra/rz/rzquot.F b/MINICERN/packlib/zebra/rz/rzquot.F
new file mode 100644 (file)
index 0000000..7ee2f61
--- /dev/null
@@ -0,0 +1,126 @@
+*
+* $Id$
+*
+* $Log$
+* Revision 1.2  1996/04/24 17:27:06  mclareni
+* Extend the include file cleanup to dzebra, rz and tq, and also add
+* dependencies in some cases.
+*
+* Revision 1.1.1.1  1996/03/06 10:47:26  mclareni
+* Zebra
+*
+*
+#include "zebra/pilot.h"
+      SUBROUTINE RZQUOT(NQUOTA)
+*
+************************************************************************
+*
+*       To set the quota (number of blocks) for the CWD
+* Input:
+*   NQUOTA  The maximum  number of records which  can be used by  the CWD
+*           and its subdirectories
+*           By default NQUOTA is equal to the minimum of the total number
+*           of records allowed  for the complete file  (parameter NREC in
+*           RZFILE) and the quota of the parent directory.
+*
+* Called by <USER>
+*
+*  Author  : R.Brun DD/US/PD
+*  Written : 03.04.86
+*  Last mod: 09.01.91
+*          : 30.01.95 J.Shiers. Permit NQUOTA>65000 for new RZ format
+*
+************************************************************************
+#include "zebra/zunit.inc"
+#include "zebra/rzcl.inc"
+#include "zebra/rzk.inc"
+*
+*-----------------------------------------------------------------------
+*
+
+#include "zebra/q_jbyt.inc"
+
+      IQUEST(1)=0
+      NQUOT=NQUOTA
+      LOGLV=JBYT(IQ(KQSP+LTOP),15,3)-3
+      IVERS=IQ(KQSP+LTOP+KRZVER)
+*
+*     Limit quota to maximum for original RZ format
+*
+      IF(IVERS.EQ.0.AND.NQUOT.GT.65000)THEN
+         NQUOT=65000
+         IF(LOGLV.GE.-1) WRITE(IQLOG,4000) NQUOT
+ 4000 FORMAT(' RZQUOT. Quota set to maximum allowed value = ',I6)
+      ENDIF
+*
+*         Check permission
+*
+      IFLAG=0
+      CALL RZMODS('RZQUOT',IFLAG)
+      IF(IFLAG.NE.0)GOTO 99
+*
+*         Sub-directory case
+*
+      IF(LCDIR.NE.LTOP)THEN
+         LPAR=LQ(KQSP+LCDIR+1)
+         IF(NQUOT.GE.IQ(KQSP+LPAR+KQUOTA))THEN
+            IF(LOGLV.GE.-2) WRITE(IQLOG,1000)
+ 1000       FORMAT(' RZQUOT. Quota exceeds parent directory quota')
+            IQUEST(1)=1
+            IQUEST(10)=NQUOT
+            IQUEST(11)=IQ(KQSP+LPAR+KQUOTA)
+            GOTO 99
+         ENDIF
+         IQ(KQSP+LCDIR+KQUOTA)=NQUOT
+         IF(NQUOT.LT.IQ(KQSP+LCDIR+KRUSED))THEN
+            IF(LOGLV.GE.-1) WRITE(IQLOG,2000)
+ 2000       FORMAT(' RZQUOT. WARNING !! Records exceed new quota')
+            IQUEST(10)=NQUOT
+            IQUEST(11)=IQ(KQSP+LCDIR+KRUSED)
+         ENDIF
+         GOTO 99
+      ENDIF
+*
+*         Top-directory
+*
+      IF(NQUOT.EQ.IQ(KQSP+LTOP+KQUOTA))GOTO 99
+      IF(NQUOT.LT.IQ(KQSP+LTOP+KQUOTA))THEN
+         IF(NQUOT.LT.IQ(KQSP+LTOP+KRUSED))THEN
+            NQUOT=IQ(KQSP+LTOP+KRUSED)
+            IF(LOGLV.GE.-1) WRITE(IQLOG,3000)NQUOT
+ 3000       FORMAT(' RZQUOT. Cannot reduce quota below ',I5,' records')
+         ENDIF
+         GOTO 80
+      ENDIF
+*
+*         Increase quota for the file
+*
+      LB=IQ(KQSP+LTOP+KLB)
+      NWREC=IQ(KQSP+LTOP+LB)
+      NWNEW=(NQUOT-1)/32 +1
+      IF(NWNEW.EQ.NWREC)GOTO 80
+      IQ(KQSP+LTOP+LB)=NWNEW
+      NWFREE=IQ(KQSP+LTOP+KNFREE)
+      NMORE=NWNEW-NWREC
+      IF(NMORE.GT.NWFREE)THEN
+         CALL RZEXPD('RZQUOT',NMORE+5)
+         IF(IQUEST(1).NE.0)GOTO 99
+      ENDIF
+*
+*        Copy S and K blocks
+*
+      LS=IQ(KQSP+LTOP+KLS)
+      LK=IQ(KQSP+LTOP+KLK)
+      LF=IQ(KQSP+LTOP+KLF)
+      CALL UCOPY2(IQ(KQSP+LTOP+LS),IQ(KQSP+LTOP+LS+NMORE),LF-LS)
+      CALL VZERO(IQ(KQSP+LTOP+LS),NMORE)
+      IQ(KQSP+LTOP+KLS)=LS+NMORE
+      IQ(KQSP+LTOP+KLK)=LK+NMORE
+      IQ(KQSP+LTOP+KLF)=LF+NMORE
+      IQ(KQSP+LTOP+KNFREE)=NWFREE-NMORE
+*
+  80  IQ(KQSP+LTOP+KQUOTA)=NQUOT
+      NFREE=IQ(KQSP+LFREE+1)
+      IQ(KQSP+LFREE+2*NFREE+1)=NQUOT
+*
+  99  END