Home | History | Annotate | Line # | Download | only in libcurses
delch.c revision 1.19.6.1
      1  1.19.6.1    blymn /*	$NetBSD: delch.c,v 1.19.6.1 2007/01/21 11:38:59 blymn Exp $	*/
      2       1.8    mikel 
      3       1.1      cgd /*
      4       1.7      cgd  * Copyright (c) 1981, 1993, 1994
      5       1.5      cgd  *	The Regents of the University of California.  All rights reserved.
      6       1.1      cgd  *
      7       1.1      cgd  * Redistribution and use in source and binary forms, with or without
      8       1.1      cgd  * modification, are permitted provided that the following conditions
      9       1.1      cgd  * are met:
     10       1.1      cgd  * 1. Redistributions of source code must retain the above copyright
     11  1.19.6.1    blymn  *	notice, this list of conditions and the following disclaimer.
     12       1.1      cgd  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.19.6.1    blymn  *	notice, this list of conditions and the following disclaimer in the
     14  1.19.6.1    blymn  *	documentation and/or other materials provided with the distribution.
     15      1.16      agc  * 3. Neither the name of the University nor the names of its contributors
     16  1.19.6.1    blymn  *	may be used to endorse or promote products derived from this software
     17  1.19.6.1    blymn  *	without specific prior written permission.
     18       1.1      cgd  *
     19       1.1      cgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     20       1.1      cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     21       1.1      cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22       1.1      cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     23       1.1      cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     24       1.1      cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     25       1.1      cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     26       1.1      cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     27       1.1      cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     28       1.1      cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29       1.1      cgd  * SUCH DAMAGE.
     30       1.1      cgd  */
     31       1.1      cgd 
     32       1.8    mikel #include <sys/cdefs.h>
     33       1.1      cgd #ifndef lint
     34       1.8    mikel #if 0
     35       1.7      cgd static char sccsid[] = "@(#)delch.c	8.2 (Berkeley) 5/4/94";
     36       1.8    mikel #else
     37  1.19.6.1    blymn __RCSID("$NetBSD: delch.c,v 1.19.6.1 2007/01/21 11:38:59 blymn Exp $");
     38       1.8    mikel #endif
     39      1.10      mrg #endif				/* not lint */
     40       1.1      cgd 
     41       1.5      cgd #include <string.h>
     42  1.19.6.1    blymn #include <stdlib.h>
     43       1.7      cgd 
     44       1.7      cgd #include "curses.h"
     45      1.11    blymn #include "curses_private.h"
     46       1.1      cgd 
     47      1.12    blymn #ifndef _CURSES_USE_MACROS
     48      1.12    blymn /*
     49      1.12    blymn  * delch --
     50      1.17      wiz  *	Do a delete-char on the line, leaving (cury, curx) unchanged.
     51      1.12    blymn  */
     52      1.12    blymn int
     53      1.12    blymn delch(void)
     54      1.12    blymn {
     55      1.12    blymn 	return wdelch(stdscr);
     56      1.12    blymn }
     57      1.12    blymn 
     58      1.12    blymn /*
     59      1.12    blymn  * mvdelch --
     60  1.19.6.1    blymn  *	  Do a delete-char on the line at (y, x) on stdscr.
     61      1.12    blymn  */
     62      1.12    blymn int
     63      1.12    blymn mvdelch(int y, int x)
     64      1.12    blymn {
     65      1.12    blymn 	return mvwdelch(stdscr, y, x);
     66      1.12    blymn }
     67      1.12    blymn 
     68      1.12    blymn /*
     69      1.12    blymn  * mvwdelch --
     70  1.19.6.1    blymn  *	  Do a delete-char on the line at (y, x) of the given window.
     71      1.12    blymn  */
     72      1.12    blymn int
     73      1.12    blymn mvwdelch(WINDOW *win, int y, int x)
     74      1.12    blymn {
     75      1.12    blymn 	if (wmove(win, y, x) == ERR)
     76      1.12    blymn 		return ERR;
     77      1.12    blymn 
     78      1.12    blymn 	return wdelch(win);
     79      1.12    blymn }
     80      1.12    blymn 
     81      1.12    blymn #endif
     82      1.12    blymn 
     83       1.1      cgd /*
     84       1.4  mycroft  * wdelch --
     85      1.17      wiz  *	Do a delete-char on the line, leaving (cury, curx) unchanged.
     86       1.1      cgd  */
     87       1.4  mycroft int
     88      1.12    blymn wdelch(WINDOW *win)
     89       1.4  mycroft {
     90       1.9    perry 	__LDATA *end, *temp1, *temp2;
     91       1.1      cgd 
     92  1.19.6.1    blymn #ifndef HAVE_WCHAR
     93       1.5      cgd 	end = &win->lines[win->cury]->line[win->maxx - 1];
     94       1.5      cgd 	temp1 = &win->lines[win->cury]->line[win->curx];
     95       1.1      cgd 	temp2 = temp1 + 1;
     96       1.5      cgd 	while (temp1 < end) {
     97      1.10      mrg 		(void) memcpy(temp1, temp2, sizeof(__LDATA));
     98       1.5      cgd 		temp1++, temp2++;
     99       1.5      cgd 	}
    100      1.19      jdc 	temp1->ch = win->bch;
    101      1.19      jdc 	if (__using_color && win != curscr)
    102      1.19      jdc 		temp1->attr = win->battr & __COLOR;
    103      1.19      jdc 	else
    104      1.19      jdc 		temp1->attr = 0;
    105      1.14  mycroft 	__touchline(win, (int) win->cury, (int) win->curx, (int) win->maxx - 1);
    106       1.4  mycroft 	return (OK);
    107  1.19.6.1    blymn #else
    108  1.19.6.1    blymn 	int cw, sx;
    109  1.19.6.1    blymn 	nschar_t *np, *tnp;
    110  1.19.6.1    blymn 
    111  1.19.6.1    blymn 	end = &win->lines[win->cury]->line[win->maxx - 1];
    112  1.19.6.1    blymn 	sx = win->curx;
    113  1.19.6.1    blymn 	temp1 = &win->lines[win->cury]->line[win->curx];
    114  1.19.6.1    blymn 	cw = WCOL( *temp1 );
    115  1.19.6.1    blymn 	if ( cw < 0 ) {
    116  1.19.6.1    blymn 		temp1 += cw;
    117  1.19.6.1    blymn 		sx += cw;
    118  1.19.6.1    blymn 		cw = WCOL( *temp1 );
    119  1.19.6.1    blymn 	}
    120  1.19.6.1    blymn 	np = temp1->nsp;
    121  1.19.6.1    blymn 	if (np) {
    122  1.19.6.1    blymn 		while ( np ) {
    123  1.19.6.1    blymn 			tnp = np->next;
    124  1.19.6.1    blymn 			free( np );
    125  1.19.6.1    blymn 			np = tnp;
    126  1.19.6.1    blymn 		}
    127  1.19.6.1    blymn 		temp1->nsp = NULL;
    128  1.19.6.1    blymn 	}
    129  1.19.6.1    blymn 	if ( sx + cw < win->maxx ) {
    130  1.19.6.1    blymn 		temp2 = temp1 + cw;
    131  1.19.6.1    blymn 		while ( temp1 < end - ( cw - 1 )) {
    132  1.19.6.1    blymn 			( void )memcpy( temp1, temp2, sizeof( __LDATA ));
    133  1.19.6.1    blymn 			temp1++, temp2++;
    134  1.19.6.1    blymn 		}
    135  1.19.6.1    blymn 	}
    136  1.19.6.1    blymn 	while ( temp1 <= end ) {
    137  1.19.6.1    blymn 		temp1->ch = ( wchar_t )btowc(( int ) win->bch );
    138  1.19.6.1    blymn 		temp1->attr = 0;
    139  1.19.6.1    blymn 		if (_cursesi_copy_nsp(win->bnsp, temp1) == ERR)
    140  1.19.6.1    blymn 			return ERR;
    141  1.19.6.1    blymn 		temp1++;
    142  1.19.6.1    blymn 	}
    143  1.19.6.1    blymn 	__touchline(win, (int) win->cury, sx, (int) win->maxx - 1);
    144  1.19.6.1    blymn 	return (OK);
    145  1.19.6.1    blymn #endif /* HAVE_WCHAR */
    146       1.1      cgd }
    147