Aztec C source - detab.c

Dave Newkirk dcn at ihuxl.UUCP
Sat Nov 12 08:57:12 AEST 1983


/* detab - replace tabs with blanks */

#include "stdio.h"

#define INTERVAL 4
#define SQUOTE 0x27
#define DQUOTE 0x22

main(argc, argv)
int argc ;
char *argv[] ;
{
	FILE *input ;


	argc-- ; argv++ ;

	if( argc == 0 )
		detab( stdin ) ;

	else
		for( ; argc>0 ; argc--,argv++)
			if( (input=fopen(*argv,"r")) == NULL ) {
				fprintf(stderr, "detab: can't open %s\n", *argv) ;
				exit(1) ;
			}
			else {
				detab( input ) ;
				fclose( input ) ;
			}

	exit(0) ;

} /* end main */

/* detab - replace tabs with blanks */

detab( in )
FILE *in ;
{
	int c, i, col, tabover, sqstring, dqstring ;


	col = 0 ;
	sqstring = dqstring = FALSE ;

	while( (c=agetc(in)) != EOF ) {

		if( c==TAB && !sqstring && !dqstring ) {
			tabover = INTERVAL - (col % INTERVAL) ;
			for( i=1 ; i <= tabover ; i++ )
				aputc( BLANK, stdout ) ;
			col += tabover ;
		}
		else if( c == NL ) {
			aputc( NL, stdout ) ;
			col = 0 ;
			sqstring = dqstring = FALSE ;
		}
		else {
			aputc( c, stdout ) ;
			col++ ;
			if( c == SQUOTE )
				sqstring = 1 - sqstring ;
			else if( c == DQUOTE )
				dqstring = 1 - dqstring ;
		}

	} /* end while */

} /* end detab */



More information about the Comp.sources.unix mailing list