This example starts by skipping to a selected block on the input
unit 10 using MODE=30 in EPREAD.
Then a further selection is
made on the logical record header (looking for ID=0)
using MODE=20.
The data for these events are then unpacked as 16-bit words, and
only the first 100 words are written to the output unit (20)
and packed in 32-bits. In addition a user defined header (IH) is
used where IH(1-4) are the default package header, IH(5) is the
original number of data words and IH(6) the original record
sequence number.
PROGRAM EPTEST
DIMENSION IBUF(900),IBUFO(900),IRECI(1000),IH(6)
CALL EPINIT
C SET STATUS WORDS FOR INPUT
CALL EPSETW(10,2,1000,IERR)
IF(IERR.NE.0)STOP 1
C-- SKIP TO BLOCK 15
5 CALL EPREAD(10,30,NW,IRECI,IBUF,IERR)
IF(IERR.NE.0)STOP 5
IF(IRECI(3).LT.15)GOTO 5
C-- READ THE RECORD HEADER AND SELECT RECORDS WITH TYPE ID=0
50 CALL EPREAD(10,20,NW,IRECI,IBUF,IERR)
IF(IERR.NE.0)GOTO 500
IF(IRECI(2).NE.0)GOTO 50
IH(6)=IRECI(4)
C-- READ DATA OF CURRENT RECORD, UNPACK AS 16-BIT WORDS
CALL EPREAD(10,12,NW,IRECI,IBUF,IERR)
IF(IERR.NE.0)GOTO 500
JJ=NW-4
PRINT*,NW,(IRECI(I),I=1,5),(IRECI(I),I=JJ,NW)
IH(5)=NW
C-- WRITE AS 32-BIT WORDS
CALL EPOUTL(20,3,6,IH,100,IRECI,IBUFO,IERR)
IF(IERR.NE.0)GOTO 600
GOTO 50
C READ ERRORS
C PARITY AND OTHER
500 IF(IERR.NE.1)GOTO 50
C EOF
CALL EPCLOS(20,IBUFO,IERR)
STOP
C WRITE ERRORS
600 STOP 600
END