214      SUBROUTINE ctrevc( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL,
 
  216     $                   LDVR, MM, M, WORK, RWORK, INFO )
 
  223      CHARACTER          HOWMNY, SIDE
 
  224      INTEGER            INFO, LDT, LDVL, LDVR, M, MM, N
 
  229      COMPLEX            T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ),
 
  237      PARAMETER          ( ZERO = 0.0e+0, one = 1.0e+0 )
 
  238      COMPLEX            CMZERO, CMONE
 
  239      parameter( cmzero = ( 0.0e+0, 0.0e+0 ),
 
  240     $                   cmone = ( 1.0e+0, 0.0e+0 ) )
 
  243      LOGICAL            ALLV, BOTHV, LEFTV, OVER, RIGHTV, SOMEV
 
  244      INTEGER            I, II, IS, J, K, KI
 
  245      REAL               OVFL, REMAX, SCALE, SMIN, SMLNUM, ULP, UNFL
 
  252      EXTERNAL           lsame, icamax, scasum, slamch
 
  259      INTRINSIC          abs, aimag, cmplx, conjg, max, real
 
  265      cabs1( cdum ) = abs( real( cdum ) ) + abs( aimag( cdum ) )
 
  271      bothv = lsame( side, 
'B' )
 
  272      rightv = lsame( side, 
'R' ) .OR. bothv
 
  273      leftv = lsame( side, 
'L' ) .OR. bothv
 
  275      allv = lsame( howmny, 
'A' )
 
  276      over = lsame( howmny, 
'B' )
 
  277      somev = lsame( howmny, 
'S' )
 
  293      IF( .NOT.rightv .AND. .NOT.leftv ) 
THEN 
  295      ELSE IF( .NOT.allv .AND. .NOT.over .AND. .NOT.somev ) 
THEN 
  297      ELSE IF( n.LT.0 ) 
THEN 
  299      ELSE IF( ldt.LT.max( 1, n ) ) 
THEN 
  301      ELSE IF( ldvl.LT.1 .OR. ( leftv .AND. ldvl.LT.n ) ) 
THEN 
  303      ELSE IF( ldvr.LT.1 .OR. ( rightv .AND. ldvr.LT.n ) ) 
THEN 
  305      ELSE IF( mm.LT.m ) 
THEN 
  309         CALL xerbla( 
'CTREVC', -info )
 
  320      unfl = slamch( 
'Safe minimum' )
 
  322      ulp = slamch( 
'Precision' )
 
  323      smlnum = unfl*( real( n ) / ulp )
 
  328         work( i+n ) = t( i, i )
 
  336         rwork( j ) = scasum( j-1, t( 1, j ), 1 )
 
  347               IF( .NOT.
SELECT( ki ) )
 
  350            smin = max( ulp*( cabs1( t( ki, ki ) ) ), smlnum )
 
  357               work( k ) = -t( k, ki )
 
  364               t( k, k ) = t( k, k ) - t( ki, ki )
 
  365               IF( cabs1( t( k, k ) ).LT.smin )
 
  370               CALL clatrs( 
'Upper', 
'No transpose', 
'Non-unit', 
'Y',
 
  371     $                      ki-1, t, ldt, work( 1 ), scale, rwork,
 
  379               CALL ccopy( ki, work( 1 ), 1, vr( 1, is ), 1 )
 
  381               ii = icamax( ki, vr( 1, is ), 1 )
 
  382               remax = one / cabs1( vr( ii, is ) )
 
  383               CALL csscal( ki, remax, vr( 1, is ), 1 )
 
  390     $            
CALL cgemv( 
'N', n, ki-1, cmone, vr, ldvr,
 
  392     $                        1, cmplx( scale ), vr( 1, ki ), 1 )
 
  394               ii = icamax( n, vr( 1, ki ), 1 )
 
  395               remax = one / cabs1( vr( ii, ki ) )
 
  396               CALL csscal( n, remax, vr( 1, ki ), 1 )
 
  402               t( k, k ) = work( k+n )
 
  417               IF( .NOT.
SELECT( ki ) )
 
  420            smin = max( ulp*( cabs1( t( ki, ki ) ) ), smlnum )
 
  427               work( k ) = -conjg( t( ki, k ) )
 
  434               t( k, k ) = t( k, k ) - t( ki, ki )
 
  435               IF( cabs1( t( k, k ) ).LT.smin )
 
  440               CALL clatrs( 
'Upper', 
'Conjugate transpose',
 
  442     $                      
'Y', n-ki, t( ki+1, ki+1 ), ldt,
 
  443     $                      work( ki+1 ), scale, rwork, info )
 
  450               CALL ccopy( n-ki+1, work( ki ), 1, vl( ki, is ), 1 )
 
  452               ii = icamax( n-ki+1, vl( ki, is ), 1 ) + ki - 1
 
  453               remax = one / cabs1( vl( ii, is ) )
 
  454               CALL csscal( n-ki+1, remax, vl( ki, is ), 1 )
 
  461     $            
CALL cgemv( 
'N', n, n-ki, cmone, vl( 1, ki+1 ),
 
  463     $                        work( ki+1 ), 1, cmplx( scale ),
 
  466               ii = icamax( n, vl( 1, ki ), 1 )
 
  467               remax = one / cabs1( vl( ii, ki ) )
 
  468               CALL csscal( n, remax, vl( 1, ki ), 1 )
 
  474               t( k, k ) = work( k+n )