#include #include "mucurses.h" #include "cursor.h" /** @file * * MuCurses clearing functions * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); /** * Clear a window to the bottom from current cursor position * * @v *win subject window * @ret rc return status code */ int wclrtobot ( WINDOW *win ) { struct cursor_pos pos; _store_curs_pos( win, &pos ); do { _wputc( win, ' ', WRAP ); } while ( win->curs_y + win->curs_x ); _restore_curs_pos( win, &pos ); return OK; } /** * Clear a window to the end of the current line * * @v *win subject window * @ret rc return status code */ int wclrtoeol ( WINDOW *win ) { struct cursor_pos pos; _store_curs_pos( win, &pos ); while ( ( win->curs_y - pos.y ) == 0 ) { _wputc( win, ' ', WRAP ); } _restore_curs_pos( win, &pos ); return OK; } /** * Delete character under the cursor in a window * * @v *win subject window * @ret rc return status code */ int wdelch ( WINDOW *win ) { _wputc( win, ' ', NOWRAP ); _wcursback( win ); return OK; } /** * Delete line under a window's cursor * * @v *win subject window * @ret rc return status code */ int wdeleteln ( WINDOW *win ) { struct cursor_pos pos; _store_curs_pos( win, &pos ); /* let's just set the cursor to the beginning of the line and let wclrtoeol do the work :) */ wmove( win, win->curs_y, 0 ); wclrtoeol( win ); _restore_curs_pos( win, &pos ); return OK; } /** * Completely clear a window * * @v *win subject window * @ret rc return status code */ int werase ( WINDOW *win ) { wmove( win, 0, 0 ); wclrtobot( win ); return OK; } /** * Completely clear the screen * * @ret rc return status code */ int erase ( void ) { stdscr->scr->erase( stdscr->scr, stdscr->attrs ); return OK; }