/* Wrap a fasta format file at 60 characters. * Header and comment lines are exempted. * Blank lines are removed. * * To do: Make wrap point (now 60) settable from cmd line. * Don't remove (or switch removal of) blank lines. * Wrap point of 0 -> no wrapping. i.e. seq all on one line. */ /* Copyright (c) 2000 Blossom Associates West */ /* All rights reserved. */ #include enum { DFLTN = 60 /* default output line length */ }; enum states { BOL, VERBATIM, WRAP }; int main( int argc, char* argv[] ) { int c; int p = 0; int n = DFLTN; int state = BOL; while ( EOF != ( c = getchar() ) ) { switch ( state ) { case BOL: switch ( c ) { case '>': case ';': if ( 0 != p ) { putchar( '\n' ); p = 0; } putchar( c ); state = VERBATIM; break; default: state = WRAP; if ( isprint( c ) ) { putchar( c ); p++; p %= n; if ( 0 == p ) { putchar( '\n' ); } } break; } break; case VERBATIM: putchar( c ); if ( '\n' == c ) { state = BOL; } break; case WRAP: if ( isprint( c ) ) { putchar( c ); p++; p %= n; if ( 0 == p ) { putchar( '\n' ); } } else if ( '\n' == c ) { state = BOL; } } } if ( 0 != p ) putchar( '\n' ); }