!
      PROGRAM P67
!
      IMPLICIT NONE
      CHARACTER (LEN=3) :: MONTH(12)
      INTEGER :: UNITS(12),MSTART,J,K
      REAL :: SALES(12),SAVE,MEANU
!
      INTERFACE
      SUBROUTINE AVERAGE(MSTART,UNITS,SALES,MEANU,SAVE)
      IMPLICIT NONE
      INTEGER, INTENT(IN) :: MSTART
      INTEGER, INTENT(IN OUT) :: UNITS(:)
      REAL, INTENT(IN OUT) :: SALES(:),MEANU,SAVE
      END SUBROUTINE AVERAGE
      END INTERFACE
!
!
      PRINT *, 'This is Program >> P67  - Average Program'
!
!     Tell program where data for  READ   is coming from
      OPEN(UNIT=5, FILE='P67.DAT')      ! UNIT=5 is the default input
!
!
      PRINT 99
 99   FORMAT(/' AVERAGE PROGRAM 2'/)
L1:   DO K=1,12
         READ 27,MONTH(K),UNITS(K),SALES(K)
         PRINT 28,MONTH(K),UNITS(K),SALES(K)
      END DO L1
 27   FORMAT(A3,I7,F5.1)
 28   FORMAT(' ',A3,I7,F6.1)
!
!     DATA HAS BEEN READ, STORED AND PRINTED
!     NOW USE SUBROUTINE
!     ONCE FOR EACH QUARTER
!
L2:   DO J=1,4
         MSTART=3*(J-1)+1
         CALL AVERAGE(MSTART,UNITS,SALES,MEANU,SAVE)
         PRINT 78,MEANU,SAVE,J
      END DO L2
 78   FORMAT(/' MEAN',F7.1,F6.1,'  QUARTER #',I1)
      STOP
      END PROGRAM P67
!
      SUBROUTINE AVERAGE(MSTART,UNITS,SALES,MEANU,SAVE)
!     Size of the arrays below can be 1 or N or *
      IMPLICIT NONE
      INTEGER, INTENT(IN) :: MSTART
      INTEGER, INTENT(IN OUT) :: UNITS(:)      
      REAL, INTENT(IN OUT) :: SALES(:),MEANU,SAVE
      INTEGER :: K,NCARS
      REAL :: DOLLARS
      NCARS=0
      DOLLARS=0
L1:   DO K=MSTART,MSTART+2
         NCARS=NCARS+UNITS(K)
         DOLLARS=DOLLARS+SALES(K)
      END DO L1
!     Calculate averages
      MEANU=NCARS/3.0
      SAVE=DOLLARS/3.0
      RETURN
      END SUBROUTINE AVERAGE