xref: /csrg-svn/usr.bin/vis/foldit.c (revision 62427)
142297Smarc /*-
2*62427Sbostic  * Copyright (c) 1990, 1993
3*62427Sbostic  *	The Regents of the University of California.  All rights reserved.
442297Smarc  *
542297Smarc  * %sccs.include.redist.c%
642297Smarc  */
742297Smarc 
842297Smarc #ifndef lint
9*62427Sbostic static char sccsid[] = "@(#)foldit.c	8.1 (Berkeley) 06/06/93";
1042297Smarc #endif /* not lint */
1142297Smarc 
foldit(chunk,col,max)1242297Smarc foldit(chunk, col, max)
1342297Smarc 	char *chunk;
1442297Smarc {
1542297Smarc 	register char *cp;
1642297Smarc 
1742297Smarc 	/*
1842297Smarc 	 * Keep track of column position. Insert hidden newline
1942297Smarc 	 * if this chunk puts us over the limit.
2042297Smarc 	 */
2142297Smarc again:
2242297Smarc 	cp = chunk;
2342297Smarc 	while (*cp) {
2442297Smarc 		switch(*cp) {
2542297Smarc 		case '\n':
2642297Smarc 		case '\r':
2742297Smarc 			col = 0;
2842297Smarc 			break;
2942297Smarc 		case '\t':
3042297Smarc 			col = col + 8 &~ 07;
3142297Smarc 			break;
3242297Smarc 		case '\b':
3342297Smarc 			col = col ? col - 1 : 0;
3442297Smarc 			break;
3542297Smarc 		default:
3642297Smarc 			col++;
3742297Smarc 		}
3842297Smarc 		if (col > (max - 2)) {
3942297Smarc 			printf("\\\n");
4042297Smarc 			col = 0;
4142297Smarc 			goto again;
4242297Smarc 		}
4342297Smarc 		cp++;
4442297Smarc 	}
4542297Smarc 	return (col);
4642297Smarc }
47