1*6348e3f3Sblymn /* $NetBSD: add_wch.c,v 1.10 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: add_wch.c,v 1.10 2024/12/23 02:58:03 blymn Exp $"); 40fa0b432bSblymn #endif /* not lint */ 41fa0b432bSblymn 42fa0b432bSblymn #include <stdlib.h> 43fa0b432bSblymn #include "curses.h" 44fa0b432bSblymn #include "curses_private.h" 45e124de36Sblymn #ifdef DEBUG 46e124de36Sblymn #include <assert.h> 47e124de36Sblymn #endif 48fa0b432bSblymn 49fa0b432bSblymn /* 50fa0b432bSblymn * add_wch -- 51fa0b432bSblymn * Add the wide character to the current position in stdscr. 52fa0b432bSblymn * 53fa0b432bSblymn */ 54fa0b432bSblymn int 55fa0b432bSblymn add_wch(const cchar_t *wch) 56fa0b432bSblymn { 57fa0b432bSblymn return wadd_wch(stdscr, wch); 58fa0b432bSblymn } 59fa0b432bSblymn 60fa0b432bSblymn 61fa0b432bSblymn /* 62fa0b432bSblymn * mvadd_wch -- 63fa0b432bSblymn * Add the wide character to stdscr at the given location. 64fa0b432bSblymn */ 65fa0b432bSblymn int 66fa0b432bSblymn mvadd_wch(int y, int x, const cchar_t *wch) 67fa0b432bSblymn { 68fa0b432bSblymn return mvwadd_wch(stdscr, y, x, wch); 69fa0b432bSblymn } 70fa0b432bSblymn 71fa0b432bSblymn 72fa0b432bSblymn /* 73fa0b432bSblymn * mvwadd_wch -- 74fa0b432bSblymn * Add the character to the given window at the given location. 75fa0b432bSblymn */ 76fa0b432bSblymn int 77fa0b432bSblymn mvwadd_wch(WINDOW *win, int y, int x, const cchar_t *wch) 78fa0b432bSblymn { 792a780e62Sblymn if (wmove(win, y, x) == ERR) 80fa0b432bSblymn return ERR; 81fa0b432bSblymn 82fa0b432bSblymn return wadd_wch(win, wch); 83fa0b432bSblymn } 84fa0b432bSblymn 85fa0b432bSblymn 86fa0b432bSblymn /* 87fa0b432bSblymn * wadd_wch -- 88fa0b432bSblymn * Add the wide character to the current position in the 89fa0b432bSblymn * given window. 90fa0b432bSblymn * 91fa0b432bSblymn */ 92fa0b432bSblymn int 93fa0b432bSblymn wadd_wch(WINDOW *win, const cchar_t *wch) 94fa0b432bSblymn { 95e2cfd49cSblymn int y = win->cury; 96fa0b432bSblymn __LINE *lnp = NULL; 97fa0b432bSblymn 98*6348e3f3Sblymn if (__predict_false(win == NULL)) 99*6348e3f3Sblymn return ERR; 100*6348e3f3Sblymn 101fa0b432bSblymn #ifdef DEBUG 102e124de36Sblymn int i; 103e2cfd49cSblymn int x = win->curx; 104e124de36Sblymn 105fa0b432bSblymn for (i = 0; i < win->maxy; i++) { 10643d5eb45Sroy assert(win->alines[i]->sentinel == SENTINEL_VALUE); 107fa0b432bSblymn } 1087d6b8c31Sblymn __CTRACE(__CTRACE_INPUT, "wadd_wch: win(%p), x: %d, y: %d\n", 1097d6b8c31Sblymn win, x, y); 110fa0b432bSblymn #endif 11143d5eb45Sroy lnp = win->alines[y]; 112e2cfd49cSblymn return _cursesi_addwchar(win, &lnp, &(win->cury), &(win->curx), wch, 1); 113fa0b432bSblymn } 114