1 #include <curses.h> 2 #include "mucurses.h" 3 #include "cursor.h" 4 5 /** @file 6 * 7 * MuCurses clearing functions 8 * 9 */ 10 11 FILE_LICENCE ( GPL2_OR_LATER ); 12 13 /** 14 * Clear a window to the bottom from current cursor position 15 * 16 * @v *win subject window 17 * @ret rc return status code 18 */ 19 int wclrtobot ( WINDOW *win ) { 20 struct cursor_pos pos; 21 22 _store_curs_pos( win, &pos ); 23 do { 24 _wputc( win, ' ', WRAP ); 25 } while ( win->curs_y + win->curs_x ); 26 _restore_curs_pos( win, &pos ); 27 28 return OK; 29 } 30 31 /** 32 * Clear a window to the end of the current line 33 * 34 * @v *win subject window 35 * @ret rc return status code 36 */ 37 int wclrtoeol ( WINDOW *win ) { 38 struct cursor_pos pos; 39 40 _store_curs_pos( win, &pos ); 41 while ( ( win->curs_y - pos.y ) == 0 ) { 42 _wputc( win, ' ', WRAP ); 43 } 44 _restore_curs_pos( win, &pos ); 45 46 return OK; 47 } 48 49 /** 50 * Delete character under the cursor in a window 51 * 52 * @v *win subject window 53 * @ret rc return status code 54 */ 55 int wdelch ( WINDOW *win ) { 56 _wputc( win, ' ', NOWRAP ); 57 _wcursback( win ); 58 59 return OK; 60 } 61 62 /** 63 * Delete line under a window's cursor 64 * 65 * @v *win subject window 66 * @ret rc return status code 67 */ 68 int wdeleteln ( WINDOW *win ) { 69 struct cursor_pos pos; 70 71 _store_curs_pos( win, &pos ); 72 /* let's just set the cursor to the beginning of the line and 73 let wclrtoeol do the work :) */ 74 wmove( win, win->curs_y, 0 ); 75 wclrtoeol( win ); 76 _restore_curs_pos( win, &pos ); 77 return OK; 78 } 79 80 /** 81 * Completely clear a window 82 * 83 * @v *win subject window 84 * @ret rc return status code 85 */ 86 int werase ( WINDOW *win ) { 87 wmove( win, 0, 0 ); 88 wclrtobot( win ); 89 return OK; 90 } 91