aboutsummaryrefslogtreecommitdiff
path: root/ncurses/widechar
diff options
context:
space:
mode:
Diffstat (limited to 'ncurses/widechar')
-rw-r--r--ncurses/widechar/lib_box_set.c6
-rw-r--r--ncurses/widechar/lib_cchar.c24
-rw-r--r--ncurses/widechar/lib_erasewchar.c8
-rw-r--r--ncurses/widechar/lib_get_wch.c9
-rw-r--r--ncurses/widechar/lib_get_wstr.c8
-rw-r--r--ncurses/widechar/lib_ins_wch.c6
-rw-r--r--ncurses/widechar/lib_inwstr.c11
-rw-r--r--ncurses/widechar/lib_slk_wset.c30
-rw-r--r--ncurses/widechar/lib_unget_wch.c6
-rw-r--r--ncurses/widechar/lib_vid_attr.c85
-rw-r--r--ncurses/widechar/lib_wacs.c36
-rw-r--r--ncurses/widechar/lib_wunctrl.c17
-rw-r--r--ncurses/widechar/widechars.c152
13 files changed, 296 insertions, 102 deletions
diff --git a/ncurses/widechar/lib_box_set.c b/ncurses/widechar/lib_box_set.c
index 585c94963b0f..f9e701fa14cf 100644
--- a/ncurses/widechar/lib_box_set.c
+++ b/ncurses/widechar/lib_box_set.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2003,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2009,2011 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 <curses.priv.h>
-MODULE_ID("$Id: lib_box_set.c,v 1.5 2009/10/24 22:36:56 tom Exp $")
+MODULE_ID("$Id: lib_box_set.c,v 1.6 2011/06/25 19:02:07 Vassili.Courzakis Exp $")
NCURSES_EXPORT(int)
wborder_set(WINDOW *win,
@@ -52,7 +52,7 @@ wborder_set(WINDOW *win,
NCURSES_SIZE_T endx, endy;
NCURSES_CH_T wls, wrs, wts, wbs, wtl, wtr, wbl, wbr;
- T((T_CALLED("wborder(%p,%s,%s,%s,%s,%s,%s,%s,%s)"),
+ T((T_CALLED("wborder_set(%p,%s,%s,%s,%s,%s,%s,%s,%s)"),
(void *) win,
_tracech_t2(1, ls),
_tracech_t2(2, rs),
diff --git a/ncurses/widechar/lib_cchar.c b/ncurses/widechar/lib_cchar.c
index c61c79529db7..654bebb46d36 100644
--- a/ncurses/widechar/lib_cchar.c
+++ b/ncurses/widechar/lib_cchar.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2001-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2001-2012,2014 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 *
@@ -35,7 +35,7 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_cchar.c,v 1.20 2010/12/25 23:46:26 tom Exp $")
+MODULE_ID("$Id: lib_cchar.c,v 1.27 2014/02/01 22:10:42 tom Exp $")
/*
* The SuSv2 description leaves some room for interpretation. We'll assume wch
@@ -47,7 +47,7 @@ NCURSES_EXPORT(int)
setcchar(cchar_t *wcval,
const wchar_t *wch,
const attr_t attrs,
- short color_pair,
+ NCURSES_PAIRS_T color_pair,
const void *opts)
{
unsigned i;
@@ -56,11 +56,11 @@ setcchar(cchar_t *wcval,
TR(TRACE_CCALLS, (T_CALLED("setcchar(%p,%s,%lu,%d,%p)"),
(void *) wcval, _nc_viswbuf(wch),
- (unsigned long) attrs, color_pair, opts));
+ (unsigned long) attrs, (int) color_pair, opts));
- len = (unsigned) wcslen(wch);
if (opts != NULL
- || (len > 1 && wcwidth(wch[0]) < 0)) {
+ || wch == NULL
+ || ((len = (unsigned) wcslen(wch)) > 1 && wcwidth(wch[0]) < 0)) {
code = ERR;
} else {
if (len > CCHARW_MAX)
@@ -80,7 +80,7 @@ setcchar(cchar_t *wcval,
memset(wcval, 0, sizeof(*wcval));
if (len != 0) {
- SetAttr(*wcval, attrs | (attr_t) ColorPair(color_pair));
+ SetAttr(*wcval, attrs);
SetPair(CHDEREF(wcval), color_pair);
memcpy(&wcval->chars, wch, len * sizeof(wchar_t));
TR(TRACE_CCALLS, ("copy %d wchars, first is %s", len,
@@ -96,7 +96,7 @@ NCURSES_EXPORT(int)
getcchar(const cchar_t *wcval,
wchar_t *wch,
attr_t *attrs,
- short *color_pair,
+ NCURSES_PAIRS_T *color_pair,
void *opts)
{
wchar_t *wp;
@@ -110,8 +110,8 @@ getcchar(const cchar_t *wcval,
(void *) color_pair,
opts));
- if (opts == NULL) {
- len = ((wp = wmemchr(wcval->chars, L'\0', CCHARW_MAX))
+ if (opts == NULL && wcval != NULL) {
+ len = ((wp = wmemchr(wcval->chars, L'\0', (size_t) CCHARW_MAX))
? (int) (wp - wcval->chars)
: CCHARW_MAX);
@@ -125,8 +125,8 @@ getcchar(const cchar_t *wcval,
code = ERR;
} else if (len >= 0) {
*attrs = AttrOf(*wcval) & A_ATTRIBUTES;
- *color_pair = (short) GetPair(*wcval);
- wmemcpy(wch, wcval->chars, (unsigned) len);
+ *color_pair = (NCURSES_PAIRS_T) GetPair(*wcval);
+ wmemcpy(wch, wcval->chars, (size_t) len);
wch[len] = L'\0';
code = OK;
}
diff --git a/ncurses/widechar/lib_erasewchar.c b/ncurses/widechar/lib_erasewchar.c
index a4ee93ffa428..ddce27a53ecc 100644
--- a/ncurses/widechar/lib_erasewchar.c
+++ b/ncurses/widechar/lib_erasewchar.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2010,2014 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 *
@@ -32,7 +32,7 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_erasewchar.c,v 1.2 2010/07/24 11:35:12 tom Exp $")
+MODULE_ID("$Id: lib_erasewchar.c,v 1.3 2014/02/23 01:21:08 tom Exp $")
/*
* erasewchar()
@@ -49,7 +49,7 @@ erasewchar(wchar_t *wch)
T((T_CALLED("erasewchar()")));
if ((value = erasechar()) != ERR) {
- *wch = value;
+ *wch = (wchar_t) value;
result = OK;
}
returnCode(result);
@@ -70,7 +70,7 @@ killwchar(wchar_t *wch)
T((T_CALLED("killwchar()")));
if ((value = killchar()) != ERR) {
- *wch = value;
+ *wch = (wchar_t) value;
result = OK;
}
returnCode(result);
diff --git a/ncurses/widechar/lib_get_wch.c b/ncurses/widechar/lib_get_wch.c
index 32033df2ff9b..71d560367d73 100644
--- a/ncurses/widechar/lib_get_wch.c
+++ b/ncurses/widechar/lib_get_wch.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2010,2011 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 *
@@ -40,7 +40,7 @@
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_get_wch.c,v 1.22 2010/08/28 21:00:35 tom Exp $")
+MODULE_ID("$Id: lib_get_wch.c,v 1.23 2011/05/28 23:00:29 tom Exp $")
NCURSES_EXPORT(int)
wget_wch(WINDOW *win, wint_t *result)
@@ -106,7 +106,10 @@ wget_wch(WINDOW *win, wint_t *result)
} else {
code = ERR;
}
- *result = (wint_t) value;
+
+ if (result != 0)
+ *result = (wint_t) value;
+
_nc_unlock_global(curses);
T(("result %#o", value));
returnCode(code);
diff --git a/ncurses/widechar/lib_get_wstr.c b/ncurses/widechar/lib_get_wstr.c
index 0b450211b2c3..27cdae0c1fd8 100644
--- a/ncurses/widechar/lib_get_wstr.c
+++ b/ncurses/widechar/lib_get_wstr.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2009,2011 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 <curses.priv.h>
-MODULE_ID("$Id: lib_get_wstr.c,v 1.12 2009/10/24 22:38:11 tom Exp $")
+MODULE_ID("$Id: lib_get_wstr.c,v 1.13 2011/10/22 16:31:35 tom Exp $")
static int
wadd_wint(WINDOW *win, wint_t *src)
@@ -49,7 +49,7 @@ wadd_wint(WINDOW *win, wint_t *src)
wch[0] = (wchar_t) (*src);
wch[1] = 0;
- setcchar(&tmp, wch, A_NORMAL, 0, NULL);
+ setcchar(&tmp, wch, A_NORMAL, (short) 0, NULL);
return wadd_wch(win, &tmp);
}
@@ -58,7 +58,7 @@ wadd_wint(WINDOW *win, wint_t *src)
* or other character, and handles reverse wraparound.
*/
static wint_t *
-WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, bool echoed)
+WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, int echoed)
{
if (last > first) {
*--last = '\0';
diff --git a/ncurses/widechar/lib_ins_wch.c b/ncurses/widechar/lib_ins_wch.c
index 1eee8a3ec016..2aa71a506639 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-2010,2011 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 <curses.priv.h>
-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.17 2011/10/22 16:34:50 tom Exp $")
/*
* Insert the given character, updating the current location to simplify
@@ -132,7 +132,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 {
diff --git a/ncurses/widechar/lib_inwstr.c b/ncurses/widechar/lib_inwstr.c
index 4cf7182ae061..a4f5b8ea2040 100644
--- a/ncurses/widechar/lib_inwstr.c
+++ b/ncurses/widechar/lib_inwstr.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2004,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2009,2011 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 <curses.priv.h>
-MODULE_ID("$Id: lib_inwstr.c,v 1.5 2009/10/24 22:37:29 tom Exp $")
+MODULE_ID("$Id: lib_inwstr.c,v 1.6 2011/05/28 22:49:49 tom Exp $")
NCURSES_EXPORT(int)
winnwstr(WINDOW *win, wchar_t *wstr, int n)
@@ -93,8 +93,13 @@ NCURSES_EXPORT(int)
winwstr(WINDOW *win, wchar_t *wstr)
{
int result = OK;
+
T((T_CALLED("winwstr(%p,%p)"), (void *) win, (void *) wstr));
- if (winnwstr(win, wstr, CCHARW_MAX * (win->_maxx - win->_curx + 1)) == ERR)
+ if (win == 0) {
+ result = ERR;
+ } else if (winnwstr(win, wstr,
+ CCHARW_MAX * (win->_maxx - win->_curx + 1)) == ERR) {
result = ERR;
+ }
returnCode(result);
}
diff --git a/ncurses/widechar/lib_slk_wset.c b/ncurses/widechar/lib_slk_wset.c
index 646b5d9e2fa8..89275567557b 100644
--- a/ncurses/widechar/lib_slk_wset.c
+++ b/ncurses/widechar/lib_slk_wset.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2003-2004,2005 Free Software Foundation, Inc. *
+ * Copyright (c) 2003-2002,2011 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 *
@@ -40,7 +40,7 @@
#include <wctype.h>
#endif
-MODULE_ID("$Id: lib_slk_wset.c,v 1.11 2005/01/16 01:03:53 tom Exp $")
+MODULE_ID("$Id: lib_slk_wset.c,v 1.13 2011/10/22 15:52:20 tom Exp $")
NCURSES_EXPORT(int)
slk_wset(int i, const wchar_t *astr, int format)
@@ -53,19 +53,21 @@ slk_wset(int i, const wchar_t *astr, int format)
T((T_CALLED("slk_wset(%d, %s, %d)"), i, _nc_viswbuf(astr), format));
- init_mb(state);
- str = astr;
- if ((arglen = wcsrtombs(NULL, &str, 0, &state)) != (size_t) -1) {
- if ((mystr = (char *) _nc_doalloc(0, arglen + 1)) != 0) {
- str = astr;
- if (wcsrtombs(mystr, &str, arglen, &state) != (size_t) -1) {
- /* glibc documentation claims that the terminating L'\0'
- * is written, but it is not...
- */
- mystr[arglen] = 0;
- result = slk_set(i, mystr, format);
+ if (astr != 0) {
+ init_mb(state);
+ str = astr;
+ if ((arglen = wcsrtombs(NULL, &str, (size_t) 0, &state)) != (size_t) -1) {
+ if ((mystr = (char *) _nc_doalloc(0, arglen + 1)) != 0) {
+ str = astr;
+ if (wcsrtombs(mystr, &str, arglen, &state) != (size_t) -1) {
+ /* glibc documentation claims that the terminating L'\0'
+ * is written, but it is not...
+ */
+ mystr[arglen] = 0;
+ result = slk_set(i, mystr, format);
+ }
+ free(mystr);
}
- free(mystr);
}
}
returnCode(result);
diff --git a/ncurses/widechar/lib_unget_wch.c b/ncurses/widechar/lib_unget_wch.c
index 7a626a9eee84..d5ae608e36ed 100644
--- a/ncurses/widechar/lib_unget_wch.c
+++ b/ncurses/widechar/lib_unget_wch.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2010,2011 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 <curses.priv.h>
-MODULE_ID("$Id: lib_unget_wch.c,v 1.14 2010/07/24 11:35:21 tom Exp $")
+MODULE_ID("$Id: lib_unget_wch.c,v 1.15 2011/10/22 16:34:50 tom Exp $")
/*
* Wrapper for wcrtomb() which obtains the length needed for the given
@@ -55,7 +55,7 @@ _nc_wcrtomb(char *target, wchar_t source, mbstate_t * state)
const wchar_t *tempp = temp;
temp[0] = source;
temp[1] = 0;
- result = (int) wcsrtombs(NULL, &tempp, 0, state);
+ result = (int) wcsrtombs(NULL, &tempp, (size_t) 0, state);
} else {
result = (int) wcrtomb(target, source, state);
}
diff --git a/ncurses/widechar/lib_vid_attr.c b/ncurses/widechar/lib_vid_attr.c
index e4cf093a1f6b..0be2b195c3d2 100644
--- a/ncurses/widechar/lib_vid_attr.c
+++ b/ncurses/widechar/lib_vid_attr.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2013,2014 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 *
@@ -36,14 +36,16 @@
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_vid_attr.c,v 1.14 2010/12/19 01:44:24 tom Exp $")
+MODULE_ID("$Id: lib_vid_attr.c,v 1.22 2014/02/01 22:09:27 tom Exp $")
-#define doPut(mode) TPUTS_TRACE(#mode); NCURSES_SP_NAME(tputs)(NCURSES_SP_ARGx mode, 1, outc)
+#define doPut(mode) \
+ TPUTS_TRACE(#mode); \
+ NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc)
-#define TurnOn(mask,mode) \
+#define TurnOn(mask, mode) \
if ((turn_on & mask) && mode) { doPut(mode); }
-#define TurnOff(mask,mode) \
+#define TurnOff(mask, mode) \
if ((turn_off & mask) && mode) { doPut(mode); turn_off &= ~mask; }
/* if there is no current screen, assume we *can* do color */
@@ -66,7 +68,7 @@ MODULE_ID("$Id: lib_vid_attr.c,v 1.14 2010/12/19 01:44:24 tom Exp $")
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
attr_t newmode,
- short pair,
+ NCURSES_PAIRS_T pair,
void *opts GCC_UNUSED,
NCURSES_SP_OUTC outc)
{
@@ -120,7 +122,7 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
* A_ALTCHARSET (256) down 2 to line up. We use the NCURSES_BITS
* macro so this will work properly for the wide-character layout.
*/
- unsigned value = no_color_video;
+ unsigned value = (unsigned) no_color_video;
attr_t mask = NCURSES_BITS((value & 63)
| ((value & 192) << 1)
| ((value & 256) >> 2), 8);
@@ -161,6 +163,11 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
+#if USE_ITALIC
+ if (!SP_PARM || SP_PARM->_use_ritm) {
+ TurnOff(A_ITALIC, exit_italics_mode);
+ }
+#endif
}
previous_attr &= ALL_BUT_COLOR;
previous_pair = 0;
@@ -185,6 +192,15 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
previous_attr &= ALL_BUT_COLOR;
previous_pair = 0;
}
+#if USE_ITALIC
+ if (!SP_PARM || SP_PARM->_use_ritm) {
+ if (turn_on & A_ITALIC) {
+ TurnOn(A_ITALIC, enter_italics_mode);
+ } else if (turn_off & A_ITALIC) {
+ TurnOff(A_ITALIC, exit_italics_mode);
+ }
+ }
+#endif
SetColorsIf((pair != 0) || fix_pair0, previous_attr, previous_pair);
} else {
@@ -199,7 +215,11 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
-
+#if USE_ITALIC
+ if (!SP_PARM || SP_PARM->_use_ritm) {
+ TurnOff(A_ITALIC, exit_italics_mode);
+ }
+#endif
if (turn_off && exit_attribute_mode) {
doPut(exit_attribute_mode);
turn_on |= (newmode & ALL_BUT_COLOR);
@@ -219,6 +239,9 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
TurnOn(A_PROTECT, enter_protected_mode);
TurnOn(A_INVIS, enter_secure_mode);
TurnOn(A_UNDERLINE, enter_underline_mode);
+#if USE_ITALIC
+ TurnOn(A_ITALIC, enter_italics_mode);
+#endif
#if USE_WIDEC_SUPPORT
TurnOn(A_HORIZONTAL, enter_horizontal_hl_mode);
TurnOn(A_LEFT, enter_left_hl_mode);
@@ -244,7 +267,7 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
returnCode(OK);
#else
- T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), pair));
+ T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), (int) pair));
set_color(newmode, pair);
returnCode(NCURSES_SP_NAME(vidputs) (NCURSES_SP_ARGx newmode, outc));
#endif
@@ -253,7 +276,7 @@ NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
vid_puts(attr_t newmode,
- short pair,
+ NCURSES_PAIRS_T pair,
void *opts GCC_UNUSED,
NCURSES_OUTC outc)
{
@@ -270,20 +293,20 @@ vid_puts(attr_t newmode,
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vid_attr) (NCURSES_SP_DCLx
attr_t newmode,
- short pair,
+ NCURSES_PAIRS_T pair,
void *opts)
{
- T((T_CALLED("vid_attr(%s,%d)"), _traceattr(newmode), pair));
+ T((T_CALLED("vid_attr(%s,%d)"), _traceattr(newmode), (int) pair));
returnCode(NCURSES_SP_NAME(vid_puts) (NCURSES_SP_ARGx
newmode,
pair,
opts,
- NCURSES_SP_NAME(_nc_outch)));
+ NCURSES_SP_NAME(_nc_putchar)));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
-vid_attr(attr_t newmode, short pair, void *opts)
+vid_attr(attr_t newmode, NCURSES_PAIRS_T pair, void *opts)
{
return NCURSES_SP_NAME(vid_attr) (CURRENT_SCREEN, newmode, pair, opts);
}
@@ -296,24 +319,26 @@ vid_attr(attr_t newmode, short pair, void *opts)
NCURSES_EXPORT(attr_t)
NCURSES_SP_NAME(term_attrs) (NCURSES_SP_DCL0)
{
- attr_t attrs;
+ attr_t attrs = 0;
T((T_CALLED("term_attrs()")));
- attrs = SP_PARM ? NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG) : 0;
-
- /* these are only supported for wide-character mode */
- if (enter_horizontal_hl_mode)
- attrs |= WA_HORIZONTAL;
- if (enter_left_hl_mode)
- attrs |= WA_LEFT;
- if (enter_low_hl_mode)
- attrs |= WA_LOW;
- if (enter_right_hl_mode)
- attrs |= WA_RIGHT;
- if (enter_top_hl_mode)
- attrs |= WA_TOP;
- if (enter_vertical_hl_mode)
- attrs |= WA_VERTICAL;
+ if (SP_PARM) {
+ attrs = NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG);
+
+ /* these are only supported for wide-character mode */
+ if (enter_horizontal_hl_mode)
+ attrs |= WA_HORIZONTAL;
+ if (enter_left_hl_mode)
+ attrs |= WA_LEFT;
+ if (enter_low_hl_mode)
+ attrs |= WA_LOW;
+ if (enter_right_hl_mode)
+ attrs |= WA_RIGHT;
+ if (enter_top_hl_mode)
+ attrs |= WA_TOP;
+ if (enter_vertical_hl_mode)
+ attrs |= WA_VERTICAL;
+ }
returnAttr(attrs);
}
diff --git a/ncurses/widechar/lib_wacs.c b/ncurses/widechar/lib_wacs.c
index 5a16e457e091..dc3af21e11b2 100644
--- a/ncurses/widechar/lib_wacs.c
+++ b/ncurses/widechar/lib_wacs.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2002-2013,2014 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 *
@@ -32,7 +32,7 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_wacs.c,v 1.10 2010/12/19 01:43:19 tom Exp $")
+MODULE_ID("$Id: lib_wacs.c,v 1.14 2014/02/23 01:21:08 tom Exp $")
NCURSES_EXPORT_VAR(cchar_t) * _nc_wacs = 0;
@@ -119,22 +119,24 @@ _nc_init_wacs(void)
T(("initializing WIDE-ACS map (Unicode is%s active)",
active ? "" : " not"));
- _nc_wacs = typeCalloc(cchar_t, ACS_LEN);
- for (n = 0; n < SIZEOF(table); ++n) {
- int wide = wcwidth(table[n].value[active]);
+ if ((_nc_wacs = typeCalloc(cchar_t, ACS_LEN)) != 0) {
- m = table[n].map;
- if (active && (wide == 1)) {
- SetChar(_nc_wacs[m], table[n].value[active], A_NORMAL);
- } else if (acs_map[m] & A_ALTCHARSET) {
- SetChar(_nc_wacs[m], m, A_ALTCHARSET);
- } else {
- SetChar(_nc_wacs[m], table[n].value[0], A_NORMAL);
- }
+ for (n = 0; n < SIZEOF(table); ++n) {
+ int wide = wcwidth((wchar_t) table[n].value[active]);
+
+ m = table[n].map;
+ if (active && (wide == 1)) {
+ SetChar(_nc_wacs[m], table[n].value[1], A_NORMAL);
+ } else if (acs_map[m] & A_ALTCHARSET) {
+ SetChar(_nc_wacs[m], m, A_ALTCHARSET);
+ } else {
+ SetChar(_nc_wacs[m], table[n].value[0], A_NORMAL);
+ }
- T(("#%d, SetChar(%c, %#04x) = %s",
- n, m,
- table[n].value[active],
- _tracecchar_t(&_nc_wacs[m])));
+ T(("#%d, SetChar(%c, %#04x) = %s",
+ n, m,
+ table[n].value[active],
+ _tracecchar_t(&_nc_wacs[m])));
+ }
}
}
diff --git a/ncurses/widechar/lib_wunctrl.c b/ncurses/widechar/lib_wunctrl.c
index 50958e44c7bb..45d495203fc6 100644
--- a/ncurses/widechar/lib_wunctrl.c
+++ b/ncurses/widechar/lib_wunctrl.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2001-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2001-2011,2012 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 *
@@ -35,14 +35,17 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_wunctrl.c,v 1.14 2010/12/19 01:42:15 tom Exp $")
+MODULE_ID("$Id: lib_wunctrl.c,v 1.16 2012/12/15 20:53:42 tom Exp $")
NCURSES_EXPORT(wchar_t *)
NCURSES_SP_NAME(wunctrl) (NCURSES_SP_DCLx cchar_t *wc)
{
static wchar_t str[CCHARW_MAX + 1], *wsp;
+ wchar_t *result;
- if (Charable(*wc)) {
+ if (wc == 0) {
+ result = 0;
+ } else if (SP_PARM != 0 && Charable(*wc)) {
const char *p =
NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx
(unsigned) _nc_to_char((wint_t)CharOf(*wc)));
@@ -51,9 +54,11 @@ NCURSES_SP_NAME(wunctrl) (NCURSES_SP_DCLx cchar_t *wc)
*wsp++ = (wchar_t) _nc_to_widechar(*p);
}
*wsp = 0;
- return str;
- } else
- return wc->chars;
+ result = str;
+ } else {
+ result = wc->chars;
+ }
+ return result;
}
#if NCURSES_SP_FUNCS
diff --git a/ncurses/widechar/widechars.c b/ncurses/widechar/widechars.c
new file mode 100644
index 000000000000..6951e2863fa0
--- /dev/null
+++ b/ncurses/widechar/widechars.c
@@ -0,0 +1,152 @@
+/****************************************************************************
+ * Copyright (c) 2012,2013 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 *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+#if USE_WIDEC_SUPPORT
+
+MODULE_ID("$Id: widechars.c,v 1.5 2013/03/02 18:55:51 tom Exp $")
+
+#if defined(__MINGW32__)
+/*
+ * MinGW has wide-character functions, but they do not work correctly.
+ */
+
+int
+_nc_mbtowc(wchar_t *pwc, const char *s, size_t n)
+{
+ int result;
+ int count;
+ int try;
+
+ if (s != 0 && n != 0) {
+ /*
+ * MultiByteToWideChar() can decide to return more than one
+ * wide-character. We want only one. Ignore any trailing null, both
+ * in the initial count and in the conversion.
+ */
+ count = 0;
+ for (try = 1; try <= (int) n; ++try) {
+ count = MultiByteToWideChar(CP_UTF8,
+ MB_ERR_INVALID_CHARS,
+ s,
+ try,
+ pwc,
+ 0);
+ TR(TRACE_BITS, ("...try %d:%d", try, count));
+ if (count > 0) {
+ break;
+ }
+ }
+ if (count < 1 || count > 2) {
+ result = -1;
+ } else {
+ wchar_t actual[2];
+ memset(&actual, 0, sizeof(actual));
+ count = MultiByteToWideChar(CP_UTF8,
+ MB_ERR_INVALID_CHARS,
+ s,
+ try,
+ actual,
+ 2);
+ TR(TRACE_BITS, ("\twin32 ->%#x, %#x", actual[0], actual[1]));
+ *pwc = actual[0];
+ if (actual[1] != 0)
+ result = -1;
+ else
+ result = try;
+ }
+ } else {
+ result = 0;
+ }
+
+ return result;
+}
+
+int
+_nc_mblen(const char *s, size_t n)
+{
+ int result = -1;
+ int count;
+ wchar_t temp;
+
+ if (s != 0 && n != 0) {
+ count = _nc_mbtowc(&temp, s, n);
+ if (count == 1) {
+ int check = WideCharToMultiByte(CP_UTF8,
+ 0,
+ &temp,
+ 1,
+ NULL,
+ 0, /* compute length only */
+ NULL,
+ NULL);
+ TR(TRACE_BITS, ("\tcheck ->%d\n", check));
+ if (check > 0 && (size_t) check <= n) {
+ result = check;
+ }
+ }
+ } else {
+ result = 0;
+ }
+
+ return result;
+}
+
+int __MINGW_NOTHROW
+_nc_wctomb(char *s, wchar_t wc)
+{
+ int result;
+ int check;
+
+ check = WideCharToMultiByte(CP_UTF8,
+ 0,
+ &wc,
+ 1,
+ NULL,
+ 0, /* compute length only */
+ NULL,
+ NULL);
+ if (check > 0) {
+ result = WideCharToMultiByte(CP_UTF8,
+ 0,
+ &wc,
+ 1,
+ s,
+ check + 1,
+ NULL,
+ NULL);
+ } else {
+ result = -1;
+ }
+ return result;
+}
+
+#endif /* __MINGW32__ */
+
+#endif /* USE_WIDEC_SUPPORT */