|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.