text:       SUBROUTINE IB01OY( NS, NMAX, N, SV, INFO )
  C
  C     SLICOT RELEASE 5.5.
  C
  C     Copyright (c) 2002-2012 NICONET e.V.
  C
  C     PURPOSE
  C
  C     To ask for user's confirmation of the system order found by
  C     SLICOT Library routine IB01OD. This routine may be modified,
  C     but its interface must be preserved.
  C
  C     ARGUMENTS
  C
  C     Input/Output Parameters
  C
  C     NS      (input) INTEGER
  C             The number of singular values.  NS > 0.
  C
  C     NMAX    (input) INTEGER
  C             The maximum value of the system order.  0 <= NMAX <= NS.
  C
  C     N       (input/output) INTEGER
  C             On entry, the estimate of the system order computed by
  C             IB01OD routine.  0 <= N <= NS.
  C             On exit, the user's estimate of the system order, which
  C             could be identical with the input value of  N.
  C             Note that the output value of  N  should be less than
  C             or equal to  NMAX.
  C
  C     SV      (input) DOUBLE PRECISION array, dimension ( NS )
  C             The singular values, in descending order, used for
  C             determining the system order.
  C
  C     Error Indicator
  C
  C     INFO    INTEGER
  C             = 0:  successful exit;
  C             < 0:  if INFO = -i, the i-th argument had an illegal
  C                   value.
  C
  C     CONTRIBUTORS
  C
  C     V. Sima, Research Institute for Informatics, Bucharest, Aug. 1999.
  C
  C     REVISIONS
  C
  C     -
  C
  C     KEYWORDS
  C
  C     Identification, parameter estimation, singular values, structure
  C     identification.
  C
  C  *********************************************************************
  C
  C     .. Parameters ..
        INTEGER            INTRMN, OUTRMN
        PARAMETER          ( INTRMN = 5, OUTRMN = 6 )
  C        INTRMN is the unit number for the (terminal) input device.
  C        OUTRMN is the unit number for the (terminal) output device.
  C     ..
  C     .. Scalar Arguments ..
        INTEGER            INFO, N, NMAX, NS
  C     ..
  C     .. Array Arguments ..
        DOUBLE PRECISION   SV( * )
  C     ..
  C     .. Local Scalars ..
        LOGICAL            YES
        INTEGER            I
        CHARACTER          ANS
  C     ..
  C     .. External Functions ..
        LOGICAL            LSAME
        EXTERNAL           LSAME
  C     ..
  C     .. External Subroutines ..
        EXTERNAL           XERBLA
  C
  C     .. Executable Statements ..
  C
  C     Check the scalar input parameters.
  C
        INFO = 0
        IF( NS.LE.0 ) THEN
           INFO = -1
        ELSE IF( NMAX.LT.0 .OR. NMAX.GT.NS ) THEN
           INFO = -2
        ELSE IF( N.LT.0 .OR. N.GT.NS ) THEN
           INFO = -3
        END IF
  C
        IF( INFO.NE.0 ) THEN
           CALL XERBLA( 'IB01OY', -INFO )
           RETURN
        END IF
  C
        WRITE( OUTRMN, '(/'' Singular values (in descending order) used'',
       $                  '' to estimate the system order:'', //
       $                     (5D15.8) )' ) ( SV(I), I = 1, NS )
        WRITE( OUTRMN, '(/'' Estimated order of the system,  n = '', I5 )'
       $     )               N
        WRITE( OUTRMN, '(/'' Do you want this value of  n  to be used'',
       $                  '' to determine the system matrices?'' )' )
  C
     10 CONTINUE
           WRITE( OUTRMN, '(/''  Type "yes" or "no":  '' )' )
           READ ( INTRMN,  '( A )' ) ANS
           YES = LSAME( ANS, 'Y' )
           IF( YES ) THEN
              IF( N.LE.NMAX ) THEN
  C
  C              The value of n is adequate and has been confirmed.
  C
                 RETURN
              ELSE
  C
  C              The estimated value of n is not acceptable.
  C
                 WRITE( OUTRMN, '(/'' n  should be less than or equal'',
       $                           '' to '', I5 )' ) NMAX
                 WRITE( OUTRMN, '( '' (It may be useful to restart'',
       $                           '' with a larger tolerance.)'' )' )
                 GO TO 20
              END IF
  C
           ELSE IF( LSAME( ANS, 'N' ) ) THEN
              GO TO 20
           ELSE
  C
  C           Wrong answer should be re-entered.
  C
              GO TO 10
           END IF
  C
  C     Enter the desired value of n.
  C
     20 CONTINUE
           WRITE( OUTRMN,'(/'' Enter the desired value of n (n <= '', I5,
       $                    '');  n = '' )' ) NMAX
           READ ( INTRMN, * ) N
           IF ( N.LT.0 ) THEN
  C
  C           The specified value of n is not acceptable.
  C
              WRITE( OUTRMN, '(/'' n  should be larger than zero.'' )' )
              GO TO 20
           ELSE IF ( N.GT.NMAX ) THEN
  C
  C           The specified value of n is not acceptable.
  C
              WRITE( OUTRMN, '(/'' n  should be less than or equal to '',
       $                   I5 )' ) NMAX
              GO TO 20
           END IF
  C
        RETURN
  C
  C *** Last line of IB01OY ***
        END
  