home *** CD-ROM | disk | FTP | other *** search
- /*
- * Ajustement des lignes
- * (c)1991 par Denis GOUNELLE
- */
-
- #include "aroff.h"
- #include "pile.h"
-
- extern unsigned char OutputBuf[] ;
- extern long OutputLen, TmpLineLen, AdjustMode, Flg, TmpCenter ;
-
- static unsigned char tmp[LGMAXBUF+1] ;
-
- /***********************************************************************/
-
- long adjust_b()
-
- {
- long nbr, inc ;
- register unsigned char *p ;
- register long k, l, j, NbInt ;
-
- if ( Flg & F_BREAKED ) return( 0 ) ;
-
- /* calcule le nombre d'intervalles et la taille de la ligne */
-
- j = NbInt = 0 ;
- p = OutputBuf ;
- for ( k = 0 ; k < OutputLen ; k++ )
- {
- if ( isspace( *p ) )
- {
- if ( j ) NbInt++ ;
- j = 0 ;
- }
- else j = 1 ;
- p++ ;
- }
-
- /* calcule le nombre d'espaces a inserer */
-
- if (! NbInt) return( 0 ) ;
-
- k = TmpLineLen - OutputLen ;
- nbr = k / NbInt ;
- inc = NbInt - (k % NbInt) ;
-
- /* effectue l'insertion */
-
- p = tmp ;
- j = l = 0 ;
- for ( k = 0 ; k < OutputLen ; k++ )
- {
- if ( isspace( OutputBuf[k] ) )
- {
- if ( j )
- {
- for ( j = 0 ; j < nbr ; j++ , p++ ) *p = ' ' ;
- l++ ;
- if ( l == inc ) nbr++ ;
- }
- j = 0 ;
- }
- else j = 1 ;
-
- *p = OutputBuf[k] ;
- p++ ;
- }
-
- *p = '\0' ;
- return( 1 ) ;
- }
-
- /***********************************************************************/
-
- long adjust_c()
-
- {
- register long k, l ;
- register unsigned char *p ;
-
- p = OutputBuf ;
- for ( k = 0 ; k < OutputLen ; k++ , p++ ) if (! isspace( *p )) break ;
- l = (TmpLineLen - OutputLen + k) >> 1 ;
-
- for ( p = tmp ; l > 0 ; l-- , p++ ) *p = ' ' ;
- for ( ; k < OutputLen ; k++ , p++ ) *p = OutputBuf[k] ;
- *p = '\0' ;
- return( 1 ) ;
- }
-
- /***********************************************************************/
-
- long adjust_r()
-
- {
- register long k ;
- register unsigned char *p ;
-
- k = TmpLineLen - OutputLen ;
- for ( p = tmp ; k > 0 ; k-- , p++ ) *p = ' ' ;
- for ( k = 0 ; k < OutputLen ; k++ , p++ ) *p = OutputBuf[k] ;
- *p = '\0' ;
- return( 1 ) ;
- }
-
- /***********************************************************************/
-
- void AdjustLine()
- {
- register long c, l ;
-
- /* verifie qu'on ne coupe pas un mot */
-
- if ( OutputLen >= TmpLineLen )
- {
- SauveContexte( 1 ) ;
- c = GetChar() ;
- if ( c == EOF ) return ;
-
- l = OutputLen-1 ;
- while ( (! isspace( c )) && (! isspace( OutputBuf[l] )) )
- {
- RestoreContexte( 0 ) ;
- l = OutputLen-1 ;
- SauveContexte( 1 ) ;
- c = GetChar() ;
- }
- RestoreContexte( 1 ) ;
- }
-
- /* enleve les espaces en fin de ligne */
-
- l = OutputLen - 1 ;
- while ( (l > 0) && isspace( OutputBuf[l] ) )
- {
- OutputLen-- ;
- l-- ;
- }
-
- if (! OutputLen ) return ;
-
- /* cadre/centre/justifie */
-
- *tmp = '\0' ;
-
- l = ( TmpCenter ) ? AM_CENTER : AdjustMode ;
- switch ( l )
- {
- case AM_BOTH : c = adjust_b() ; break ;
- case AM_LEFT : c = 0 ; break ;
- case AM_RIGHT : c = adjust_r() ; break ;
- case AM_CENTER : c = adjust_c() ; break ;
- }
-
- if ( c )
- {
- l = strlen( tmp ) ;
- strncpy( OutputBuf , tmp , l ) ;
- OutputLen = l ;
- }
-
- }
-
-