1*6348e3f3Sblymn /* $NetBSD: in_wch.c,v 1.9 2024/12/23 02:58:03 blymn Exp $ */ 2fa0b432bSblymn 3fa0b432bSblymn /* 4fa0b432bSblymn * Copyright (c) 2005 The NetBSD Foundation Inc. 5fa0b432bSblymn * All rights reserved. 6fa0b432bSblymn * 7fa0b432bSblymn * This code is derived from code donated to the NetBSD Foundation 8fa0b432bSblymn * by Ruibiao Qiu <ruibiao@arl.wustl.edu,ruibiao@gmail.com>. 9fa0b432bSblymn * 10fa0b432bSblymn * 11fa0b432bSblymn * Redistribution and use in source and binary forms, with or without 12fa0b432bSblymn * modification, are permitted provided that the following conditions 13fa0b432bSblymn * are met: 14fa0b432bSblymn * 1. Redistributions of source code must retain the above copyright 15fa0b432bSblymn * notice, this list of conditions and the following disclaimer. 16fa0b432bSblymn * 2. Redistributions in binary form must reproduce the above copyright 17fa0b432bSblymn * notice, this list of conditions and the following disclaimer in the 18fa0b432bSblymn * documentation and/or other materials provided with the distribution. 19fa0b432bSblymn * 3. Neither the name of the NetBSD Foundation nor the names of its 20fa0b432bSblymn * contributors may be used to endorse or promote products derived 21fa0b432bSblymn * from this software without specific prior written permission. 22fa0b432bSblymn * 23fa0b432bSblymn * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 24fa0b432bSblymn * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 25fa0b432bSblymn * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 26fa0b432bSblymn * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27fa0b432bSblymn * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28fa0b432bSblymn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29fa0b432bSblymn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30fa0b432bSblymn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31fa0b432bSblymn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32fa0b432bSblymn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33fa0b432bSblymn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34fa0b432bSblymn * SUCH DAMAGE. 35fa0b432bSblymn */ 36fa0b432bSblymn 37fa0b432bSblymn #include <sys/cdefs.h> 38fa0b432bSblymn #ifndef lint 39*6348e3f3Sblymn __RCSID("$NetBSD: in_wch.c,v 1.9 2024/12/23 02:58:03 blymn Exp $"); 40fa0b432bSblymn #endif /* not lint */ 41fa0b432bSblymn 42fa0b432bSblymn #include "curses.h" 43fa0b432bSblymn #include "curses_private.h" 44fa0b432bSblymn 45fa0b432bSblymn /* 46fa0b432bSblymn * in_wch -- 47fa0b432bSblymn * Return wide character at cursor position from stdscr. 48fa0b432bSblymn */ 49fa0b432bSblymn int 50fa0b432bSblymn in_wch(cchar_t *wcval) 51fa0b432bSblymn { 52fa0b432bSblymn return win_wch(stdscr, wcval); 53fa0b432bSblymn } 54fa0b432bSblymn 55fa0b432bSblymn /* 56fa0b432bSblymn * mvin_wch -- 57fa0b432bSblymn * Return wide character at position (y, x) from stdscr. 58fa0b432bSblymn */ 59fa0b432bSblymn int 60fa0b432bSblymn mvin_wch(int y, int x, cchar_t *wcval) 61fa0b432bSblymn { 62fa0b432bSblymn return mvwin_wch(stdscr, y, x, wcval); 63fa0b432bSblymn } 64fa0b432bSblymn 65fa0b432bSblymn /* 66fa0b432bSblymn * mvwin_wch -- 67fa0b432bSblymn * Return wide character at position (y, x) from the given window. 68fa0b432bSblymn */ 69fa0b432bSblymn int 70fa0b432bSblymn mvwin_wch(WINDOW *win, int y, int x, cchar_t *wcval) 71fa0b432bSblymn { 722a780e62Sblymn if (wmove(win, y, x) == ERR) 73fa0b432bSblymn return ERR; 74fa0b432bSblymn 75fa0b432bSblymn return win_wch(win, wcval); 76fa0b432bSblymn } 77fa0b432bSblymn 78fa0b432bSblymn /* 79fa0b432bSblymn * win_wch -- 80fa0b432bSblymn * Return wide character at cursor position. 81fa0b432bSblymn */ 82fa0b432bSblymn int 83fa0b432bSblymn win_wch(WINDOW *win, cchar_t *wcval) 84fa0b432bSblymn { 85*6348e3f3Sblymn if (__predict_false(win == NULL)) 86*6348e3f3Sblymn return ERR; 87*6348e3f3Sblymn 88fa0b432bSblymn nschar_t *np; 8943d5eb45Sroy __LDATA *lp = &win->alines[win->cury]->line[win->curx]; 90f1942931Sblymn int cw = lp->wcols; 91fa0b432bSblymn 92fa0b432bSblymn if (cw < 0) 93fa0b432bSblymn lp += cw; 94fa0b432bSblymn wcval->vals[0] = lp->ch; 95fa0b432bSblymn wcval->attributes = lp->attr; 96fa0b432bSblymn wcval->elements = 1; 97fa0b432bSblymn np = lp->nsp; 98fa0b432bSblymn if (np) { 99fa0b432bSblymn do { 100fa0b432bSblymn wcval->vals[wcval->elements++] = np->ch; 101fa0b432bSblymn np = np-> next; 102fa0b432bSblymn } while (np); 103fa0b432bSblymn } 104fa0b432bSblymn 105fa0b432bSblymn return OK; 106fa0b432bSblymn } 107