]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 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 |