]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/packlib/zebra/rz/rzused.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzused.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1996/03/06 10:47:27  mclareni
6 * Zebra
7 *
8 *
9 #include "zebra/pilot.h"
10       SUBROUTINE RZUSED(N,IUSED)
11 *
12 ************************************************************************
13 *
14 *        To mark used records
15 * Input:
16 *    N      Number of consecutive records used
17 *    IUSED  First of the N records used
18 *
19 * Called by RZCOP1,RZEXPD,RZMDIR,RZOUT,RZVOUT
20 *
21 *  Author  : R.Brun DD/US/PD
22 *  Written : 02.04.86
23 *  Last mod: 04.05.86
24 *
25 ************************************************************************
26 #include "zebra/rzcl.inc"
27 *
28 *-----------------------------------------------------------------------
29 *
30 *           First. Remove used records from the list of available records
31 *
32       NFREE=IQ(KQSP+LFREE+1)
33       IF(NFREE.EQ.0)GO TO 99
34 *
35       I=1
36   10  IF(I.LE.NFREE)THEN
37          L1=LFREE+2*I
38          IR1=IQ(KQSP+L1)
39          IRL=IQ(KQSP+L1+1)
40          IF(IUSED.EQ.IR1)THEN
41             IF(IR1+N.LE.IRL)THEN
42                IQ(KQSP+L1)=IR1+N
43             ELSE
44                NFREE=NFREE-1
45                IQ(KQSP+LFREE+1)=NFREE
46                IF(NFREE.GT.0)THEN
47                   CALL UCOPY2(IQ(KQSP+L1+2),IQ(KQSP+L1),2*(NFREE-I+1))
48                ENDIF
49             ENDIF
50             GO TO 20
51          ENDIF
52          I=I+1
53          GO TO 10
54       ENDIF
55 *
56 *         Second. Mark used records in list of used records
57 *
58   20  NUSED=IQ(KQSP+LUSED+1)
59       IUSEL=IUSED+N-1
60       IUS=2
61       IF(NUSED.EQ.0)THEN
62          IQ(KQSP+LUSED+1)=1
63          IQ(KQSP+LUSED+IUS)=IUSED
64          IQ(KQSP+LUSED+IUS+1)=IUSEL
65          GO TO 99
66       ENDIF
67   30  IF(IUSEL.LT.IQ(KQSP+LUSED+IUS))THEN
68          IF(IUSEL.EQ.IQ(KQSP+LUSED+IUS)-1)THEN
69             IQ(KQSP+LUSED+IUS)=IUSED
70          ELSE
71             IF(IUS.GT.2.AND.IUSEL.LE.IQ(KQSP+LUSED+IUS-1))GO TO 99
72             NDATA=IQ(KQSP+LUSED-1)
73             IF(NDATA.LT.2*NUSED+3)THEN
74                CALL MZPUSH(JQPDVS,LUSED,0,10,'I')
75             ENDIF
76             NLEFT=2*NUSED-IUS+2
77             IF(NLEFT.GT.0)THEN
78                CALL UCOPY2(IQ(KQSP+LUSED+IUS),
79      +                     IQ(KQSP+LUSED+IUS+2),NLEFT)
80             ENDIF
81             NUSED=NUSED+1
82             IQ(KQSP+LUSED+1)=NUSED
83             IQ(KQSP+LUSED+IUS)=IUSED
84             IQ(KQSP+LUSED+IUS+1)=IUSEL
85          ENDIF
86          GO TO 99
87       ENDIF
88 *
89       IF(IUSED.EQ.IQ(KQSP+LUSED+IUS+1)+1)THEN
90          IQ(KQSP+LUSED+IUS+1)=IUSEL
91          IF(IUS+2.LT.2*NUSED)THEN
92             IF(IQ(KQSP+LUSED+IUS+1).EQ.IQ(KQSP+LUSED+IUS+2))THEN
93                IQ(KQSP+LUSED+IUS+1)=IQ(KQSP+LUSED+IUS+3)
94                NLEFT=2*NUSED-IUS-2
95                IF(NLEFT.GT.0)THEN
96                   CALL UCOPY2(IQ(KQSP+LUSED+IUS+4),
97      +                        IQ(KQSP+LUSED+IUS+2),NLEFT)
98                ENDIF
99                NUSED=NUSED-1
100                IQ(KQSP+LUSED+1)=NUSED
101             ENDIF
102          ENDIF
103          GO TO 99
104       ENDIF
105 *
106       IUS=IUS+2
107       IF(IUS.LE.2*NUSED)GO TO 30
108 *
109       NDATA=IQ(KQSP+LUSED-1)
110       IF(NDATA.LT.2*NUSED+3)THEN
111          CALL MZPUSH(JQPDVS,LUSED,0,10,'I')
112       ENDIF
113       IQ(KQSP+LUSED+IUS)=IUSED
114       IQ(KQSP+LUSED+IUS+1)=IUSEL
115       NUSED=NUSED+1
116       IQ(KQSP+LUSED+1)=NUSED
117 *
118   99  RETURN
119       END