/****************************************************************************
- * Copyright (c) 2002-2011,2016 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include <curses.priv.h>
-MODULE_ID("$Id: lib_ins_wch.c,v 1.20 2016/03/13 00:42:34 tom Exp $")
+MODULE_ID("$Id: lib_ins_wch.c,v 1.22 2017/04/08 22:52:26 tom Exp $")
/*
* Insert the given character, updating the current location to simplify
_nc_insert_wch(WINDOW *win, const cchar_t *wch)
{
int cells = wcwidth(CharOf(CHDEREF(wch)));
- int cell;
int code = OK;
if (cells < 0) {
cells = 1;
if (win->_curx <= win->_maxx) {
+ int cell;
struct ldat *line = &(win->_line[win->_cury]);
NCURSES_CH_T *end = &(line->text[win->_curx]);
NCURSES_CH_T *temp1 = &(line->text[win->_maxx]);
NCURSES_EXPORT(int)
wins_wch(WINDOW *win, const cchar_t *wch)
{
- NCURSES_SIZE_T oy;
- NCURSES_SIZE_T ox;
int code = ERR;
T((T_CALLED("wins_wch(%p, %s)"), (void *) win, _tracecchar_t(wch)));
if (win != 0) {
- oy = win->_cury;
- ox = win->_curx;
+ NCURSES_SIZE_T oy = win->_cury;
+ NCURSES_SIZE_T ox = win->_curx;
code = _nc_insert_wch(win, wch);
wins_nwstr(WINDOW *win, const wchar_t *wstr, int n)
{
int code = ERR;
- NCURSES_SIZE_T oy;
- NCURSES_SIZE_T ox;
- const wchar_t *cp;
T((T_CALLED("wins_nwstr(%p,%s,%d)"),
(void *) win, _nc_viswbufn(wstr, n), n));
if (n < 1)
n = (int) wcslen(wstr);
code = OK;
+
if (n > 0) {
+ const wchar_t *cp;
SCREEN *sp = _nc_screen_of(win);
+ NCURSES_SIZE_T oy = win->_cury;
+ NCURSES_SIZE_T ox = win->_curx;
- oy = win->_cury;
- ox = win->_curx;
- for (cp = wstr; *cp && ((cp - wstr) < n); cp++) {
+ for (cp = wstr; ((cp - wstr) < n) && *cp; cp++) {
int len = wcwidth(*cp);
if ((len >= 0 && len != 1) || !is7bits(*cp)) {