]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzpath.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzpath.F
CommitLineData
fe4da5cc 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