5 * Revision 1.2 1997/01/28 10:43:18 jamie
6 * bug fix for dble precision on record boundary from Marthe Brun
8 * Revision 1.1.1.1 1996/03/06 10:47:26 mclareni
12 #include "zebra/pilot.h"
13 SUBROUTINE RZREAD(V,N,IPC,IFORM)
15 ************************************************************************
17 * Read N words from input buffer into V
19 * Called by RZIN,RZINS,RZVIN
21 * Author : R.Brun, B.Holl
23 * Last mod: 17.05.93 Change test on IFOCON(1) to .LT.0
24 * 28.01.97 Several changes (commented) regarding double
25 * precision words falling on record boundaries
27 ************************************************************************
28 #if !defined(CERNLIB_FQXISN)
29 #include "zebra/zunit.inc"
31 #include "zebra/rzcl.inc"
32 #include "zebra/rzclun.inc"
33 #include "zebra/rzcout.inc"
34 #include "zebra/rzk.inc"
35 #include "zebra/mzioc.inc"
38 *-----------------------------------------------------------------------
49 IS1 =IPC-NL1-NBEF*LREC
54 CALL MZBOOK(JQPDVS,LRIN,LTOP,-7,'RZIN',0,0,LREC+1,2,-1)
55 IQ(KQSP+LRIN-5)=IQ(KQSP+LTOP-5)
59 IRIN=IQ(KQSP+LTOP+KIRIN)
65 IROUT=IQ(KQSP+LTOP+KIROUT)
69 CALL RZIODO(LUN,LREC,IRS,IQ(KQSP+LRIN+1),1)
70 IF(IQUEST(1).NE.0)GO TO 90
72 IQ(KQSP+LTOP+KIRIN)=IRIN
76 * Read record into array V
78 #if !defined(CERNLIB_FQXISN)
79 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
96 #if !defined(CERNLIB_FQXISN)
97 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
99 CALL FZICV(IQ(KQSP+LRIN+IS1),V)
100 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
101 IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LRIN+IS1+NP1-1)
105 CALL UCOPY(IQ(KQSP+LRIN+IS1),V,NP1)
106 #if !defined(CERNLIB_FQXISN)
110 #if !defined(CERNLIB_FQXISN)
111 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
113 CALL FZICV(IQ(KQSP+LROUT+IS1),V)
114 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
115 IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LROUT+IS1+NP1-1)
119 CALL UCOPY(IQ(KQSP+LROUT+IS1),V,NP1)
120 #if !defined(CERNLIB_FQXISN)
133 #if !defined(CERNLIB_FQXISN)
134 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
135 CALL RZIODO(LUN,LREC,IRS+I-1,IQ(KQSP+LRIN+1),1)
136 IF(IQUEST(1).NE.0)GO TO 90
138 CALL UCOPY2(IQ(KQSP+LRIN+1),IQ(KQSP+LRIN+2),LREC)
139 IQ(KQSP+LRIN+1)=IDOUB1
140 * need to convert one extra word if double falls on record boundary
142 CALL FZICV(IQ(KQSP+LRIN+1),V)
143 CALL UCOPY2(IQ(KQSP+LRIN+2),IQ(KQSP+LRIN+1),LREC)
146 CALL FZICV(IQ(KQSP+LRIN+1),V)
148 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
149 * IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LROUT+LREC)
151 IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LRIN+LREC)
155 CALL RZIODO(LUN,LREC,IRS+I-1,V(NP1+1),1)
156 IF(IQUEST(1).NE.0)GO TO 90
157 #if !defined(CERNLIB_FQXISN)
164 IF(IRIN.NE.IROUT)THEN
165 CALL RZIODO(LUN,LREC,IRIN,IQ(KQSP+LRIN+1),1)
166 IF(IQUEST(1).NE.0)GO TO 90
167 #if !defined(CERNLIB_FQXISN)
168 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
170 CALL UCOPY2(IQ(KQSP+LRIN+1),IQ(KQSP+LRIN+2),LREC)
171 IQ(KQSP+LRIN+1)=IDOUB1
172 * need to convert one extra word if double falls on record boundary
174 CALL FZICV(IQ(KQSP+LRIN+1),V)
175 CALL UCOPY2(IQ(KQSP+LRIN+2),IQ(KQSP+LRIN+1),LREC)
178 CALL FZICV(IQ(KQSP+LRIN+1),V)
180 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
181 IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LRIN+NL)
185 CALL UCOPY(IQ(KQSP+LRIN+1),V(NP1+1),NL)
186 #if !defined(CERNLIB_FQXISN)
189 IQ(KQSP+LTOP+KIRIN)=IRIN
191 #if !defined(CERNLIB_FQXISN)
192 IF(IMODEX.GT.0.AND.IFORM.NE.1)THEN
194 CALL UCOPY2(IQ(KQSP+LROUT+1),IQ(KQSP+LROUT+2),LREC)
195 IQ(KQSP+LROUT+1)=IDOUB1
196 * need to convert one extra word if double falls on record boundary
198 CALL FZICV(IQ(KQSP+LROUT+1),V)
199 CALL UCOPY2(IQ(KQSP+LROUT+2),IQ(KQSP+LROUT+1),LREC)
202 CALL FZICV(IQ(KQSP+LROUT+1),V)
204 IF(NWFOAV.GT.0.OR.IFOCON(1).LT.0)GO TO 95
205 IF(NWFOAV.LT.0)IDOUB1=IQ(KQSP+LROUT+NL)
209 CALL UCOPY(IQ(KQSP+LROUT+1),V(NP1+1),NL)
210 #if !defined(CERNLIB_FQXISN)
218 #if defined(CERNLIB_QMVAX)
219 IF(IRELAT.NE.0)UNLOCK(UNIT=LUN)
221 #if !defined(CERNLIB_FQXISN)
228 IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,1000)
229 1000 FORMAT(' RZREAD. Error during conversion into native format')