iPXE
clear.c
Go to the documentation of this file.
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 }
MuCurses header file.
int erase(void)
Completely clear the screen.
Definition: clear.c:97
int wdeleteln(WINDOW *win)
Delete line under a window's cursor.
Definition: clear.c:68
int wmove(WINDOW *win, int y, int x) __nonnull
Move a window's cursor to the specified position.
Definition: mucurses.c:135
Curses Window struct.
Definition: curses.h:89
MuCurses cursor implementation specific header file.
unsigned int curs_y
Definition: curses.h:97
MuCurses core implementation specific header file.
Definition: sis900.h:208
int werase(WINDOW *win)
Completely clear a window.
Definition: clear.c:86
#define stdscr
Definition: curses.h:110
#define NOWRAP
Definition: mucurses.h:13
int wdelch(WINDOW *win)
Delete character under the cursor in a window.
Definition: clear.c:55
int wclrtoeol(WINDOW *win)
Clear a window to the end of the current line.
Definition: clear.c:37
unsigned int y
Definition: cursor.h:13
void _wcursback(WINDOW *win) __nonnull
Retreat the cursor back one position (useful for a whole host of ops)
Definition: mucurses.c:87
static void _restore_curs_pos(WINDOW *win, struct cursor_pos *pos)
Restore cursor position from encoded backup variable.
Definition: cursor.h:22
static void _store_curs_pos(WINDOW *win, struct cursor_pos *pos)
Store cursor position for later restoration.
Definition: cursor.h:32
void _wputc(WINDOW *win, char c, int wrap) __nonnull
Write a single character to a window.
Definition: mucurses.c:77
#define WRAP
Definition: mucurses.h:12
unsigned int curs_x
window cursor position
Definition: curses.h:97
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
int wclrtobot(WINDOW *win)
Clear a window to the bottom from current cursor position.
Definition: clear.c:19