]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzwrt.F
Use tgt_ prefix for binary target directories
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzwrt.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/03/06 10:47:27 mclareni
6* Zebra
7*
8*
9#include "zebra/pilot.h"
10 SUBROUTINE RZWRT(V,N,IOPTB,IEVENT)
11*
12************************************************************************
13*
14* To write array V of length N into the CWD
15* RZ internal routine called by RZVOUT,RZOHN,RZOBKN
16*
17* Called by RZOBKN,RZOHN,RZVOUT
18*
19* Author : R.Brun, B.Holl
20* Written : 26.04.86
21* Last mod: 14.04.94 JDS. Correct(?) handling of end of records
22* 29.07.94 JDS. In case of termination on EOR, last
23* fragment of buffer was converted/copied twice
24*
25************************************************************************
26#if !defined(CERNLIB_FQXISN)
27#include "zebra/zunit.inc"
28#endif
29#include "zebra/rzcl.inc"
30#include "zebra/rzclun.inc"
31#include "zebra/rzcout.inc"
32#include "zebra/rzk.inc"
33#include "zebra/mzioc.inc"
34 DIMENSION V(N)
35*
36*-----------------------------------------------------------------------
37*
38*
39* Event continued?
40*
41 IF(IEVENT.EQ.1.AND.IP1.GT.LREC) THEN
42 IF(IRLOUT.EQ.IR1)THEN
43 IR=IR2
44 ELSE
45 IR=IRLOUT+1
46 ENDIF
47 IP1 = 1
48 IROUT = IR
49 IRLOUT = IR
50 ENDIF
51
52 NREC = N + IP1 - 1
53 NLEFT=LREC-IP1+1
54 IF(N.LE.NLEFT)THEN
55 NP1=N
56 ELSE
57 NP1=NLEFT
58 ENDIF
59#if !defined(CERNLIB_FQXISN)
60 IF(IMODEX.GT.0.AND.IOPTB.NE.1)THEN
61 NWFOTT = N
62 NWFODN = 0
63 NWFOAV = NP1
64 CALL FZOCV(V,IQ(KQSP+LROUT+IP1))
65 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
66 IQUEST(1)=0
67 ELSE
68#endif
69 CALL UCOPY(V,IQ(KQSP+LROUT+IP1),NP1)
70#if !defined(CERNLIB_FQXISN)
71 ENDIF
72#endif
73 IF(IP1.EQ.1)THEN
74 IROUT =IRLOUT
75 ENDIF
76 IP1=IP1+NP1
77 IF(IP1.GT.LREC)THEN
78 CALL RZIODO(LUN,LREC,IRLOUT,IQ(KQSP+LROUT+1),2)
79 IF(IQUEST(1).NE.0)GO TO 99
80 IF(LRIN.NE.0)THEN
81 IF(IQ(KQSP+LTOP+KIRIN).EQ.IRLOUT)THEN
82 IQ(KQSP+LTOP+KIRIN)=0
83 ENDIF
84 ENDIF
85 IF(IRLOUT.EQ.IR1)THEN
86 IR=IR2
87 ELSE
88 IR=IRLOUT+1
89 ENDIF
90* JDS 14/04/94
91 IF(IR.EQ.0) GOTO 99
92 10 IP1=1
93 NW=N-NP1
94 IF(NW.GT.LREC)NW=LREC
95 IF(NW.LT.LREC.AND.IOPTRR.NE.0)THEN
96 CALL RZIODO(LUN,LREC,IR,IQ(KQSP+LROUT+1),1)
97 IF(IQUEST(1).NE.0)GO TO 99
98 ENDIF
99#if !defined(CERNLIB_FQXISN)
100 IF(IMODEX.GT.0.AND.IOPTB.NE.1)THEN
101
102 IF(NWFOAV.LT.0)THEN
103*
104* Case when output buffer overflowed (double precision conversion)
105*
106 NWFOAV=NW-1
107 IQ(KQSP+LROUT+1)=IQ(KQSP+LROUT+LREC+1)
108 CALL FZOCV(V,IQ(KQSP+LROUT+2))
109 ELSE
110*
111* Normal case
112*
113 NWFOAV=NW
114 CALL FZOCV(V,IQ(KQSP+LROUT+1))
115 ENDIF
116
117 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
118 IQUEST(1)=0
119 IF(NW.EQ.LREC) THEN
120 CALL RZIODO(LUN,NW,IR,IQ(KQSP+LROUT+1),2)
121 IF(IQUEST(1).NE.0)GO TO 99
122 ENDIF
123 ELSE
124#endif
125 IF(NW.EQ.LREC) THEN
126 CALL RZIODO(LUN,NW,IR,V(NP1+1),2)
127 IF(IQUEST(1).NE.0)GO TO 99
128 ELSE
129 CALL UCOPY(V(NP1+1),IQ(KQSP+LROUT+IP1),NW)
130 ENDIF
131#if !defined(CERNLIB_FQXISN)
132 ENDIF
133#endif
134 IRLOUT=IR
135 IROUT =IR
136 IP1=IP1+NW
137 NP1=NP1+NW
138*
139* JDS 29/07/94
140*
141* IF(NP1.GE.N) GOTO 99
142*
143* JDS 31/10/94
144*
145* All data written - fill output buffer if on a record boundary
146*
147 IF(NP1.GE.N) THEN
148 IF(MOD(NREC,LREC).EQ.0)THEN
149#if !defined(CERNLIB_FQXISN)
150 IF(IMODEX.GT.0.AND.IOPTB.NE.1)THEN
151* NWFODN = 0
152* IF(NWFOAV.LT.0)THEN
153* NWFOAV=NW-1-NP1
154* IQ(KQSP+LROUT+IP1-NW)=IQ(KQSP+LROUT+LREC+1)
155* CALL FZOCV(V,IQ(KQSP+LROUT+IP1-NW+1))
156* ELSE
157* NWFOAV=NW-NP1
158* CALL FZOCV(V,IQ(KQSP+LROUT+IP1-NW))
159* ENDIF
160* IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
161* IQUEST(1)=0
162 ELSE
163#endif
164*
165* Fill output buffer for the case when vector ends on
166* a record boundary (already filled if data conversion
167* performed).
168*
169 CALL UCOPY(V(NP1-NW+1),IQ(KQSP+LROUT+IP1-NW),NW)
170#if !defined(CERNLIB_FQXISN)
171 ENDIF
172#endif
173 ENDIF
174 GO TO 99
175 ENDIF
176 IR =IR+1
177 GO TO 10
178 ENDIF
179#if !defined(CERNLIB_FQXISN)
180 GO TO 99
181*
182* Conversion problem
183*
184 95 IQUEST(1) =5
185 IQUEST(11)=NWFOTT
186 IQUEST(12)=NWFORE
187 IQUEST(13)=NWFOAV
188 IQUEST(14)=NWFODN
189 IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,1000)
190 1000 FORMAT(' RZOUT/RZVOUT. Error during conversion into',
191 + ' exchange format detected by RZWRT')
192*1000 FORMAT(' RZWRT. Error during conversion into exchange format')
193#endif
194*
195 99 RETURN
196 END