ncurses 5.7 - patch 20090912
[ncurses.git] / ncurses / widechar / lib_ins_wch.c
index 7bc7ac8c4eb789d8dc76df517633af53138007cb..ae3302c4c33527b8f2f787f856a9456276c9ecd0 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 2002-2003,2005 Free Software Foundation, Inc.              *
+ * Copyright (c) 2002-2005,2009 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.7 2005/09/17 19:25:13 tom Exp $")
+MODULE_ID("$Id: lib_ins_wch.c,v 1.10 2009/09/12 18:07:23 tom Exp $")
 
 /*
  * Insert the given character, updating the current location to simplify
  * inserting a string.
  */
-static int
+NCURSES_EXPORT(int)
 _nc_insert_wch(WINDOW *win, const cchar_t *wch)
 {
     int cells = wcwidth(CharOf(CHDEREF(wch)));
@@ -112,12 +112,14 @@ wins_nwstr(WINDOW *win, const wchar_t *wstr, int n)
            n = wcslen(wstr);
        code = OK;
        if (n > 0) {
+           SCREEN *sp = _nc_screen_of(win);
+
            oy = win->_cury;
            ox = win->_curx;
            for (cp = wstr; *cp && ((cp - wstr) < n); cp++) {
                int len = wcwidth(*cp);
 
-               if (len != 1) {
+               if (len != 1 || !is8bits(*cp)) {
                    cchar_t tmp_cchar;
                    wchar_t tmp_wchar = *cp;
                    memset(&tmp_cchar, 0, sizeof(tmp_cchar));
@@ -129,7 +131,7 @@ wins_nwstr(WINDOW *win, const wchar_t *wstr, int n)
                    code = _nc_insert_wch(win, &tmp_cchar);
                } else {
                    /* tabs, other ASCII stuff */
-                   code = _nc_insert_ch(win, (chtype) (*cp));
+                   code = _nc_insert_ch(sp, win, (chtype) (*cp));
                }
                if (code != OK)
                    break;