* * $Id: epeof.F,v 1.1.1.1 1996/03/08 15:21:43 mclareni Exp $ * * $Log: epeof.F,v $ * Revision 1.1.1.1 1996/03/08 15:21:43 mclareni * Epio * * #include "epio/pilot.h" SUBROUTINE EPEOF(LUNIT,IERR) C. WRITES EOF MARK ON OUTPUT UNIT LUNIT C A CALL WITH LUNIT = INPUT UNIT HAS NO EFFECT. #include "epio/epiocom.inc" #if defined(CERNLIB_UNIVAC) DATA IEOF/'EOFM'/ #endif #if defined(CERNLIB_APOLLO) %INCLUDE '/sys/ins/base.ins.ftn' %INCLUDE '/sys/ins/error.ins.ftn' %INCLUDE '/sys/ins/streams.ins.ftn' INTEGER*2 STREAM_$ID INTEGER*4 STATUS_$RETURNED,ATT_$REC_4(16),ERROR_$MASK EQUIVALENCE (ATT_$REC_4(1),STREAM_$ID) #endif C--- CHECK WHETHER SAME USER UNIT AS LAST TIME IF(LASTUT.EQ.LUNIT) GOTO 1551 C--- NEW UNIT - GET REF CALL EPUNIT(LUNIT,IERR) IF(IERR.EQ.0) GOTO 1552 GOTO 77777 1551 IERR=0 IF(LREF.NE.0) GOTO 1552 IERR=13 CALL EPERRH(LUNIT,IERR) GOTO 77777 1552 CONTINUE IF(LIST(ISTART+16).NE.1) GOTO 77777 #if defined(CERNLIB_IBM)||defined(CERNLIB_NORD) CALL IOMARK(LUNIT,IRETCD) IF(IRETCD.NE.0) IERR=2 #endif #if defined(CERNLIB_CDC)||defined(CERNLIB_CRAY)||defined(CERNLIB_STF77)||defined(CERNLIB_STF77VX) IF(LIST(ISTART+33).EQ.0)END FILE LUNIT IF(LIST(ISTART+33).EQ.2)call cfclos(list(istart+25),0) #endif #if defined(CERNLIB_UNIVAC) C--- WRITE EOF, SOFTWARE ON DISK, HARDWARE ON TAPE LUNFD=LIST(ISTART+24) IOAD=LIST(ISTART+25) IF(IOAD.GE.0) THEN C--- SOFTWARE EOF IS ONE WORD CONTAINING 'EOFM' CALL FIOW(LUNFD,IEOF,1,IOAD,ISTAT) LIST(ISTART+25)=LIST(ISTART+25)+1 ELSE C--- FOR TAPE WRITE TWO EOF MARKS AND MOVE BACK OVER THE LAST ONE CALL TIOWEF(LUNFD,ISTAT) CALL TIOWEF(LUNFD,ISTAT) CALL TIOMVF(LUNFD,-1,ISTAT) ENDIF #endif #if defined(CERNLIB_VAX) IF(LIST(ISTART+25).EQ.0)GO TO 77777 CALL EPMTEOF(IOS) IF(IOS.EQ.1)GO TO 77777 WRITE(NOUTUT,1001) IOS 1001 FORMAT(/' +++ EP I/O PACKAGE VAX MAGTAPE ERROR ',Z10,' HEX ') IERR = 12 CALL EPERRH(LIST(ISTART+10),IERR) GO TO 77777 #endif #if defined(CERNLIB_APOLLO) STREAM_$ID=INT2(LIST(ISTART+25)) C C DO SOMETHING ONLY IF THE STREAM-ID IS NOT 0 C IF(STREAM_$ID.NE.0) THEN LIST(ISTART+25)=0 IF(LIST(ISTART+16).EQ.1) THEN C C IN CASE OF A WRITE UNIT, WRITE AN END OF FILE MARK C C C SEE WHETHER THIS IS A TAPE UNIT C CALL STREAM_$INQUIRE ( 1 STREAM_$IRM_OTYPE, 2 STREAM_$USE_STRID, 3 STREAM_$ID, 4 ERROR_$MASK, 5 STATUS_$RETURNED) IF (STATUS_$RETURNED .NE. STATUS_$OK) 1 CALL ERROR_$PRINT(STATUS_$RETURNED) IF(ATT_$REC_4(14).NE.16#314) THEN CALL STREAM_$TRUNCATE(STREAM_$ID,STATUS_$RETURNED) IF(STATUS_$RETURNED.NE.STATUS_$OK) THEN CALL ERROR_$PRINT(STATUS_$RETURNED) END IF END IF END IF C C IN ANY CASE CLOSE THE STREAM C CALL STREAM_$CLOSE(STREAM_$ID,STATUS_$RETURNED) IF(STATUS_$RETURNED.EQ.STATUS_$OK) GO TO 77777 IF(LSHFT(ERROR_$SUBSYS(STATUS_$RETURNED),8) + .EQ.STREAM_$SUBS) GO TO 100 WRITE(NOUTUT,1001) 1001 FORMAT(' +++ EPIO/DOMAIN: Not a stream I/O error ???') 100 CALL ERROR_$PRINT(STATUS_$RETURNED) END IF #endif 77777 RETURN END