[comp.os.minix] fold

froese@eric.mpr.ca (Edwin Froese) (02/27/89)

EFTH MINIX report #70  - February 1989 -  fold(1)


Yet another tool: folds long lines.....

		Terrence W. Holm
		  holm@bdc.ubc.ca


----------------------------------------------------------
echo x - fold.1
sed '/^X/s///' > fold.1 << '/'
XNAME
X    fold(1)		- fold long lines
X
XSYNOPSIS
X    fold  [ -width ]  [ file ... ]
X
XDESCRIPTION
X    Fold(1) copies the named files to standard output, inserting
X    a newline character if a line would be longer than <width>
X    characters. If no files are specified then standard input is
X    used. The default width is 80.
/
echo x - fold.c
sed '/^X/s///' > fold.c << '/'
X/*  fold(1)          Terrence W. Holm      Feb. 1989  */
X
X/*  Usage:  fold  [ -width ]  [ file ... ]  */
X
X#include <stdio.h>
X
X#define  TAB		8
X#define  DEFAULT_WIDTH  80
X
X
Xmain( argc, argv )
X  int   argc;
X  char *argv[];
X
X  {
X  int  width = DEFAULT_WIDTH;
X  int  i;
X  FILE *f;
X
X  if ( argc > 1  &&  argv[1][0] == '-' )
X    {
X    if ( (width = atoi( &argv[1][1] )) <= 0 )
X	{
X	fprintf( stderr, "Bad number for fold\n" );
X  	exit( 1 );
X	}
X
X    --argc;
X    ++argv;
X    }
X
X  if ( argc == 1 )
X    Fold( stdin, width );
X  else
X    for ( i = 1;  i < argc;  ++i )
X      {
X      if ( (f = fopen( argv[i], "r" )) == NULL )
X        {
X        perror( argv[i] );
X        exit( 1 );
X        }
X
X      Fold( f, width );
X      fclose( f );
X      }
X
X  exit( 0 );
X  }
X
X
X
X
Xint column = 0;		/*  Current column, retained between files  */
X
X
XFold( f, width )
X  FILE *f;
X  int  width;
X
X  {
X  int c;
X
X  while ( (c = getc( f )) != EOF )
X    {
X    if ( c == '\t' )
X      column = ( column / TAB + 1 ) * TAB;
X    else if ( c == '\b' )
X      column = column > 0 ? column - 1 : 0;
X    else if ( c == '\n'  ||  c == '\r' )
X      column = 0;
X    else
X      ++column;
X
X    if ( column > width )
X      {
X      putchar( '\n' );
X      column = c == '\t' ? TAB : 1;
X      }
X
X    putchar( c );
X    }
X  }
/
----------------------------------------------------------