          REAL             FUNCTION SLANST( NORM, N, D, E )
    *
    *  -- LAPACK auxiliary routine (version 3.1) --
    *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
    *     November 2006
    *
    *     .. Scalar Arguments ..
          CHARACTER          NORM
          INTEGER            N
    *     ..
    *     .. Array Arguments ..
          REAL               D( * ), E( * )
    *     ..
    *
    *  Purpose
    *  =======
    *
    *  SLANST  returns the value of the one norm,  or the Frobenius norm, or
    *  the  infinity norm,  or the  element of  largest absolute value  of a
    *  real symmetric tridiagonal matrix A.
    *
    *  Description
    *  ===========
    *
    *  SLANST returns the value
    *
    *     SLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm'
    *              (
    *              ( norm1(A),         NORM = '1', 'O' or 'o'
    *              (
    *              ( normI(A),         NORM = 'I' or 'i'
    *              (
    *              ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
    *
    *  where  norm1  denotes the  one norm of a matrix (maximum column sum),
    *  normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
    *  normF  denotes the  Frobenius norm of a matrix (square root of sum of
    *  squares).  Note that  max(abs(A(i,j)))  is not a consistent matrix norm.
    *
    *  Arguments
    *  =========
    *
    *  NORM    (input) CHARACTER*1
    *          Specifies the value to be returned in SLANST as described
    *          above.
    *
    *  N       (input) INTEGER
    *          The order of the matrix A.  N >= 0.  When N = 0, SLANST is
    *          set to zero.
    *
    *  D       (input) REAL array, dimension (N)
    *          The diagonal elements of A.
    *
    *  E       (input) REAL array, dimension (N-1)
    *          The (n-1) sub-diagonal or super-diagonal elements of A.
    *
    *  =====================================================================
    *
    *     .. Parameters ..
          REAL               ONE, ZERO
          PARAMETER          ( ONE = 1.0E+0, ZERO = 0.0E+0 )
    *     ..
    *     .. Local Scalars ..
          INTEGER            I
          REAL               ANORM, SCALE, SUM
    *     ..
    *     .. External Functions ..
          LOGICAL            LSAME
          EXTERNAL           LSAME
    *     ..
    *     .. External Subroutines ..
          EXTERNAL           SLASSQ
    *     ..
    *     .. Intrinsic Functions ..
          INTRINSIC          ABS, MAX, SQRT
    *     ..
    *     .. Executable Statements ..
    *
          IF( N.LE.0 ) THEN
             ANORM = ZERO
          ELSE IF( LSAME( NORM, 'M' ) ) THEN
    *
    *        Find max(abs(A(i,j))).
    *
             ANORM = ABS( D( N ) )
             DO 10 I = 1, N - 1
                ANORM = MAX( ANORM, ABS( D( I ) ) )
                ANORM = MAX( ANORM, ABS( E( I ) ) )
       10    CONTINUE
          ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
         $         LSAME( NORM, 'I' ) ) THEN
    *
    *        Find norm1(A).
    *
             IF( N.EQ.1 ) THEN
                ANORM = ABS( D( 1 ) )
             ELSE
                ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ),
         $              ABS( E( N-1 ) )+ABS( D( N ) ) )
                DO 20 I = 2, N - 1
                   ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
         $                 ABS( E( I-1 ) ) )
       20       CONTINUE
             END IF
          ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
    *
    *        Find normF(A).
    *
             SCALE = ZERO
             SUM = ONE
             IF( N.GT.1 ) THEN
                CALL SLASSQ( N-1, E, 1, SCALE, SUM )
                SUM = 2*SUM
             END IF
             CALL SLASSQ( N, D, 1, SCALE, SUM )
             ANORM = SCALE*SQRT( SUM )
          END IF
    *
          SLANST = ANORM
          RETURN
    *
    *     End of SLANST
    *
          END