]>
Commit | Line | Data |
---|---|---|
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 | ||
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 | 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 | ||
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 = 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 | ||
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- 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 | ||
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 = 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 | ||
116 | C-------- 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 | ||
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 ZSORT (IXSTOR,LGOP,JW) | |
163 | ||
164 | #include "zebra/qtrace99.inc" | |
165 | RETURN | |
166 | END | |
167 | * ================================================== | |
168 | #include "zebra/qcardl.inc" |