*     E01AEF Example Program Text
*     Mark 20 Revised. NAG Copyright 2001.
*     .. Parameters ..
      INTEGER          MMAX, NMAX, IPMX, LWRK, LIWRK
      PARAMETER        (MMAX=4,NMAX=8,IPMX=2,LWRK=7*NMAX+5*IPMX+MMAX+7,
     +                 LIWRK=2*MMAX+2)
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
*     .. Local Scalars ..
      DOUBLE PRECISION XMAX, XMIN
      INTEGER          I, IFAIL, IP1, IPMAX, IRES, ITMAX, ITMIN, IY, J,
     +                 M, N
*     .. Local Arrays ..
      DOUBLE PRECISION A(NMAX), WRK(LWRK), X(MMAX), Y(NMAX)
      INTEGER          IP(MMAX), IWRK(LIWRK)
*     .. External Subroutines ..
      EXTERNAL         E01AEF
*     .. Intrinsic Functions ..
      INTRINSIC        MAX
*     .. Executable Statements ..
      WRITE (NOUT,*) 'E01AEF Example Program Results'
*
      ITMIN = -1
      ITMAX = -1
*     Skip heading in data file
      READ (NIN,*)
   20 READ (NIN,*,END=120) M, XMIN, XMAX
      IF (M.GT.0 .AND. M.LE.MMAX) THEN
         N = 0
         IPMAX = 0
         DO 40 I = 1, M
            READ (NIN,*) IP(I), X(I), (Y(J),J=N+1,N+IP(I)+1)
            IPMAX = MAX(IPMAX,IP(I))
            N = N + IP(I) + 1
   40    CONTINUE
         IF (N.LE.NMAX .AND. IPMAX.LE.IPMX) THEN
            IFAIL = 1
*
            CALL E01AEF(M,XMIN,XMAX,X,Y,IP,N,ITMIN,ITMAX,A,WRK,LWRK,
     +                  IWRK,LIWRK,IFAIL)
*
            WRITE (NOUT,*)
            IF (IFAIL.GE.0) THEN
               IF (IFAIL.EQ.0 .OR. IFAIL.GE.4) THEN
                  WRITE (NOUT,99999)
     +              'Total number of interpolating conditions =', N
                  WRITE (NOUT,*)
                  WRITE (NOUT,*) 'Interpolating polynomial'
                  WRITE (NOUT,*)
                  WRITE (NOUT,*) '   I    Chebyshev Coefficient A(I+1)'
                  DO 60 I = 1, N
                     WRITE (NOUT,99998) I - 1, A(I)
   60             CONTINUE
                  WRITE (NOUT,*)
                  WRITE (NOUT,*) '  X    R   Rth derivative    Residual'
                  IY = 0
                  IRES = IPMAX + 1
                  DO 100 I = 1, M
                     IP1 = IP(I) + 1
                     DO 80 J = 1, IP1
                        IY = IY + 1
                        IRES = IRES + 1
                        IF (J-1.NE.0) THEN
                           WRITE (NOUT,99997) J - 1, Y(IY), WRK(IRES)
                        ELSE
                           WRITE (NOUT,99996) X(I), '   0', Y(IY),
     +                       WRK(IRES)
                        END IF
   80                CONTINUE
  100             CONTINUE
               ELSE
                  WRITE (NOUT,99995) 'E01AEF exits with IFAIL =', IFAIL
               END IF
            ELSE
               WRITE (NOUT,99994) IFAIL
               GO TO 120
            END IF
         END IF
         GO TO 20
      END IF
  120 CONTINUE
*
99999 FORMAT (1X,A,I4)
99998 FORMAT (1X,I4,F20.3)
99997 FORMAT (5X,I4,F12.1,F17.6)
99996 FORMAT (1X,F4.1,A,F12.1,F17.6)
99995 FORMAT (1X,A,I5)
99994 FORMAT (1X,' ** E01AEF returned with IFAIL = ',I5)
      END
