xref: /csrg-svn/usr.bin/window/wwclreol.c (revision 62477)
118739Sedward /*
2*62477Sbostic  * Copyright (c) 1983, 1993
3*62477Sbostic  *	The Regents of the University of California.  All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918739Sedward  */
1018739Sedward 
1133514Sbostic #ifndef lint
12*62477Sbostic static char sccsid[] = "@(#)wwclreol.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1514423Sedward #include "ww.h"
1614650Sedward #include "tt.h"
1714423Sedward 
1814423Sedward /*
1914423Sedward  * Clear w to the end of line.
2035330Sedward  * If cleared is true, then the screen line has already been cleared.
2114423Sedward  */
wwclreol1(w,row,col,cleared)2214987Sedward wwclreol1(w, row, col, cleared)
2314423Sedward register struct ww *w;
2414987Sedward int row, col;
2514459Sedward char cleared;
2614423Sedward {
2714423Sedward 	register i;
2814423Sedward 
2914976Sedward 	/*
3014976Sedward 	 * Clear the buffer right off
3114976Sedward 	 */
3214976Sedward 	{
3314976Sedward 		register union ww_char *buf;
3414976Sedward 
3514987Sedward 		buf = &w->ww_buf[row][col];
3614987Sedward 		for (i = w->ww_b.r - col; --i >= 0;)
3714423Sedward 			buf++->c_w = ' ';
3814976Sedward 	}
3914976Sedward 
4014976Sedward 	/*
4114976Sedward 	 * If can't see it, just return.
4214976Sedward 	 */
4314987Sedward 	if (row < w->ww_i.t || row >= w->ww_i.b
4414987Sedward 	    || w->ww_i.r <= 0 || w->ww_i.r <= col)
4514423Sedward 		return;
4614976Sedward 
4714987Sedward 	if (col < w->ww_i.l)
4814987Sedward 		col = w->ww_i.l;
4914976Sedward 
5014976Sedward 	/*
5135330Sedward 	 * Now fix wwns.
5214976Sedward 	 */
5335330Sedward 	{
5414976Sedward 		register union ww_char *s;
5514976Sedward 		register char *smap, *win;
5614976Sedward 
5715636Sedward 		i = col;
5815636Sedward 		smap = &wwsmap[row][i];
5915817Sedward 		s = &wwns[row][i];
6015817Sedward 		win = &w->ww_win[row][i];
6135330Sedward 		for (i = w->ww_i.r - i; --i >= 0;)
6235330Sedward 			if (*smap++ == w->ww_index)
6335330Sedward 				s++->c_w = ' ' | *win++ << WWC_MSHIFT;
6435330Sedward 			else
6535330Sedward 				s++, win++;
6614423Sedward 	}
6735330Sedward 	if (!cleared)
6835330Sedward 		wwtouched[row] |= WWU_TOUCHED;
6914423Sedward }
70