]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/tcgen/sorcha.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / tcgen / sorcha.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/02/15 17:49:49 mclareni
6* Kernlib
7*
8*
9#include "kerngen/pilot.h"
10 SUBROUTINE SORCHA (A,ICH1,ICH2,NPOINT,ITYPE)
11C
12C CERN PROGLIB# M104 SORCHA .VERSION KERNFOR 4.08 840613
13C ORIG. 29/05/84 H.RENSHALL/CERN
14C
15C FORTRAN 77 SUBROUTINE TO DO SLOW LINEAR SORT OF A CHARACTER ARRAY
16C INTO ITSELF IN ASCENDING OR DESCENDING ORDER USING EITHER THE
17C LOGICAL COLLATION SEQUENCE FUNCTIONS (LLE,LGE) OR THE RELATIONAL
18C FUNCTIONS (LE,GE). ON CDC AND VAX THE RESULTS ARE THE SAME AND
19C MATCH THE COLLATION SEQUENCE ORDERING ON IBM IN WHICH BLANK IS
20C LESS THAN NUMBERS WHICH ARE LESS THAN LETTERS. THE SORT MAY BE
21C DONE ON ARRAYS OF UP TO LENGTH 256 CHARACTERS PER ARRAY ELEMENT
22C AND MAY BE DONE ON ANY POSITIONS IN THE CHARACTER FIELD.
23C
24C A = INPUT CHARACTER ARRAY OF DIMENSION NPOINT TO BE SORTED.
25C MAXIMUM LENGTH OF A IS CHARACTER*256
26C ICH1 = FIRST CHARACTER POSTION IN EACH ELEMENT OF A
27C OF THE FIELD TO BE SORTED
28C ICH2 = LAST CHARACTER POSITION IN EACH ELEMENT OF A
29C OF THE FIELD TO BE SORTED
30C NPOINT= THE FIRST NPOINT ELEMENTS OF A WILL BE SORTED INTO THEMSELVES
31C ITYPE = INTEGER BETWEEN 1 AND 4 CONTROLLING THE TYPE OF SORT.
32C 1 = ASCENDING SORT (A(1) WILL BE LOWER THAN A(2))
33C USING COLLATING SEQUENCE
34C 2 = DESCENDING SORT (A(2) WILL BE LOWER THAN A(1))
35C USING COLLATING SEQUENCE
36C 3 = ASCENDING SORT (A(1) WILL BE LOWER THAN A(2))
37C USING RELATIONAL SEQUENCE
38C 4 = DESCENDING SORT (A(2) WILL BE LOWER THAN A(1))
39C USING RELATIONALIEQUENCE
40C FOR PORTABLE RESULTS ITYPE= 1 OR 2 SHOULD BE USED.
41C ON SOME MACHINES (CDC/FTN5 AND VAX/VMS) RESULTS
42C ARE THE SAME AS ITYPE= 3 OR 4. NOTE THAT ITYPE= 3 OR 4
43C MAY BE SUBSTANTIALLY FASTER THAN ITYPE= 1 OR 2.
44C
45 CHARACTER*(*) A(NPOINT),STORE*256
46 LENA= LEN(A(1))
47 GO TO (5,25,45,75),ITYPE
48 5 CONTINUE
49C
50C ASCENDING COLLATION SEQUENCE SORT USING LLE FUNCTION
51C ON MOST MACHINES THIS IS THE ASCII ORDER WHERE
52C BLANK IS LESS THAN NUMBERS IS LESS THAN LETTERS
53C THIS IS TRUE ON IBM/FACOM COMPILER, CDC/FTN5 AND VAX/VMS.
54C
55 DO 20 I=1,NPOINT-1
56 IPOINT= I
57 STORE(1:LENA)= A(I)
58 DO 10 J=I+1,NPOINT
59 IF(LLE(A(I)(ICH1:ICH2),A(J)(ICH1:ICH2))) GO TO 10
60 A(I)= A(J)
61 IPOINT= J
62 10 CONTINUE
63 A(IPOINT)= STORE(1:LENA)
64 20 CONTINUE
65 RETURN
66 25 CONTINUE
67C
68C DESCENDING COLLATION SEQUENCE SORT USING LGE FUNCTION
69C ON MOST MACHINES THIS IS THE ASCII ORDER WHERE
70C BLANK IS LESS THAN NUMBERS IS LESS THAN LETTERS
71C THIS IS TRUE ON IBM/FACOM COMPILER, CDC/FTN5 AND VAX/VMS.
72C
73 DO 40 I=1,NPOINT-1
74 IPOINT= I
75 STORE(1:LENA)= A(I)
76 DO 30 J=I+1,NPOINT
77 IF(LGE(A(I)(ICH1:ICH2),A(J)(ICH1:ICH2))) GO TO 30
78 A(I)= A(J)
79 IPOINT= J
80 30 CONTINUE
81 A(IPOINT)= STORE(1:LENA)
82 40 CONTINUE
83 RETURN
84 45 CONTINUE
85C
86C ASCENDING RELATIONAL SEQUENCE SORT USING LE RELATION
87C ON MANY MACHINES THIS IS THE ASCII ORDER WHERE
88C BLANK IS LESS THAN NUMBERS IS LESS THAN LETTERS
89C THIS IS TRUE ON CDC/FTN5 AND VAX/VMS.
90C ON IBM/FACOM COMPILER HOWEVER THE EBCDIC ORDER IS USED WHERE
91C BLANK IS LESS THAN LETTERS IS LESS THAN NUMBERS
92C
93 DO 60 I=1,NPOINT-1
94 IPOINT= I
95 STORE(1:LENA)= A(I)
96 DO 50 J=I+1,NPOINT
97 IF(A(I)(ICH1:ICH2).LE.A(J)(ICH1:ICH2)) GO TO 50
98 A(I)= A(J)
99 IPOINT= J
100 50 CONTINUE
101 A(IPOINT)= STORE(1:LENA)
102 60 CONTINUE
103 RETURN
104 75 CONTINUE
105C
106C DESCENDING RELATIONAL SEQUENCE SORT USING GE RELATION
107C ON MANY MACHINES THIS IS THE ASCII ORDER WHERE
108C BLANK IS LESS THAN NUMBERS IS LESS THAN LETTERS
109C THIS IS TRUE ON CDC/FTN5 AND VAX/VMS.
110C ON IBM/FACOM COMPILER HOWEVER THE EBCDIC ORDER IS USED WHERE
111C BLANK IS LESS THAN LETTERS IS LESS THAN NUMBERS
112C
113 DO 90 I=1,NPOINT-1
114 IPOINT= I
115 STORE(1:LENA)= A(I)
116 DO 80 J=I+1,NPOINT
117 IF(A(I)(ICH1:ICH2).GE.A(J)(ICH1:ICH2)) GO TO 80
118 A(I)= A(J)
119 IPOINT= J
120 80 CONTINUE
121 A(IPOINT)= STORE(1:LENA)
122 90 CONTINUE
123 RETURN
124 END