1 /* $OpenBSD: lib_printw.c,v 1.4 2023/10/17 09:52:08 nicm Exp $ */
2
3 /****************************************************************************
4 * Copyright 2018-2019,2020 Thomas E. Dickey *
5 * Copyright 1998-2012,2016 Free Software Foundation, Inc. *
6 * *
7 * Permission is hereby granted, free of charge, to any person obtaining a *
8 * copy of this software and associated documentation files (the *
9 * "Software"), to deal in the Software without restriction, including *
10 * without limitation the rights to use, copy, modify, merge, publish, *
11 * distribute, distribute with modifications, sublicense, and/or sell *
12 * copies of the Software, and to permit persons to whom the Software is *
13 * furnished to do so, subject to the following conditions: *
14 * *
15 * The above copyright notice and this permission notice shall be included *
16 * in all copies or substantial portions of the Software. *
17 * *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
21 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
24 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * *
26 * Except as contained in this notice, the name(s) of the above copyright *
27 * holders shall not be used in advertising or otherwise to promote the *
28 * sale, use or other dealings in this Software without prior written *
29 * authorization. *
30 ****************************************************************************/
31
32 /****************************************************************************
33 * Author: Thomas E. Dickey 1997-on *
34 ****************************************************************************/
35
36 /*
37 ** lib_printw.c
38 **
39 ** The routines printw(), wprintw() and friends.
40 **
41 */
42
43 #include <curses.priv.h>
44
45 MODULE_ID("$Id: lib_printw.c,v 1.4 2023/10/17 09:52:08 nicm Exp $")
46
NCURSES_EXPORT(int)47 NCURSES_EXPORT(int)
48 printw(const char *fmt, ...)
49 {
50 va_list argp;
51 int code;
52
53 #ifdef TRACE
54 va_list argq;
55 va_start(argq, fmt);
56 T((T_CALLED("printw(%s%s)"),
57 _nc_visbuf(fmt), _nc_varargs(fmt, argq)));
58 va_end(argq);
59 #endif
60
61 va_start(argp, fmt);
62 code = vw_printw(stdscr, fmt, argp);
63 va_end(argp);
64
65 returnCode(code);
66 }
67
68 NCURSES_EXPORT(int)
wprintw(WINDOW * win,const char * fmt,...)69 wprintw(WINDOW *win, const char *fmt, ...)
70 {
71 va_list argp;
72 int code;
73
74 #ifdef TRACE
75 va_list argq;
76 va_start(argq, fmt);
77 T((T_CALLED("wprintw(%p,%s%s)"),
78 (void *) win, _nc_visbuf(fmt), _nc_varargs(fmt, argq)));
79 va_end(argq);
80 #endif
81
82 va_start(argp, fmt);
83 code = vw_printw(win, fmt, argp);
84 va_end(argp);
85
86 returnCode(code);
87 }
88
89 NCURSES_EXPORT(int)
mvprintw(int y,int x,const char * fmt,...)90 mvprintw(int y, int x, const char *fmt, ...)
91 {
92 int code;
93
94 #ifdef TRACE
95 va_list argq;
96 va_start(argq, fmt);
97 T((T_CALLED("mvprintw(%d,%d,%s%s)"),
98 y, x, _nc_visbuf(fmt), _nc_varargs(fmt, argq)));
99 va_end(argq);
100 #endif
101
102 if ((code = move(y, x)) != ERR) {
103 va_list argp;
104
105 va_start(argp, fmt);
106 code = vw_printw(stdscr, fmt, argp);
107 va_end(argp);
108 }
109 returnCode(code);
110 }
111
112 NCURSES_EXPORT(int)
mvwprintw(WINDOW * win,int y,int x,const char * fmt,...)113 mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...)
114 {
115 int code;
116
117 #ifdef TRACE
118 va_list argq;
119 va_start(argq, fmt);
120 T((T_CALLED("mvwprintw(%d,%d,%p,%s%s)"),
121 y, x, (void *) win, _nc_visbuf(fmt), _nc_varargs(fmt, argq)));
122 va_end(argq);
123 #endif
124
125 if ((code = wmove(win, y, x)) != ERR) {
126 va_list argp;
127
128 va_start(argp, fmt);
129 code = vw_printw(win, fmt, argp);
130 va_end(argp);
131 }
132 returnCode(code);
133 }
134
135 NCURSES_EXPORT(int)
vwprintw(WINDOW * win,const char * fmt,va_list argp)136 vwprintw(WINDOW *win, const char *fmt, va_list argp)
137 {
138 char *buf;
139 int code = ERR;
140 #if NCURSES_SP_FUNCS
141 SCREEN *sp = _nc_screen_of(win);
142 #endif
143
144 T((T_CALLED("vwprintw(%p,%s,va_list)"), (void *) win, _nc_visbuf(fmt)));
145
146 buf = NCURSES_SP_NAME(_nc_printf_string) (NCURSES_SP_ARGx fmt, argp);
147 if (buf != 0) {
148 code = waddstr(win, buf);
149 }
150 returnCode(code);
151 }
152
153 NCURSES_EXPORT(int)
vw_printw(WINDOW * win,const char * fmt,va_list argp)154 vw_printw(WINDOW *win, const char *fmt, va_list argp)
155 {
156 char *buf;
157 int code = ERR;
158 #if NCURSES_SP_FUNCS
159 SCREEN *sp = _nc_screen_of(win);
160 #endif
161
162 T((T_CALLED("vw_printw(%p,%s,va_list)"), (void *) win, _nc_visbuf(fmt)));
163
164 buf = NCURSES_SP_NAME(_nc_printf_string) (NCURSES_SP_ARGx fmt, argp);
165 if (buf != 0) {
166 code = waddstr(win, buf);
167 }
168 returnCode(code);
169 }
170