[prefix] Use garbage-collectable section names
[ipxe.git] / src / hci / mucurses / clear.c
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_OR_UBDL );
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
92 /**
93 * Completely clear the screen
94 *
95 * @ret rc return status code
96 */
97 int erase ( void ) {
98 stdscr->scr->erase( stdscr->scr, stdscr->attrs );
99 return OK;
100 }