160      SUBROUTINE sgebal( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
 
  168      INTEGER            IHI, ILO, INFO, LDA, N
 
  171      REAL               A( LDA, * ), SCALE( * )
 
  178      parameter( zero = 0.0e+0, one = 1.0e+0 )
 
  180      parameter( sclfac = 2.0e+0 )
 
  182      parameter( factor = 0.95e+0 )
 
  185      LOGICAL            NOCONV, CANSWAP
 
  186      INTEGER            I, ICA, IRA, J, K, L
 
  187      REAL               C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1,
 
  191      LOGICAL            SISNAN, LSAME
 
  194      EXTERNAL           sisnan, lsame, isamax, slamch,
 
  201      INTRINSIC          abs, max, min
 
  206      IF( .NOT.lsame( job, 
'N' ) .AND.
 
  207     $    .NOT.lsame( job, 
'P' ) .AND.
 
  208     $    .NOT.lsame( job, 
'S' ) .AND.
 
  209     $                .NOT.lsame( job, 
'B' ) ) 
THEN 
  211      ELSE IF( n.LT.0 ) 
THEN 
  213      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  217         CALL xerbla( 
'SGEBAL', -info )
 
  229      IF( lsame( job, 
'N' ) ) 
THEN 
  243      IF( .NOT.lsame( job, 
'S' ) ) 
THEN 
  256                  IF( i.NE.j .AND. a( i, j ).NE.zero ) 
THEN 
  263                  scale( l ) = real( i )
 
  265                     CALL sswap( l, a( 1, i ), 1, a( 1, l ), 1 )
 
  266                     CALL sswap( n-k+1, a( i, k ), lda, a( l, k ),
 
  292                  IF( i.NE.j .AND. a( i, j ).NE.zero ) 
THEN 
  299                  scale( k ) = real( j )
 
  301                     CALL sswap( l, a( 1, j ), 1, a( 1, k ), 1 )
 
  302                     CALL sswap( n-k+1, a( j, k ), lda, a( k, k ),
 
  323      IF( lsame( job, 
'P' ) ) 
THEN 
  333      sfmin1 = slamch( 
'S' ) / slamch( 
'P' )
 
  334      sfmax1 = one / sfmin1
 
  335      sfmin2 = sfmin1*sclfac
 
  336      sfmax2 = one / sfmin2
 
  344            c = snrm2( l-k+1, a( k, i ), 1 )
 
  345            r = snrm2( l-k+1, a( i, k ), lda )
 
  346            ica = isamax( l, a( 1, i ), 1 )
 
  347            ca = abs( a( ica, i ) )
 
  348            ira = isamax( n-k+1, a( i, k ), lda )
 
  349            ra = abs( a( i, ira+k-1 ) )
 
  353            IF( c.EQ.zero .OR. r.EQ.zero ) cycle
 
  357            IF( sisnan( c+ca+r+ra ) ) 
THEN 
  359               CALL xerbla( 
'SGEBAL', -info )
 
  367            DO WHILE( c.LT.g .AND. max( f, c, ca ).LT.sfmax2 .AND.
 
  368     $                min( r, g, ra ).GT.sfmin2 )
 
  379            DO WHILE( g.GE.r .AND. max( r, ra ).LT.sfmax2 .AND.
 
  380     $                min( f, c, g, ca ).GT.sfmin2 )
 
  391            IF( ( c+r ).GE.factor*s ) cycle
 
  392            IF( f.LT.one .AND. scale( i ).LT.one ) 
THEN 
  393               IF( f*scale( i ).LE.sfmin1 ) cycle
 
  395            IF( f.GT.one .AND. scale( i ).GT.one ) 
THEN 
  396               IF( scale( i ).GE.sfmax1 / f ) cycle
 
  399            scale( i ) = scale( i )*f
 
  402            CALL sscal( n-k+1, g, a( i, k ), lda )
 
  403            CALL sscal( l, f, a( 1, i ), 1 )