      PROGRAM EXMAIN
*
*  The example from the user's guide
*
*  D. Tuyttens and Ph. Toint, 1992.
*
      INTEGER           NAMAX, NELMAX, NA, NN, NEL, INFORM,
     +                  LELVAR, LELPTR, LFUVAL, LGPTR,
     +                  LHPTR, LFCALC, LFC, LIWK, LWK, MAXIT,
     +                  IPDEVC, WHAT, FREQ, INFO, IFLAG
      PARAMETER         ( NAMAX  = 5          , NELMAX = 3          )
      PARAMETER         ( LIWK   = 10000      , LWK    = 10000      )
      PARAMETER         ( LELVAR = 7          , LELPTR = NELMAX + 1 )
      PARAMETER         ( LGPTR  = NELMAX + 1 , LHPTR  = NELMAX + 1 )
      PARAMETER         ( LFUVAL = 10000      , LFCALC = NELMAX     )
      PARAMETER         ( MAXIT  = 100        , IPDEVC = 6          )
      PARAMETER         ( FREQ   = 1          , WHAT   = 2          )
      INTEGER           ELVAR(LELVAR), ELPTR(LELPTR), ELST(NELMAX),
     +                  XST(NAMAX), FR(NAMAX), TO(NAMAX), IT(3),
     +                  GPTR(LGPTR), HPTR(LHPTR), IWK(LIWK),
     +                  FCALC(LFCALC), IFC(3), I
      LOGICAL           PREC, NIPST
      DOUBLE PRECISION  X(NAMAX), FX, FUVAL(LFUVAL),
     +                  EPSF, WK(LWK)
      DATA  NA / 5 /, NN / 4 /, NEL / 3 /
      DATA  FR / 1, 1, 3, 2, 3  /
      DATA  TO / 2, 3, 2, 4, 4  /
      DATA  ELVAR / 1, 2, 3, 3, 4, 3, 5 /
      DATA  ELPTR / 1, 4, 6, 8 /
      DATA  ELST  / 1, 1, 1 /
      DATA  X     / 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0 /
      DATA  XST   / 1, 1, 1, -1, -1 /
      DATA  EPSF  / 1.D-5 /
      DATA  PREC  / .FALSE. /, NIPST / .FALSE. /
      INFORM = 0
*
*     SOLVING THE PROBLEN WITH LSNNO.
*
 100  CONTINUE
      CALL LSNNO( NA, NN, NEL,  ELVAR, ELPTR, ELST, FR, TO,
     +            X, XST, FX,
     +            FUVAL, LFUVAL, GPTR, HPTR, INFORM, FCALC,
     +            LFC, IFC,  IT, MAXIT,  EPSF, PREC, NIPST,
     +            IWK, LIWK,  WK, LWK,  IPDEVC, WHAT, FREQ,
     +            INFO, IFLAG )
*
      IF( INFORM.GT.0 ) THEN
*
        IF( INFORM.EQ.1 ) THEN
          CALL ELFNCT( FUVAL, X, NA, NEL, FCALC, LFC, 0,
     +                 ELVAR, ELPTR, GPTR, HPTR )
        ENDIF
*
        IF( INFORM.EQ.2 .OR. INFORM.EQ.4 ) THEN
          CALL ELFNCT( FUVAL, X, NA, NEL, FCALC, LFC, 1,
     +                 ELVAR, ELPTR, GPTR, HPTR )
        ENDIF
*
        IF( INFORM.EQ.3 .OR. INFORM.EQ.4 ) THEN
          CALL ELFNCT( FUVAL, X, NA, NEL, FCALC, LFC, 2,
     +                 ELVAR, ELPTR, GPTR, HPTR )
        ENDIF
*
        GO TO 100
*
      ELSE
        WRITE(IPDEVC,1000)
        DO 200 I = 1 , NA
          WRITE(IPDEVC,1010) I,X(I)
 200    CONTINUE
      ENDIF
*
      STOP
 1000 FORMAT(/, ' VARIABLE NAME    VALUE ',
     +       /, ' -------------    ----- ')
 1010 FORMAT(7X,'X',I1,4X,D12.5)
      END
