summaryrefslogtreecommitdiffstats
path: root/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c')
-rw-r--r--contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c b/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c
index 41ba18c..e9f0646 100644
--- a/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c
+++ b/contrib/ncurses/ncurses/widechar/lib_in_wchnstr.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002,2004 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2004-2007 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 *
@@ -27,7 +27,7 @@
****************************************************************************/
/****************************************************************************
- * Author: Thomas Dickey 2002,2004 *
+ * Author: Thomas Dickey *
****************************************************************************/
/*
@@ -39,27 +39,35 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_in_wchnstr.c,v 1.3 2004/05/16 00:12:30 tom Exp $")
+MODULE_ID("$Id: lib_in_wchnstr.c,v 1.7 2007/02/11 01:00:00 tom Exp $")
NCURSES_EXPORT(int)
-win_wchnstr(WINDOW *win, cchar_t * wchstr, int n)
+win_wchnstr(WINDOW *win, cchar_t *wchstr, int n)
{
int code = OK;
- TR(TRACE_CALLS, (T_CALLED("win_wchnstr(%p,%p,%d)"), win, wchstr, n));
+ T((T_CALLED("win_wchnstr(%p,%p,%d)"), win, wchstr, n));
if (win != 0
&& wchstr != 0) {
+ NCURSES_CH_T *src;
int row, col;
- int j;
+ int j, k, limit;
getyx(win, row, col);
+ limit = getmaxx(win) - col;
+ src = &(win->_line[row].text[col]);
if (n < 0) {
- n = getmaxx(win) + 1 - getcurx(win);
+ n = limit;
+ } else if (n > limit) {
+ n = limit;
}
- for (j = 0; j < n; ++j) {
- wchstr[j] = win->_line[row].text[col + j];
+ for (j = k = 0; j < n; ++j) {
+ if (j == 0 || !WidecExt(src[j]) || isWidecBase(src[j])) {
+ wchstr[k++] = src[j];
+ }
}
+ memset(&(wchstr[k]), 0, sizeof(*wchstr));
T(("result = %s", _nc_viscbuf(wchstr, n)));
} else {
code = ERR;
OpenPOWER on IntegriCloud