]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/packlib/zebra/qutil/zsorvi.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / qutil / zsorvi.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.2  1996/04/18 16:13:48  mclareni
6 * Incorporate changes from J.Zoll for version 3.77
7 *
8 * Revision 1.1.1.1  1996/03/06 10:47:15  mclareni
9 * Zebra
10 *
11 *
12 #include "zebra/pilot.h"
13       SUBROUTINE ZSORVI (IXSTOR,LGOP,JWORD,NWORDS)
14
15 C-    SORT BANKS AT LGO SUCH THAT THE 'NWORDS' LONG KEY STRINGS
16 C-    STARTING AT Q(L+JWORD) ARE IN INCREASING ORDER
17
18 #include "zebra/mqsys.inc"
19 C--------------    END CDE                             --------------
20       DIMENSION    JWORD(9), NWORDS(9), LGOP(9)
21
22 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
23       DIMENSION    NAMESR(2)
24       DATA  NAMESR / 4HZSOR, 4HVI   /
25 #endif
26 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
27       DATA  NAMESR / 6HZSORVI /
28 #endif
29 #if !defined(CERNLIB_QTRHOLL)
30       CHARACTER    NAMESR*8
31       PARAMETER   (NAMESR = 'ZSORVI  ')
32 #endif
33
34 #include "zebra/q_jbyt.inc"
35
36       LGO = LGOP(1)
37       IF (LGO.EQ.0)          RETURN
38
39 #include "zebra/qtraceq.inc"
40 #include "zebra/qstore.inc"
41
42       JW    = JWORD(1)
43       JWN   = JW-1 + NWORDS(1)
44       IF (JWN.LE.JW)               GO TO 88
45       KGONG = LQSTA(KQT+2) - 1
46       LLNG  = KGONG
47       KGOPL = KGONG - 1
48       LLPL  = KGOPL
49       KEYPL = -1
50       KEYNG =  0
51       IFL   =  0
52
53       LN    = LGO
54       KEYN  = IQ(KQS+LN+JW)
55       IF (KEYN.LT.0 )              GO TO 62
56
57 C--------          +VE IN-SEQUENCE LOOP FOR BANKS WITH +VE KEY
58 C--                          KEEP GOING FOR INCREASING KEYS
59
60    21 LQ(KQS+LLPL) = LN
61       GO TO 24
62
63    23 KEYPL = KEYN
64       LLPL  = LN
65       LN    = LQ(KQS+LN)
66       IF (LN.EQ.0)                 GO TO 81
67       KEYN  = IQ(KQS+LN+JW)
68       IF (KEYN.LT.0 )              GO TO 61
69    24 IF (KEYN-KEYPL)        28, 25, 23
70
71    25 JSW = 7
72       LC  = LLPL
73       GO TO 71
74
75    28 LS = KGOPL
76
77 C--------          OUT-SEQUENCE LOOP, FIND PLACE FOR BANK IN THE CHAIN
78 C--                          OF BANKS ALREADY SORTED, +VE OR -VE CHAIN
79
80    41 LNX = LQ(KQS+LN)
81       IFL = 7
82    43 KS  = LS
83       LS  = LQ(KQS+LS)
84       IF (KEYN-IQ(KQS+LS+JW))   48, 45, 43
85
86    45 JSW = 0
87       LC  = LS
88       GO TO 71
89
90    48 LQ(KQS+LN) = LS
91       LQ(KQS+KS) = LN
92       IF (LNX.EQ.0)                GO TO 81
93       LN   = LNX
94       KEYN = IQ(KQS+LN+JW)
95       IF (KEYN.GE.0 )              GO TO 21
96
97 C--------          -VE IN-SEQUENCE LOOP FOR BANKS WITH -VE KEY
98 C--                          KEEP GOING FOR INCREASING KEYS
99
100    61 IFL = 7
101    62 LS = KGONG
102       LQ(KQS+LLNG) = LN
103       IF (KEYNG.NE.0 )             GO TO 64
104
105    63 KEYNG = KEYN
106       LLNG  = LN
107       LN    = LQ(KQS+LN)
108       IF (LN.EQ.0)                 GO TO 81
109       KEYN  = IQ(KQS+LN+JW)
110       IF (KEYN.GE.0 )              GO TO 21
111    64 IF (KEYN-KEYNG)        41, 65, 63
112
113    65 JSW = -7
114       LC  = LLNG
115
116 C--------          COMPARE 2 STRINGS STARTING WITH THE SAME WORD
117
118    71 J   = JW
119    72 J   = J+1
120       KYC = IQ(KQS+LC+J)
121       KYN = IQ(KQS+LN+J)
122
123 C--                  KYN < KYC
124       IF (KYN.GE.0 )               GO TO 74
125       IF (KYC.GE.0 )               GO TO 79
126       GO TO 75
127
128 C--                  KYN > KYC
129    74 IF (KYC.LT.0 )               GO TO 78
130
131    75 IF   (KYN-KYC)         79, 76, 78
132    76 IF (J.LT.JWN)                GO TO 72
133
134 C--                KEYS/N .GE. KEYS/C
135
136    78 IF   (JSW)             63, 43, 23
137
138 C--                KEYS/N .LT. KEYS/C
139
140    79 IF   (JSW)             41, 48, 28
141
142 C----              FINISHED, LINK +VE AND -VE STREAMS, CHAIN K-LINKS
143
144    81 IF (IFL.EQ.0)                GO TO 999
145       LQ(KQS+LLPL) = 0
146       LQ(KQS+LLNG) = LQ(KQS+KGOPL)
147
148       K = LQ(KQS+LGO+2)
149       L = LQ(KQS+KGONG)
150       LQ(KQS+L+2) = K
151       IF (K.NE.0)  LQ(KQS+K)=L
152       LGOP(1) = L
153
154    84 K = L
155       L = LQ(KQS+K)
156       IF (L.EQ.0)                  GO TO 999
157       LQ(KQS+L+2) = K
158       GO TO 84
159
160 C----              SPECIAL CASE NWORDS=1
161
162    88 CALL ZSORTI (IXSTOR,LGOP,JW)
163
164 #include "zebra/qtrace99.inc"
165       RETURN
166       END
167 *      ==================================================
168 #include "zebra/qcardl.inc"