]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/packlib/zebra/rz/rzpath.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzpath.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1996/03/06 10:47:26  mclareni
6 * Zebra
7 *
8 *
9 #include "zebra/pilot.h"
10       SUBROUTINE RZPATH(CHPATH)
11 ************************************************************************
12 *
13 *       RZPATH will decode the character string CHPATH into a character
14 *        array CHPAT(1),,CHPAT(NLPAT)
15 *        where NLPAT is the number of levels starting from the root directory
16 *
17 * Input:
18 *   *CHPATH* Character variable  specifying the pathname
19 *
20 * Called by RZCDIR,RZCOPY,RZLDIR,RZNDIR
21 *
22 *  Author  : R.Brun DD/US/PD
23 *  Written : 01.04.86
24 *  Last mod: 15.11.91 J.Shiers Support Unix-style .. as well as \
25 *
26 ************************************************************************
27 #include "zebra/zbcdch.inc"
28                      CHARACTER*1  BSLASH,KTILDE
29 #include "zebra/zunit.inc"
30 #include "zebra/rzdir.inc"
31       CHARACTER*(*) CHPATH
32       CHARACTER*1 CH1
33       CHARACTER*2 CH2
34 *
35 *-----------------------------------------------------------------------
36 *
37       BSLASH=CQALLC(61:61)
38       KTILDE=CQALLC(94:94)
39       NCHP=LEN(CHPATH)
40       NLPAT=0
41   10  IF(CHPATH(NCHP:NCHP).EQ.' ')THEN
42          NCHP=NCHP-1
43          IF(NCHP.GT.0)GO TO 10
44          NLPAT=NLCDIR
45          DO 20 I=1,NLCDIR
46             CHPAT(I)=CHCDIR(I)
47   20     CONTINUE
48          GO TO 99
49       ENDIF
50 *
51       IS1=1
52   30  IF(CHPATH(IS1:IS1).EQ.' ')THEN
53          IS1=IS1+1
54          GO TO 30
55       ENDIF
56 *
57       CH1=CHPATH(IS1:IS1)
58       CH2=CHPATH(IS1:IS1+1)
59       IF(CH1.EQ.'/')THEN
60          IF(CHPATH(IS1+1:IS1+1).EQ.'/')THEN
61 *
62 *           Case where Path starts with //Topdirectory
63 *
64             IS=IS1+2
65             IF(IS.GT.NCHP)GO TO 99
66   40        IF(CHPATH(IS:IS).EQ.'/')THEN
67                IF(IS.EQ.IS1+2)GO TO 90
68                NLPAT=1
69                CHPAT(1)=CHPATH(IS1+2:IS-1)
70                IS1=IS+1
71                IS=IS1
72                GO TO 50
73             ELSE
74                IS=IS+1
75                IF(IS.LT.NCHP)GO TO 40
76                NLPAT=1
77                CHPAT(1)=CHPATH(IS1+2:IS)
78                GO TO 99
79             ENDIF
80          ENDIF
81 *
82 *           Case where Path starts just below topdirectory /a/b/c
83 *
84          IF(CHPATH(IS1+1:IS1+1).EQ.BSLASH)GO TO 90
85          IF(CHPATH(IS1+1:IS1+1).EQ.KTILDE)GO TO 90
86          NLPAT=1
87          CHPAT(1)=CHCDIR(1)
88          IS=IS1+1
89          IS1=IS
90 *
91   50     IF(IS.EQ.NCHP)THEN
92             IF(CHPATH(IS1:IS).NE.'..'.AND.
93      +         CHPATH(IS1:IS).NE.BSLASH) THEN
94                NLPAT=NLPAT+1
95                IF(NLPAT.GT.NLPATM)GO TO 90
96                CHPAT(NLPAT)=CHPATH(IS1:IS)
97             ELSE
98                NLPAT = NLPAT -1
99             ENDIF
100             GO TO 99
101          ELSE
102             IF(CHPATH(IS:IS).EQ.'/')THEN
103                IF(NLPAT.GT.NLPATM)GO TO 90
104                IF(CHPATH(IS1:IS-1).NE.'..'.AND.
105      +            CHPATH(IS1:IS-1).NE.BSLASH) THEN
106                   NLPAT=NLPAT+1
107                   CHPAT(NLPAT)=CHPATH(IS1:IS-1)
108                ELSE
109                   NLPAT = NLPAT - 1
110                ENDIF
111                IS1=IS+1
112             ENDIF
113             IS=IS+1
114             GO TO 50
115          ENDIF
116       ENDIF
117 *
118 *          Case where Path is relative to the naming directory
119 *
120       IF(CH1.EQ.KTILDE)THEN
121          NLPAT=NLNDIR
122          DO 60 I=1,NLNDIR
123             CHPAT(I)=CHNDIR(I)
124   60     CONTINUE
125          IF(IS1.EQ.NCHP)GO TO 99
126          IS1=IS1+1
127          CH1=CHPATH(IS1:IS1)
128          GO TO 75
129       ENDIF
130 *
131 *          Case where Path is relative to the working directory
132 *
133       DO 70 I=1,NLCDIR
134          CHPAT(I)=CHCDIR(I)
135   70  CONTINUE
136       NLPAT=NLCDIR
137 *
138   75  IF(CH1.EQ.BSLASH)THEN
139          NLPAT=NLPAT-1
140          IF(NLPAT.EQ.0)NLPAT=1
141          IF(IS1.EQ.NCHP)GO TO 99
142          IS1=IS1+1
143          CH1=CHPATH(IS1:IS1)
144          GO TO 75
145       ENDIF
146 *
147       IS=IS1
148   76  IF(CH2.EQ.'..')THEN
149          NLPAT=NLPAT-1
150          IF(NLPAT.EQ.0)NLPAT=1
151          IF(IS1+1.EQ.NCHP)GO TO 99
152          IF(CHPATH(IS1+2:IS1+2).NE.'/') GOTO 90
153          IS =IS1
154          IS1=IS1+3
155          CH2=CHPATH(IS1:IS1+1)
156          GO TO 76
157       ENDIF
158 *
159   80  IF(IS.EQ.NCHP)THEN
160          NLPAT=NLPAT+1
161          IF(NLPAT.GT.NLPATM)GO TO 90
162          CHPAT(NLPAT)=CHPATH(IS1:IS)
163          GO TO 99
164       ELSE
165          IF(CHPATH(IS:IS).EQ.'/')THEN
166             IF(IS.GT.IS1)THEN
167                NLPAT=NLPAT+1
168                IF(NLPAT.GT.NLPATM)GO TO 90
169                CHPAT(NLPAT)=CHPATH(IS1:IS-1)
170             ENDIF
171             IS1=IS+1
172          ENDIF
173          IS=IS+1
174          GO TO 80
175       ENDIF
176 *
177 *           Error in Pathname
178 *
179   90  NLPAT=0
180 *
181   99  RETURN
182       END