X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fwidechar%2Flib_ins_wch.c;h=103dfdc4523268d10d93341251652ab691729961;hp=1eee8a3ec016b01981783d7cdcc976f9e52cf17c;hb=76a479337308b4b5e749fa8c38b7b7f482998c5b;hpb=f79b52fddd95c7a6f1ead29ef9c39eb8cdf60795 diff --git a/ncurses/widechar/lib_ins_wch.c b/ncurses/widechar/lib_ins_wch.c index 1eee8a3e..103dfdc4 100644 --- a/ncurses/widechar/lib_ins_wch.c +++ b/ncurses/widechar/lib_ins_wch.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 2002-2011,2016 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 * @@ -39,7 +39,7 @@ #include -MODULE_ID("$Id: lib_ins_wch.c,v 1.16 2010/12/19 01:34:04 tom Exp $") +MODULE_ID("$Id: lib_ins_wch.c,v 1.21 2016/05/28 22:32:11 tom Exp $") /* * Insert the given character, updating the current location to simplify @@ -49,7 +49,6 @@ NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *win, const cchar_t *wch) { int cells = wcwidth(CharOf(CHDEREF(wch))); - int cell; int code = OK; if (cells < 0) { @@ -59,6 +58,7 @@ _nc_insert_wch(WINDOW *win, const cchar_t *wch) 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]); @@ -73,7 +73,7 @@ _nc_insert_wch(WINDOW *win, const cchar_t *wch) SetWidecExt(temp1[cell], cell); } - win->_curx++; + win->_curx = (NCURSES_SIZE_T) (win->_curx + cells); } } return code; @@ -82,15 +82,13 @@ _nc_insert_wch(WINDOW *win, const cchar_t *wch) 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); @@ -105,9 +103,6 @@ NCURSES_EXPORT(int) 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)); @@ -117,11 +112,13 @@ wins_nwstr(WINDOW *win, const wchar_t *wstr, int 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++) { int len = wcwidth(*cp); @@ -132,7 +129,7 @@ wins_nwstr(WINDOW *win, const wchar_t *wstr, int n) (void) setcchar(&tmp_cchar, &tmp_wchar, WA_NORMAL, - 0, + (short) 0, (void *) 0); code = _nc_insert_wch(win, &tmp_cchar); } else {