xref: /netbsd-src/lib/libcurses/meta.c (revision 6348e3f32a4431b45d07e1da16fd7b12725a45e7)
1*6348e3f3Sblymn /*	$NetBSD: meta.c,v 1.11 2024/12/23 02:58:03 blymn Exp $	*/
2bb083e0eSblymn 
3bb083e0eSblymn /*-
4bb083e0eSblymn  * Copyright (c) 1998-2000 Brett Lymn
5bb083e0eSblymn  *                         (blymn@baea.com.au, brett_lymn@yahoo.com.au)
6bb083e0eSblymn  * All rights reserved.
7bb083e0eSblymn  *
8bb083e0eSblymn  * This code has been donated to The NetBSD Foundation by the Author.
9bb083e0eSblymn  *
10bb083e0eSblymn  * Redistribution and use in source and binary forms, with or without
11bb083e0eSblymn  * modification, are permitted provided that the following conditions
12bb083e0eSblymn  * are met:
13bb083e0eSblymn  * 1. Redistributions of source code must retain the above copyright
14bb083e0eSblymn  *    notice, this list of conditions and the following disclaimer.
15bb083e0eSblymn  * 2. The name of the author may not be used to endorse or promote products
16c03a48d6Swiz  *    derived from this software without specific prior written permission
17bb083e0eSblymn  *
18bb083e0eSblymn  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19bb083e0eSblymn  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20bb083e0eSblymn  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21bb083e0eSblymn  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22bb083e0eSblymn  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23bb083e0eSblymn  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24bb083e0eSblymn  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25bb083e0eSblymn  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26bb083e0eSblymn  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27bb083e0eSblymn  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28bb083e0eSblymn  *
29bb083e0eSblymn  *
30bb083e0eSblymn  */
31bb083e0eSblymn 
3266cab71cSblymn #include <sys/cdefs.h>
3366cab71cSblymn #ifndef lint
34*6348e3f3Sblymn __RCSID("$NetBSD: meta.c,v 1.11 2024/12/23 02:58:03 blymn Exp $");
3566cab71cSblymn #endif				/* not lint */
3666cab71cSblymn 
37bb083e0eSblymn #include "curses.h"
38bb083e0eSblymn #include "curses_private.h"
39bb083e0eSblymn 
40bb083e0eSblymn /*
41bb083e0eSblymn  * meta --
42bb083e0eSblymn  *    Turn on or off the terminal meta mode.
43bb083e0eSblymn  */
44bb083e0eSblymn int
45bb083e0eSblymn meta(/*ARGSUSED*/ WINDOW *win, bool bf)
46bb083e0eSblymn {
47*6348e3f3Sblymn 	if (__predict_false(win == NULL))
48*6348e3f3Sblymn 		return ERR;
4950a63ac8Sroy 
50bb083e0eSblymn 	if (bf == TRUE) {
5198eb8895Sroy 		if (meta_on != NULL) {
521f221324Sjdc 			__CTRACE(__CTRACE_MISC, "meta: TRUE\n");
5398eb8895Sroy 			tputs(meta_on, 0, __cputchar);
54c84d91aaSblymn 			_cursesi_screen->meta_state = TRUE;
5512654ca8Sblymn 			fflush(_cursesi_screen->outfd);
56bb083e0eSblymn 		}
57bb083e0eSblymn 	} else {
5898eb8895Sroy 		if (meta_off != NULL) {
591f221324Sjdc 			__CTRACE(__CTRACE_MISC, "meta: FALSE\n");
6098eb8895Sroy 			tputs(meta_off, 0, __cputchar);
61c84d91aaSblymn 			_cursesi_screen->meta_state = FALSE;
6212654ca8Sblymn 			fflush(_cursesi_screen->outfd);
63bb083e0eSblymn 		}
64bb083e0eSblymn 	}
65bb083e0eSblymn 
66bb083e0eSblymn 	return OK;
67bb083e0eSblymn }
68bb083e0eSblymn 
6966cab71cSblymn /*
7066cab71cSblymn  * __restore_meta_state --
7166cab71cSblymn  *    Restore old meta state.
7266cab71cSblymn  */
7366cab71cSblymn void
7466cab71cSblymn __restore_meta_state(void)
7566cab71cSblymn {
7650a63ac8Sroy 
77c84d91aaSblymn 	meta(NULL, _cursesi_screen->meta_state);
7866cab71cSblymn }
79bb083e0eSblymn 
80