]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/qutil/zsorv.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / qutil / zsorv.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/04/18 16:13:46 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 ZSORV (IXSTOR,LGOP,JWORD,NWORDS)
14
15C- SORT BANKS AT LGO SUCH THAT THE 'NWORDS' LONG KEY STRINGS
16C- STARTING AT Q(L+JWORD) ARE IN INCREASING ORDER
17
18#include "zebra/mqsys.inc"
19C-------------- END CDE --------------
20 DIMENSION JWORD(9), NWORDS(9), LGOP(9)
21 REAL KEYN, KEYPL, KEYNG, KYN, KYC
22#if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
23 DIMENSION NAMESR(2)
24 DATA NAMESR / 4HZSOR, 4HV /
25#endif
26#if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
27 DATA NAMESR / 6HZSORV /
28#endif
29#if !defined(CERNLIB_QTRHOLL)
30 CHARACTER NAMESR*8
31 PARAMETER (NAMESR = 'ZSORV ')
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 = Q(KQS+LN+JW)
55 IF (KEYN.LT.0.) GO TO 62
56
57C-------- +VE IN-SEQUENCE LOOP FOR BANKS WITH +VE KEY
58C-- 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 = Q(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
77C-------- OUT-SEQUENCE LOOP, FIND PLACE FOR BANK IN THE CHAIN
78C-- 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- Q(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 = Q(KQS+LN+JW)
95 IF (KEYN.GE.0.) GO TO 21
96
97C-------- -VE IN-SEQUENCE LOOP FOR BANKS WITH -VE KEY
98C-- 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 = Q(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
116C-------- COMPARE 2 STRINGS STARTING WITH THE SAME WORD
117
118 71 J = JW
119 72 J = J+1
120 KYC = Q(KQS+LC+J)
121 KYN = Q(KQS+LN+J)
122
123C-- KYN < KYC
124 IF (KYN.GE.0.) GO TO 74
125 IF (KYC.GE.0.) GO TO 79
126 GO TO 75
127
128C-- 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
134C-- KEYS/N .GE. KEYS/C
135
136 78 IF (JSW) 63, 43, 23
137
138C-- KEYS/N .LT. KEYS/C
139
140 79 IF (JSW) 41, 48, 28
141
142C---- 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
160C---- SPECIAL CASE NWORDS=1
161
162 88 CALL ZSORT (IXSTOR,LGOP,JW)
163
164#include "zebra/qtrace99.inc"
165 RETURN
166 END
167* ==================================================
168#include "zebra/qcardl.inc"