5 * Revision 1.7 1998/09/25 09:33:41 mclareni
6 * Modifications for the Mklinux port flagged by CERNLIB_PPC
8 * Revision 1.6 1997/09/02 15:16:13 mclareni
11 * Revision 1.5 1997/03/14 17:21:20 mclareni
14 * Revision 1.4 1997/01/15 17:41:16 cernlib
15 * disable section calling rzstrip
17 * Revision 1.3 1996/10/17 09:35:04 cernlib
18 * make cfstat an integer function
20 * Revision 1.2 1996/10/16 13:02:53 cernlib
21 * Use CFSTAT with CFIO instead of STATF (for RFIO)
23 * Revision 1.1.1.1 1996/03/06 10:47:25 mclareni
27 #include "zebra/pilot.h"
28 SUBROUTINE RZOPEN(LUNIN,CHDIR,CFNAME,CHOPTT,LRECL,ISTAT)
30 ************************************************************************
32 * Open a ZEBRA/RZ file.
35 * LUNIT Logical unit number
37 * CHOPT Character variable specifying the option
38 * ' ' default, open file in readonly mode
39 * 'L' create file with relative organization (VAX only)
41 * 'S' open file in shared readonly mode
42 * 'U' open file in update mode
43 * 'SU' open file in shared update mode
44 * '1' open file read/write assume single user
45 * 'V' open new RZ file on VSAM file
46 * 'W' return in CHDIR directory name include
48 * 'Y' suppress LRECL consistency check
49 * 'P' Preserve case of file name (Unix)
50 * 'C' Use C I/O (Unix, VMS)
51 * 'X' Exchange mode file
53 * *LRECL* Record length, if zero determine LRECL from input file
56 * CHDIR Character string containing decoded logical unit number
57 * *LRECL* Determined record length
58 * ISTAT Status return code
60 * IQUEST(11) LUNPTR - C I/O pointer
61 * IQUEST(12) Exchange mode flag - set if IOPTX.ne.0
62 * or if exchange mode bit is set in file
67 * Author : R.Brun,J.Shiers
71 * Changes Date Comments
72 * G.Folger 96/10/16 Use CFSTAT with CFIO instead of STATF (for RFIO)
73 * V.Fine 96/07/30 Disable using C I/O to check Fortran I/O under Windows NT
74 * J.Shiers 95/06/20 Warning for auto-recl determination only for >8192
75 * J.Shiers 95/05/24 Use STATF instead of INQUIRE in case of IOPTC
76 * J.Shiers 94/09/21 Increase chopt, correct LUN string
77 * F.Rademakers 94/08/29 Added protection in case CFOPEN fails (no read perm).
78 * Return correct LUN string in case of option W and
79 * C I/O. Print correct error message in case user
80 * opens file with wrong LRECL.
81 * J.Shiers 94/08/18 Increase buffer from 8192 to 8192+512
82 * to permit record length determination upto 8192
83 * R.Brun 94/06/10 Introduce file striping for PIAF
84 * New routine RZSTRIP called
85 * J.Shiers 94/05/18 Add QMDOS flag for parameter NWORD
86 * V.Fine 94/02/07 DEC flag to use DEC Fortran and Windows/NT
87 * A.Lomov 93/09/14 No longer force exchange mode for LINUX
88 * J.Shiers 93/06/30 Set IQUEST(12) to IMODEX
89 * J.Shiers 93/02/15 Set IMODEH to 0
90 * J.Shiers 92/10/19 Alpha compatible record length determination
91 * J.Shiers 92/07/13 QMDOS, QCFIO flags
92 * J.Shiers 92/07/07 Translate filename to uppercase before VMQFIL
93 * J.Shiers 92/03/03 Incorporate MVS mods as follows:
94 * J.Shiers 92/02/26 Use VMQFIL on VM systems to determine record length
95 * J.Shiers 92/02/21 Mods for DESY (length of prefix)
96 * J.Shiers 91/11/27 Add ACTION=READ/READWRITE in VM open statements
97 * J.Shiers 91/11/11 Add C I/O support
98 * M.Marquina 91/06/26 Integrate MVS version
99 #if defined(CERNLIB_IBMMVS)
101 * - IUNIT auf 33XX fuer GSI
102 * - VSAM Option fuer MVS (OPT V) (VSAM Relative record dataset)
103 * To use this option, a dataclass RZFILE must be defined via
104 * SMS with appropriate parameters for default size and extends.
105 * at GSI we use also a dataclass RZDATA for larger files. These
106 * files contain a .RZDATA in their name.
107 * At GSI we use the following definitions for SMS :
109 * DATACLAS STORCLAS MGMTCLAS STORGRP RECORG SPACE
111 * RZFILE(def) STANDARD USERDATA NORMALx VSAM RR 128,128
112 * RZDATA RAWDATA RAWDATA RAWDATA VSAM RR 512,512
116 ************************************************************************
117 #include "zebra/zunit.inc"
118 #include "zebra/rzckey.inc"
119 #include "zebra/rzclun.inc"
120 #include "zebra/quest.inc"
121 #include "zebra/rzbuff.inc"
122 #if defined(CERNLIB_QMUIX)
123 #include "zebra/rzcstr.inc"
125 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_QMAPO)||defined(CERNLIB_QMAPO9)||defined(CERNLIB_QMUIX)||defined(CERNLIB_WINNT)
126 integer cfstat,statf,info(12)
128 CHARACTER*(*) CFNAME,CHDIR,CHOPTT
135 #if defined(CERNLIB_IBMVM)
139 #if defined(CERNLIB_QMVAX)
142 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCVX)||defined(CERNLIB_QMIRT)||defined(CERNLIB_QMIBM)||defined(CERNLIB_QMSGI)||defined(CERNLIB_QMVMI)||defined(CERNLIB_QMSUN)||defined(CERNLIB_QMALT)||defined(CERNLIB_QMHPX)||defined(CERNLIB_QMIBX)
143 PARAMETER (NWORD = 8704)
145 #if (defined(CERNLIB_QMAPO)||defined(CERNLIB_QMVAX)||defined(CERNLIB_QMNXT)||defined(CERNLIB_QMLNX))&&(!defined(CERNLIB_QMAPO9))
146 PARAMETER (NWORD = 8704)
148 #if defined(CERNLIB_QMDOS) || defined(CERNLIB_WINNT)
149 PARAMETER (NWORD = 8704)
151 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)
154 #if defined(CERNLIB_QMCRY)
155 DIMENSION IBUFF(8704)
157 #if defined(CERNLIB_QMVAX)||defined(CERNLIB_QMSGI)||defined(CERNLIB_QMVMI)||(defined(CERNLIB_QFDEC))
160 #if (!defined(CERNLIB_QMCRY))&&(!defined(CERNLIB_QMCV64))&&(!defined(CERNLIB_QMVAX))&&(!defined(CERNLIB_QMSGI))&&(!defined(CERNLIB_QMVMI))&&(!defined(CERNLIB_QFDEC))
163 #if defined(CERNLIB_QMIBM)
166 #if defined(CERNLIB_QMIBMFVS)
170 #if defined(CERNLIB_IBMMVS)
172 CHARACTER*4 IUNIT, ITRK, IRECFM
175 CHARACTER*20 cDataClas
176 * dummy record for VSAM
177 INTEGER RECORD(2048) /2048*0/
178 INTEGER mvsams, kdffil
180 INTEGER*4 ISPACE(3), IDCB(2)
182 DATA ISPACE / 30, 0, 0 /
183 DATA IDCB / 4096, 0 /
184 DATA ITRK / 'TRK' /, IRECFM / 'F' /
186 #if (defined(CERNLIB_IBMMVS))&&(!defined(CERNLIB_NEWLIB))&&(!defined(CERNLIB_GSI))
189 #if (defined(CERNLIB_IBMMVS))&&(!defined(CERNLIB_NEWLIB))&&(defined(CERNLIB_GSI))
190 DATA IUNIT / '33XX' /
192 #if (defined(CERNLIB_IBMMVS))&&(defined(CERNLIB_NEWLIB))
193 DATA IUNIT / 'FAST' /
196 *-----------------------------------------------------------------------
201 IOPT1=INDEX(CHOPT,'1')
202 IOPTC=INDEX(CHOPT,'C')
203 IOPTL=INDEX(CHOPT,'L')
204 IOPTN=INDEX(CHOPT,'N')
205 IOPTS=INDEX(CHOPT,'S')
206 IOPTP=INDEX(CHOPT,'P')
207 IOPTU=INDEX(CHOPT,'U')
208 IOPTV=INDEX(CHOPT,'V')
209 IOPTW=INDEX(CHOPT,'W')
210 IOPTX=INDEX(CHOPT,'X')
211 IOPTY=INDEX(CHOPT,'Y')
222 #if (defined(CERNLIB_QMLNX) && !defined(CERNLIB_PPC))
223 C RZfile with Exchange mode for NonPPC-LINUX
227 #if !defined(CERNLIB_QCFIO)
228 *SELF,IF=-QMCRY,IF=-QMVAX,IF=-QMCV64,IF=-QMAPO,IF=-QMAPO9,IF=-QMUIX,IF=-QMDOS.
230 WRITE(IQPRNT,*) 'RZOPEN. option C ignored - valid only ',
231 + 'for MSDOS, Unix and VMS systems'
235 #if !defined(CERNLIB_QMIBMFVS)
238 #if (defined(CERNLIB_QMIBMFVS))&&(!defined(CERNLIB_IBMMVS))
241 * Search all disks if filemode not specified
243 LCHF = LENOCC(CHFILE)
244 CALL CTRANS('.',' ',CHFILE,1,LCHF)
245 IF(INDEX(CHFILE(1:LCHF),' ').EQ.INDEXB(CHFILE(1:LCHF),' '))
246 + CHFILE = CHFILE(1:LCHF) // ' *'
248 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))
249 *-- Construct MVS file name
250 *-- Don't add prefix if the first character of file name is a dot
251 CALL KPREFI (PREFIX, NCHPRE)
252 IF ( CFNAME(1:1) .EQ. '.' ) THEN
254 CHFILE = '/'//CFNAME(2:NCH)
256 CHFILE = '/'//PREFIX(1:NCHPRE)//CFNAME
259 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCVX)||defined(CERNLIB_QMAPO)||defined(CERNLIB_QMAPO9)||defined(CERNLIB_QMUIX)||defined(CERNLIB_QMDOS)||defined(CERNLIB_QMLNX)||defined(CERNLIB_WINNT)
260 IF(IOPTP.EQ.0)CALL CUTOL(CHFILE)
262 #if defined(CERNLIB_QMVAX)
273 #if !defined(CERNLIB_QMVAX)
276 #if defined(CERNLIB_QMVAX)
280 WRITE(IQPRNT,10000) LRECI
281 10000 FORMAT(' RZOPEN. - invalid record length: ',I6)
284 ELSEIF(LRECI.GE.8191) THEN
285 WRITE(IQPRNT,10100) LRECI
286 10100 FORMAT(' RZOPEN. record length:',I6,
287 + ' > maximum safe value (8191 words).')
288 IF(LRECI.GT.8192) WRITE(IQPRNT,10200)
289 10200 FORMAT(' RZOPEN. Automatic record length determination will not',
290 + ' work with this file.')
292 10300 FORMAT(' RZOPEN. You may have problems transferring your',
293 + ' file to other systems ',/,
294 + ' or writing it to tape.')
297 #if defined(CERNLIB_QMAPO)
298 IF(IOPT1.EQ.0.AND.IOPTU.EQ.0)THEN
304 #if !defined(CERNLIB_QMAPO)
308 * File should already exist. Issue inquire even if IOPTC
310 LENF = LENOCC(CHFILE)
312 #ifndef CERNLIB_QFMSOFT
313 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_QMAPO)||defined(CERNLIB_QMAPO9)||defined(CERNLIB_QMUIX)||defined(CERNLIB_WINNT)
317 INQUIRE(FILE=CHFILE,EXIST=IEXIST)
320 #ifndef CERNLIB_QFMSOFT
321 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_QMAPO)||defined(CERNLIB_QMAPO9)||defined(CERNLIB_QMUIX)||defined(CERNLIB_WINNT)
323 IEXIST = CFSTAT(CHFILE(1:LENF),INFO).EQ.0
330 WRITE(IQPRNT,*) 'RZOPEN. Error - input file ',
331 #if defined(CERNLIB_IBM)
332 + CHFILE(2:LENF),' does not exist'
334 #if !defined(CERNLIB_IBM)
335 + CHFILE(1:LENF),' does not exist'
340 #if defined(CERNLIB_QMVAX)
341 IF(IOPTC.EQ.0) INQUIRE(FILE=CHFILE,ORGANIZATION=CHORG)
345 * LRECL=0 was specified, try to determine correct record length
346 * from the file itself.
348 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
352 #if defined(CERNLIB_QMAPO9)
353 OPEN(UNIT=LUNIT,FILE=CHFILE,FORM='UNFORMATTED',
356 #if defined(CERNLIB_QMVAX)
357 INQUIRE(FILE=CHFILE,RECL=LRECL)
361 #if defined(CERNLIB_QMAPO9)
362 INQUIRE(UNIT=LUNIT,RECL=LRECL)
366 #if (defined(CERNLIB_QMIBM))&&(defined(CERNLIB_IBMVM))
368 * Use KERNLIB routine VMQFIL to obtain record length
369 * Previous method (below) does not work for VMSTAGEd files
371 CALL CLTOU(CHFILE(1:LCHF))
372 CALL VMQFIL(CHFILE(2:),RECFM,LRECL,NRECS,NBLOCKS,CHTIME,
377 #if (defined(CERNLIB_QMIBMFVS))&&(!defined(CERNLIB_IBMVM))
379 * Open file for READ to determine record length. JDS
381 OPEN(UNIT=LUNIT,FILE=CHFILE,FORM='UNFORMATTED',
384 READ(UNIT=LUNIT,NUM=LRECL) ITEST
391 * Record length is stored in file but in record # 2
392 * (rec # 1 is used for locks)
394 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)
395 IF(IMODEX.NE.0) ICOUNT = ICOUNT / 2
397 #if defined(CERNLIB_QMCRY)
398 OPEN(LUNIT,FILE=CHFILE,FORM='UNFORMATTED',STATUS='OLD',
399 + RECL=IBYTES*ICOUNT,ACCESS='DIRECT')
401 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
404 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
407 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
410 #if (defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL))&&(!defined(CERNLIB_QMAPO))
411 OPEN(LUNIT,FILE=CHFILE,FORM='UNFORMATTED',STATUS='OLD',
412 + RECL=IBYTES*NREAD,ACCESS='DIRECT',IOSTAT=ISTAT)
413 IF(ISTAT.NE.0)GOTO 60
415 #if defined(CERNLIB_QMAPO)
416 OPEN(LUNIT,FILE=CHFILE,FORM='UNFORMATTED',
417 + STATUS='READONLY',RECL=IBYTES*NREAD,ACCESS='DIRECT'
419 IF(ISTAT.NE.0)GOTO 60
421 #if defined(CERNLIB_QMCRY)
423 CALL READ(LUNIT,ITEST,NREAD,IOS,NUS)
425 CALL READ(LUNIT,IBUFF,NREAD,IOS,NUS)
429 #if defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
430 READ(LUNIT,REC=1,IOSTAT=IOS) (ITEST(JW),JW=1,NREAD)
434 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
435 ICOUNT = ICOUNT * .75
439 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
441 CALL CFOPEN(LUNPTR,0,NREAD,'r',0,CHFILE,IOS)
448 #if defined(CERNLIB_QMCRY)
450 CALL CFGET(LUNPTR,0,NREAD,NWTAK,IBUFF,IOS)
452 CALL CFGET(LUNPTR,0,NREAD,NWTAK,ITEST,IOS)
455 #if defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
456 CALL CFGET(LUNPTR,0,NREAD,NWTAK,ITEST,IOS)
458 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
460 CALL CFCLOS(LUNPTR,0)
461 ICOUNT = ICOUNT * .75
466 #if defined(CERNLIB_QMVAX)||defined(CERNLIB_QMVMI)||defined(CERNLIB_QMDOS)||(defined(CERNLIB_QMLNX) && !defined(CERNLIB_PPC))||defined(CERNLIB_WINNT)
467 IF(IOPTX.NE.0) CALL VXINVB(ITEST(1),NREAD)
469 #if defined(CERNLIB_QMCRY)
471 CALL UNPACK(IBUFF(1),32,ITEST(1),NREAD)
474 #if defined(CERNLIB_QMCV64)
476 CALL UNPAK32(ITEST(1),ITEST(1),100)
478 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
480 * Work out record length
484 * ITEST(J+25) is the pointer in the 2nd record to the
485 * file descriptor block, which by definition must be
488 IF(ITEST(J+25).GT.0.AND.ITEST(J+25).LE.J) THEN
490 * Possible record length
492 LRC = ITEST(J+ITEST(J+25)+1)
497 * Does directory size match (record length)*(number of records)?
498 IF(NRD*LRC.NE.LE) GOTO 30
503 CALL CFCLOS(LUNPTR,0)
512 CALL CFCLOS(LUNPTR,0)
516 #if (defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL))&&(!defined(CERNLIB_FQXISN))
517 IF(IOPTX.EQ.0.AND.IPASS.EQ.0) THEN
519 10400 FORMAT(' RZOPEN. problems determining record length - ',
520 + ' trying EXCHANGE mode.')
527 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
528 WRITE(IQPRNT,*) ' RZOPEN. Error in the input file'
536 #if defined(CERNLIB_QMCV64)||defined(CERNLIB_QMCRY)||defined(CERNLIB_RZFRECL)
540 #if defined(CERNLIB_QMCV64)||defined(CERNLIB_QMCRY)
541 IF(IMODEX.NE.0) NBYTES = NBYTES / 2
543 #if (!defined(CERNLIB_QMIBMFVS))&&(!defined(CERNLIB_QMVAX))
544 OPEN(UNIT=LUNIT,FILE=CHFILE,FORM='UNFORMATTED',
545 + RECL=NBYTES*LRECL,ACCESS='DIRECT',STATUS=STAT,IOSTAT=ISTAT)
547 #if (defined(CERNLIB_QMIBMFVS))&&(!defined(CERNLIB_IBMMVS))
549 * CHOPT: SU = shared,update
550 * S = shared,readonly
553 * 1 = single user read/write
556 IF(IOPTN.NE.0.OR.IOPTU.NE.0.OR.IOPT1.NE.0) CHACT = 'READWRITE'
558 INQUIRE(FILE=CHFILE,EXIST=IEXIST)
559 IF(.NOT.IEXIST) GOTO 60
562 CALL FILEINF(ISTAT,'MAXREC',2)
563 IF(ISTAT.NE.0)GOTO 60
565 OPEN(UNIT=LUNIT,FILE=CHFILE,FORM='UNFORMATTED',RECL=4*LRECL,
567 + ACCESS='DIRECT',STATUS=STAT,IOSTAT=ISTAT)
568 IF(ISTAT.NE.0)GOTO 60
571 CALL FILEINF(ISTAT,'MAXREC',16777215)
572 IF(ISTAT.NE.0)GOTO 60
573 OPEN(UNIT=LUNIT,FILE=CHFILE,FORM='UNFORMATTED',RECL=4*LRECL,
575 + ACCESS='DIRECT',STATUS=STAT,IOSTAT=ISTAT)
577 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))
579 * CHOPT: SU = shared,update
580 * S = shared,readonly
583 * 1 = single user read/write
586 IF(IOPTN.NE.0.OR.IOPTU.NE.0.OR.IOPT1.NE.0) CHACT = 'READWRITE'
588 IF(IRECL.LE.0) IRECL=IDCB(1)
593 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))&&(!defined(CERNLIB_GSI))
595 *-- open file in read/write mode, read mode only if file
596 *-- name start with a dot (file belonging to an other userid
597 *-- from an other group - racf protection)
599 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))&&(!defined(CERNLIB_NEWLIB))
600 IF ( CFNAME(1:1) .EQ. '.' .AND.
602 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))&&(defined(CERNLIB_NEWLIB))
603 IF ( CFNAME(1:1) .EQ. '.') THEN
605 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))&&(!defined(CERNLIB_NEWLIB))
606 + CFNAME(2:5) .NE. PREFIX(1:4))THEN
607 *SELF,IF=QMIBMFVS,IF=IBMMVS,IF=NEWLIB.
608 * + CFNAME(2:7) .NE. PREFIX(1:6))THEN
610 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))
616 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))
618 OPEN ( UNIT=LUNIT, STATUS='OLD', FILE=CHFILE, ACCESS='DIRECT'
619 +, FORM='UNFORMATTED', IOSTAT=ISTAT
620 +, RECL=IRECL, ACTION=CHACT)
622 WRITE(IQPRNT,*) 'RZOPEN: OPEN Error file ',CHFILE,
629 * detect, whether file really does not exist if opt N given:
630 INQUIRE(FILE=CHFILE,EXIST=IEXIST)
632 WRITE(IQPRNT,*) 'RZOPEN. Warning,input file ',CHFILE
633 + (2:LENOCC(CHFILE)),' already exists !'
637 *-- define file parameters
638 IF( INDEX(CHFILE,'(') .NE. 0 ) THEN
643 + 'RZOPEN: No PDS allowed for VSAM files !'
648 CALL FILEINF ( ISTAT, 'DEVICE', IUNIT, ITRK, ISPACE(1)
649 +, 'SECOND', ISPACE(2), 'DIR', ISPACE(3)
650 +, 'RECFM', IRECFM, 'LRECL', IRECL
651 +, 'BLKSIZE', IDCB(2) )
653 WRITE(IQPRNT,*) 'RZOPEN: FILEINF Error, ISTAT = ',ISTAT
656 *-- If VSAM, define Cluster
658 WRITE(cRecl,'(I6)') iRecl
659 cDataClas = 'DATACLAS(RZFILE)'
660 IF ( INDEX( CHFILE, '.RZDATA' ) .GT. 0 )
661 + cDataClas = 'DATACLAS(RZDATA)'
662 cTSO = 'DEFINE CLUSTER(NAME('''//
663 + CHFILE(2:lenocc(CHFILE)) //
664 + ''') '//cDataClas// ' recordsize(' // cRecl // cRecl //
665 + ') shareoptions(2) NUMBERED UNIQUE NONSPANNED recovery)'
666 iStat = mvsams( cTSO )
667 IF ( iStat .NE. 0 ) THEN
669 + 'RZOPEN: Define Cluster Error, ISTAT = ', ISTAT
675 OPEN ( UNIT=LUNIT, STATUS=STAT
676 +, FILE=CHFILE, ACCESS='DIRECT'
677 +, FORM='UNFORMATTED', IOSTAT=ISTAT
678 +, RECL=IRECL, ACTION='READWRITE' )
681 #if defined(CERNLIB_QMVAX)
683 * CHOPT: SU = shared,update
684 * S = shared,readonly
687 * 1 = single user read/write
689 IF(IOPTS.NE.0.AND.IOPTU.NE.0)THEN
690 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
691 + ORGANIZATION=CHORG,
692 + ACCESS='DIRECT',SHARED,STATUS=STAT,IOSTAT=ISTAT)
693 ELSEIF(IOPTS.NE.0.AND.IOPTU.EQ.0)THEN
694 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
695 + ORGANIZATION=CHORG,
696 + ACCESS='DIRECT',SHARED,READONLY,STATUS=STAT,IOSTAT=ISTAT)
697 ELSEIF(IOPTS.EQ.0.AND.IOPTU.NE.0)THEN
698 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
699 + ORGANIZATION=CHORG,
700 + ACCESS='DIRECT',SHARED,STATUS=STAT,IOSTAT=ISTAT)
701 ELSEIF(IOPT1.NE.0)THEN
702 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
703 + ORGANIZATION=CHORG,
704 + ACCESS='DIRECT',STATUS=STAT,IOSTAT=ISTAT)
705 ELSEIF(IOPTS.EQ.0.AND.IOPTU.EQ.0.AND.IOPTN.EQ.0)THEN
706 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
707 + ORGANIZATION=CHORG,
708 + ACCESS='DIRECT',READONLY,STATUS=STAT,IOSTAT=ISTAT)
709 ELSEIF(IOPTN.NE.0)THEN
710 OPEN(UNIT=LUNIT,FILE=CFNAME,FORM='UNFORMATTED',RECL=LRECL,
711 + ORGANIZATION=CHORG,
712 + ACCESS='DIRECT',SHARED,STATUS=STAT,IOSTAT=ISTAT)
715 #if (defined(CERNLIB_QMIBMFVS))&&(defined(CERNLIB_IBMMVS))
717 * --- for new datasets, do a dummy initial load
719 IF ((IOPTV.NE.0).AND.(STAT.EQ.'NEW')) THEN
720 CALL RZIODO(LUNIT, irecl/4, 1, record, 2 ) ! dummy write
721 CALL RZIODO(LUNIT, irecl/4, 1, record, 1 ) ! dummy read
722 WRITE(IQPRNT,*) 'RZOPEN: VSAM FILE ', CHFILE(2:LENOCC(CHFILE))
723 +, ' succesfully created'
726 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
728 * CHOPT: SU = shared,update
729 * S = shared,readonly
732 * 1 = single user read/write
734 IF(IOPTU.NE.0.OR.IOPT1.NE.0) CHOPE = 'r+'
735 IF(IOPTN.NE.0) CHOPE = 'w+'
738 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)
739 IF(IMODEX.NE.0) JRECL = LRECL / 2
741 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
742 CALL CFOPEN(LUNPTR,0,JRECL,CHOPE,0,CHFILE,ISTAT)
743 LUNIT = 1000 + LUNPTR
746 IF(ISTAT.NE.0)GOTO 60
747 IF(IOPTY.NE.0)GOTO 50
748 if(kstrip.ne.0)go to 50
750 * Check consistency of LRECL
752 IF(IOPTN.EQ.0.AND.IPASS.EQ.0.AND.ISTAT.EQ.0)THEN
755 CALL RZIODO(LUNIT,50,2,ITEST,1)
756 #if defined(CERNLIB_QMVAX)||defined(CERNLIB_QMVMI)||defined(CERNLIB_QMDOS)||(defined(CERNLIB_QMLNX) && !defined(CERNLIB_PPC))||defined(CERNLIB_WINNT)
757 CALL VXINVB(ITEST(9),1)
758 IF(JBIT(ITEST(9),12).NE.0)THEN
760 CALL RZIODO(LUNIT,50,2,ITEST,1)
762 CALL VXINVB(ITEST(9),1)
767 * Protection against bad files
770 WRITE(IQPRNT,10500) CHFILE(1:LENOCC(CHFILE))
771 10500 FORMAT(' RZOPEN: cannot determine record length.',
772 + ' File ',A,' probably not in RZ format')
775 #if defined(CERNLIB_IBM)
778 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
782 CALL CFCLOS(LUNIT-1000,0)
787 IF(LB.GT.48) CALL RZIODO(LUNIT,LB+6,2,ITEST,1)
790 IF(LRECP.NE.LRECL)THEN
793 #if defined(CERNLIB_IBM)
796 #if defined(CERNLIB_QMCRY)||defined(CERNLIB_QMCV64)||defined(CERNLIB_RZFRECL)
800 CALL CFCLOS(LUNIT-1000,0)
804 #if defined(CERNLIB_IBMMVS)
805 IF(IPASS.EQ.0.AND.LRECI.EQ.0) THEN
807 #if !defined(CERNLIB_IBMMVS)
813 WRITE(IQPRNT,*) 'Cannot determine record length'
820 IF (IPASS.NE.0 .AND. LRECL2.NE.0) THEN
821 WRITE(IQPRNT,10600) LRECL2,LRECL
822 10600 FORMAT(' RZOPEN: LRECL inconsistant - ',
823 + ' file was opened with LRECL = ',I6,
824 + ' should be LRECL = ',I6)
827 * If option 'W' build CHDIR
829 50 IF(IOPTW.NE.0)THEN
830 IF (IOPTC .EQ. 0) THEN
835 IF(LUN.LT.10)WRITE(CHDIR,10700)LUN
836 IF(LUN.GE.10)WRITE(CHDIR,10800)LUN
837 10700 FORMAT('LUN',I1,' ')
838 10800 FORMAT('LUN',I2,' ')
845 #if defined(CERNLIB_QMUIX)
846 *-* Fill structure if file is striped
847 if(kstrip.ne.0.and.istat.eq.0)then
857 rznames(lun)=rzsfile(maxstrip)