1*6348e3f3Sblymn /* $NetBSD: keypad.c,v 1.16 2024/12/23 02:58:03 blymn Exp $ */ 2586d4ce1Smrg 3586d4ce1Smrg /*- 4586d4ce1Smrg * Copyright (c) 1998-1999 Brett Lymn (blymn@baea.com.au, brett_lymn@yahoo.com) 5586d4ce1Smrg * All rights reserved. 6586d4ce1Smrg * 7586d4ce1Smrg * Redistribution and use in source and binary forms, with or without 8586d4ce1Smrg * modification, are permitted provided that the following conditions 9586d4ce1Smrg * are met: 10586d4ce1Smrg * 1. Redistributions of source code must retain the above copyright 11586d4ce1Smrg * notice, this list of conditions and the following disclaimer. 12586d4ce1Smrg * 2. The name of the author may not be used to endorse or promote products 13c03a48d6Swiz * derived from this software without specific prior written permission 14586d4ce1Smrg * 15586d4ce1Smrg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16586d4ce1Smrg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17586d4ce1Smrg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18586d4ce1Smrg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19586d4ce1Smrg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20586d4ce1Smrg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21586d4ce1Smrg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22586d4ce1Smrg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23586d4ce1Smrg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24586d4ce1Smrg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25586d4ce1Smrg * 26586d4ce1Smrg * 27586d4ce1Smrg */ 28586d4ce1Smrg 2966cab71cSblymn #include <sys/cdefs.h> 3066cab71cSblymn #ifndef lint 31*6348e3f3Sblymn __RCSID("$NetBSD: keypad.c,v 1.16 2024/12/23 02:58:03 blymn Exp $"); 3266cab71cSblymn #endif /* not lint */ 3366cab71cSblymn 34586d4ce1Smrg #include "curses.h" 3523464ee5Sblymn #include "curses_private.h" 36586d4ce1Smrg 37586d4ce1Smrg /* 38586d4ce1Smrg * keypad -- 39586d4ce1Smrg * Turn on and off interpretation of function/keypad keys in the 40586d4ce1Smrg * given window. 41586d4ce1Smrg */ 427ad46619Scube int 43aaf74682Sblymn keypad(WINDOW *win, bool bf) 44586d4ce1Smrg { 451f221324Sjdc __CTRACE(__CTRACE_MISC, 461f221324Sjdc "keypad: win %p, %s\n", win, bf ? "TRUE" : "FALSE"); 47*6348e3f3Sblymn if (__predict_false(win == NULL)) 48*6348e3f3Sblymn return ERR; 49*6348e3f3Sblymn 50985e3d49Sjdc if (bf) { 51586d4ce1Smrg win->flags |= __KEYPAD; 52985e3d49Sjdc if (!(curscr->flags & __KEYPAD)) { 5398eb8895Sroy tputs(keypad_xmit, 0, __cputchar); 54985e3d49Sjdc curscr->flags |= __KEYPAD; 55985e3d49Sjdc } 56c1ea940dSjdc } else 57586d4ce1Smrg win->flags &= ~__KEYPAD; 587ad46619Scube 597ad46619Scube return OK; 60586d4ce1Smrg } 612ab1e31dSroy 622ab1e31dSroy /* 632ab1e31dSroy * is_keypad -- 642ab1e31dSroy * Return true if window is set for keypad. 652ab1e31dSroy */ 662ab1e31dSroy bool 672ab1e31dSroy is_keypad(const WINDOW *win) 682ab1e31dSroy { 69*6348e3f3Sblymn if (__predict_false(win == NULL)) 70*6348e3f3Sblymn return ERR; 71*6348e3f3Sblymn 722ab1e31dSroy 732ab1e31dSroy return win->flags & __KEYPAD ? true : false; 742ab1e31dSroy } 75