Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / hci / mucurses / print.c
1 #include <curses.h>
2 #include <stdio.h>
3 #include <stddef.h>
4 #include <ipxe/vsprintf.h>
5 #include "mucurses.h"
6
7 /** @file
8  *
9  * MuCurses printing functions
10  *
11  */
12
13 FILE_LICENCE ( GPL2_OR_LATER );
14
15 /**
16  * Add a single-byte character and rendition to a window and advance
17  * the cursor
18  *
19  * @v *win      window to be rendered in
20  * @v ch        character to be added at cursor
21  * @ret rc      return status code
22  */
23 int waddch ( WINDOW *win, const chtype ch ) {
24         _wputch( win, ch, WRAP );
25         return OK;
26 }
27
28 /**
29  * Add string of single-byte characters to a window
30  *
31  * @v *win      window to be rendered in
32  * @v *str      standard c-style string
33  * @v n         max number of chars from string to render
34  * @ret rc      return status code
35  */
36 int waddnstr ( WINDOW *win, const char *str, int n ) {
37         _wputstr( win, str, WRAP, n );
38         return OK;
39 }
40
41 struct printw_context {
42         struct printf_context ctx;
43         WINDOW *win;
44 };
45
46 static void _printw_handler ( struct printf_context *ctx, unsigned int c ) {
47         struct printw_context *wctx =
48                 container_of ( ctx, struct printw_context, ctx );
49
50         _wputch( wctx->win, c | wctx->win->attrs, WRAP );
51 }
52
53 /**
54  * Print formatted output in a window
55  *
56  * @v *win      subject window
57  * @v *fmt      formatted string
58  * @v varglist  argument list
59  * @ret rc      return status code
60  */
61 int vw_printw ( WINDOW *win, const char *fmt, va_list varglist ) {
62         struct printw_context wctx;
63
64         wctx.win = win;
65         wctx.ctx.handler = _printw_handler;
66         vcprintf ( &(wctx.ctx), fmt, varglist );
67         return OK;
68 }
69
70 /**
71  * Print formatted output to a window
72  *
73  * @v *win      subject window
74  * @v *fmt      formatted string
75  * @v ...       string arguments
76  * @ret rc      return status code
77  */
78 int wprintw ( WINDOW *win, const char *fmt, ... ) {
79         va_list args;
80         int i;
81
82         va_start ( args, fmt );
83         i = vw_printw ( win, fmt, args );
84         va_end ( args );
85         return i;
86 }