*     E04MGF Example Program Text
*     Mark 18 Revised. NAG Copyright 1997.
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
      INTEGER          NMAX, NCMAX
      PARAMETER        (NMAX=10,NCMAX=10)
      INTEGER          LDA
      PARAMETER        (LDA=NCMAX)
      INTEGER          LIWORK, LWORK
      PARAMETER        (LIWORK=1000,LWORK=10000)
*     .. Local Scalars ..
      DOUBLE PRECISION OBJ
      INTEGER          I, IFAIL, INFORM, ITER, J, N, NCLIN, OUTCHN
      LOGICAL          LMOK
*     .. Local Arrays ..
      DOUBLE PRECISION A(LDA,NMAX), AX(NCMAX), BL(NMAX+NCMAX),
     +                 BU(NMAX+NCMAX), CLAMDA(NMAX+NCMAX), CVEC(NMAX),
     +                 WORK(LWORK), X(NMAX)
      INTEGER          ISTATE(NMAX+NCMAX), IWORK(LIWORK)
*     .. External Subroutines ..
      EXTERNAL         E04MFF, E04MGF, E04MHF, X04ABF
*     .. External Functions ..
      LOGICAL          A00ACF
      EXTERNAL         A00ACF
*     .. Executable Statements ..
      WRITE (NOUT,*) 'E04MGF Example Program Results'
      OUTCHN = NOUT
      LMOK = A00ACF()
      IF (LMOK) THEN
*        Skip heading in data file
         READ (NIN,*)
         READ (NIN,*) N, NCLIN
         IF (N.LE.NMAX .AND. NCLIN.LE.NCMAX) THEN
*
*           Read CVEC, A, BL, BU and X from data file
*
            READ (NIN,*) (CVEC(I),I=1,N)
            READ (NIN,*) ((A(I,J),J=1,N),I=1,NCLIN)
            READ (NIN,*) (BL(I),I=1,N+NCLIN)
            READ (NIN,*) (BU(I),I=1,N+NCLIN)
            READ (NIN,*) (X(I),I=1,N)
*
*           Set three options using E04MHF
*
            CALL E04MHF(' Print Level = 1 ')
*
            CALL E04MHF(' Check Frequency = 10 ')
*
            CALL E04MHF(' Infinite Bound Size = 1.0D+25 ')
*
*           Set the unit number for advisory messages to OUTCHN
*
            CALL X04ABF(1,OUTCHN)
*
*           Read the options file for the remaining options
*
            CALL E04MGF(NIN,INFORM)
*
            IF (INFORM.NE.0) THEN
               WRITE (NOUT,99999) 'E04MGF terminated with INFORM = ',
     +           INFORM
            ELSE
*
*              Solve the problem
*
               IFAIL = 1
*
               CALL E04MFF(N,NCLIN,A,LDA,BL,BU,CVEC,ISTATE,X,ITER,OBJ,
     +                     AX,CLAMDA,IWORK,LIWORK,WORK,LWORK,IFAIL)
            END IF
*
         ELSE
            WRITE (NOUT,*)
            WRITE (NOUT,*) 'At least one of N or NCLIN is too large'
         END IF
      ELSE
         WRITE (NOUT,*)
         WRITE (NOUT,*) ' ** A valid licence key was not found'
      END IF
*
99999 FORMAT (1X,A,I3)
      END
