This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / gsnext.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:56  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.30  by  S.Giani
11 *-- Author :
12       SUBROUTINE GSNEXT (MOTHER,IN,NLIST,LIST)
13 C.
14 C.    ******************************************************************
15 C.    *                                                                *
16 C.    *     Gives an ordered LIST of NLIST daughter volumes to search  *
17 C.    *     for when leaving the INth daughter of the volume MOTHER    *
18 C.    *                                                                *
19 C.    *     Default facility :                                         *
20 C.    *         If IN = 0, for each content in turn, GSNEXT builds a   *
21 C.    *         LIST  limited to next (if any), previous (if any) and  *
22 C.    *         current content                                        *
23 C.    *                                                                *
24 C.    *     Called by : 'USER'                                         *
25 C.    *     Author    : F.Bruyant  *********                           *
26 C.    *                                                                *
27 C.    ******************************************************************
28 C.
29 #include "geant321/gcbank.inc"
30 #include "geant321/gcunit.inc"
31 #include "geant321/gcnum.inc"
32       CHARACTER*4 MOTHER
33       DIMENSION LIST(*)
34 C.    ------------------------------------------------------------------
35 *
36       IVO = 0
37       IF (JVOLUM.GT.0) CALL GLOOK (MOTHER, IQ(JVOLUM+1), NVOLUM, IVO)
38       IF (IVO.EQ.0) THEN
39          WRITE (CHMAIL, 1001)
40          CALL GMAIL (0, 0)
41          GO TO 999
42       ENDIF
43 *
44 * *** Check that volume MOTHER has contents positioned by GSPOS or
45 *      GSPOSP, and not ordered by User
46 *
47       JVO    = LQ(JVOLUM-IVO)
48       ISEARC = Q(JVO+1)
49       NIN    = Q(JVO+3)
50       IF (NIN.LE.0.OR.ISEARC.GT.0) THEN
51          WRITE (CHMAIL, 1002)
52          CALL GMAIL (0, 0)
53          GO TO 999
54       ENDIF
55 *
56       IF (IN.GT.0) THEN
57 *
58 * ***    Lift a JNEAR bank for current content
59 *
60          JIN = LQ(JVO-IN)
61          CALL MZBOOK (IXCONS, JNEAR,JIN,-1,'VONE', 0,0,NLIST+1, 2,0)
62          IQ(JNEAR-5) = 100*IVO +IN
63          NVOLST = 0
64          DO 19 I = 1,NLIST
65             IF(LIST(I).GT.NIN.OR.LIST(I).LT.0) THEN
66                WRITE(CHMAIL,1003) IQ(JVOLUM+IVO),I,LIST(I),NIN
67                CALL GMAIL(0,0)
68             ELSE
69                DO 20 J=1, NVOLST
70                   IF(IQ(JNEAR+1+J).EQ.LIST(I)) THEN
71                      WRITE(CHMAIL,1004) IQ(JVOLUM+IVO), LIST(I)
72                      CALL GMAIL(0,0)
73                      GOTO 19
74                   ENDIF
75    20          CONTINUE
76                NVOLST = NVOLST+1
77                IQ(JNEAR+NVOLST+1) = LIST(I)
78             ENDIF
79    19    CONTINUE
80          IQ(JNEAR+1) = NVOLST
81          IF(NVOLST.LT.NLIST) THEN
82              CALL MZPUSH (IXCONS, JNEAR, 0, NVOLST-NLIST, 'R')
83          ENDIF
84 *
85       ELSE IF (IN.EQ.0) THEN
86 *
87 * ***    Default option for all contents
88 *
89          DO 49 I = 1,NIN
90             JIN = LQ(JVO-I)
91             IF (LQ(JIN-1).NE.0) GO TO 49
92             N = 3
93             IF (I.EQ.1.OR.I.EQ.NIN) N = 2
94             CALL MZBOOK (IXCONS, JNEAR,JIN,-1,'VONE',0,0,N+1, 2,0)
95             IQ(JNEAR-5) = 100*IVO+I
96             JVO = LQ(JVOLUM-IVO)
97             IQ(JNEAR+1)  = N
98             IQ(JNEAR+N+1) = I
99             IF (I.NE.1) GO TO 41
100             IQ(JNEAR+N) = I +1
101             GO TO 49
102    41       IF (I.NE.NIN) GO TO 42
103             IQ(JNEAR+N) = I -1
104             GO TO 49
105    42       IQ(JNEAR+N)   = I +1
106             IQ(JNEAR+N-1) = I -1
107    49    CONTINUE
108 *
109       ENDIF
110 *
111  1001 FORMAT (' GSNEXT : Volume',A4,' does not exist  *****')
112  1002 FORMAT (' GSNEXT : Volume',A4,' not a candidate for GSNEXT *****')
113  1003 FORMAT (' GSNEXT : Volume ',A4,': LIST(',I3,')=',I3,
114      +        ' NIN=',I3,' value ignored')
115  1004 FORMAT (' GSNEXT : Volume',A4,': repetition of content ',
116      +        I3,' ignored')
117 *                                                             END GSNEXT
118   999 END