c5b70282b2e393c2fdbede255f06743e35de4f9f
[people/xl0/gpxe.git] / src / hci / mucurses / print.c
1 #include <curses.h>
2 #include <vsprintf.h>
3 #include <stddef.h>
4 #include "core.h"
5
6 static printw_context {
7         struct printf_context ctx;
8         WINDOW *win;
9 };
10
11 static void _printw_handler ( struct printf_context *ctx, unsigned int c ) {
12         struct printw_context *wctx =
13                 container_of ( ctx, struct printw_context, ctx );
14
15         _wputch( wctx->win, c | wctx->win->attrs, WRAP );
16 }
17
18 /**
19  * Print formatted output in a window
20  *
21  * @v *win      subject window
22  * @v *fmt      formatted string
23  * @v varglist  argument list
24  * @ret rc      return status code
25  */
26 int vw_printw ( WINDOW *win, const char *fmt, va_list varglist ) {
27         struct printw_context wctx = {
28                 .win = win,
29                 .ctx = { .handler = _printw_handler, },
30         };
31
32         vcprintf ( &(wctx.ctx), fmt, varglist );
33         return OK;
34 }
35
36 /**
37  * Print formatted output to a window
38  *
39  * @v *win      subject window
40  * @v *fmt      formatted string
41  * @v ...       string arguments
42  * @ret rc      return status code
43  */
44 int wprintw ( WINDOW *win, const char *fmt, ... ) {
45         va_list args;
46         int i;
47
48         va_start ( args, fmt );
49         i = vw_printw ( win, fmt, args );
50         va_end ( args );
51         return i;
52 }