/****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-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 *
#include <ctype.h>
-MODULE_ID("$Id: tty_update.c,v 1.257 2009/06/06 20:26:16 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.273 2012/12/22 21:38:17 tom Exp $")
/*
* This define controls the line-breakout optimization. Every once in a
GoTo(NCURSES_SP_DCLx int const row, int const col)
{
TR(TRACE_MOVE, ("GoTo(%p, %d, %d) from (%d, %d)",
- SP_PARM, row, col, SP_PARM->_cursrow, SP_PARM->_curscol));
+ (void *) SP_PARM, row, col, SP_PARM->_cursrow, SP_PARM->_curscol));
position_check(SP_PARM, SP_PARM->_cursrow, SP_PARM->_curscol, "GoTo");
- NCURSES_SP_NAME(mvcur) (NCURSES_SP_ARGx SP_PARM->_cursrow,
- SP_PARM->_curscol, row, col);
+ TINFO_MVCUR(NCURSES_SP_ARGx
+ SP_PARM->_cursrow,
+ SP_PARM->_curscol,
+ row, col);
position_check(SP_PARM, SP_PARM->_cursrow, SP_PARM->_curscol, "GoTo2");
}
{
int chlen = 1;
NCURSES_CH_T my_ch;
+#if USE_WIDEC_SUPPORT
PUTC_DATA;
+#endif
NCURSES_CH_T tilde;
NCURSES_CH_T attr = CHDEREF(ch);
&& SP_PARM->_screen_acs_map[CharOf(my_ch)]) {
RemAttr(attr, A_ALTCHARSET);
my_ch = _nc_wacs[CharOf(my_ch)];
+ } else if (SP_PARM->_screen_unicode
+ && !SP_PARM->_screen_acs_map[CharOf(my_ch)]
+ && _nc_wacs[CharOf(my_ch)].chars[0]) {
+ RemAttr(attr, A_ALTCHARSET);
+ my_ch = _nc_wacs[CharOf(my_ch)];
}
#endif
/*
int j = CharOfD(ch);
chtype temp = UChar(SP_PARM->_acs_map[j]);
- if (!(SP_PARM->_screen_acs_map[j])) {
+ if (temp != 0) {
+ SetChar(my_ch, temp, AttrOf(attr));
+ } else {
+ my_ch = CHDEREF(ch);
RemAttr(attr, A_ALTCHARSET);
- if (temp == 0)
- temp = ' ';
}
- if (temp != 0)
- SetChar(my_ch, temp, AttrOf(attr));
}
ch = CHREF(my_ch);
}
}
UpdateAttrs(SP_PARM, attr);
+ PUTC(CHDEREF(ch));
#if !USE_WIDEC_SUPPORT
- /* FIXME - we do this special case for signal handling, should see how to
- * make it work for wide characters.
- */
- if (SP_PARM->_outch != 0) {
- SP_PARM->_outch(NCURSES_SP_ARGx UChar(ch));
- } else
+ COUNT_OUTCHARS(1);
#endif
- {
- PUTC(CHDEREF(ch), SP_PARM->_ofp); /* macro's fastest... */
- COUNT_OUTCHARS(1);
- }
SP_PARM->_curscol += chlen;
if (char_padding) {
TPUTS_TRACE("char_padding");
struct pollfd fds[1];
fds[0].fd = SP_PARM->_checkfd;
fds[0].events = POLLIN;
- if (poll(fds, 1, 0) > 0) {
+ if (poll(fds, (size_t) 1, 0) > 0) {
have_pending = TRUE;
}
#elif defined(__BEOS__)
return FALSE;
if ((pair = GetPair(CHDEREF(ch))) != 0) {
short fg, bg;
- NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx pair, &fg, &bg);
+ NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx
+ (short) pair,
+ &fg, &bg);
if (fg != C_MASK || bg != C_MASK)
return FALSE;
}
int i, j, same;
TR(TRACE_CHARPUT, ("PutRange(%p, %p, %p, %d, %d, %d)",
- SP_PARM, otext, ntext, row, first, last));
+ (void *) SP_PARM,
+ (const void *) otext,
+ (const void *) ntext,
+ row, first, last));
if (otext != ntext
&& (last - first + 1) > SP_PARM->_inline_cost) {
if_USE_SCROLL_HINTS(win->_line[row].oldindex = row)
NCURSES_EXPORT(int)
-NCURSES_SP_NAME(doupdate) (NCURSES_SP_DCL0)
+TINFO_DOUPDATE(NCURSES_SP_DCL0)
{
int i;
int nonempty;
struct tms before, after;
#endif /* USE_TRACE_TIMES */
- T((T_CALLED("_nc_tinfo:doupdate(%p)"), SP_PARM));
+ T((T_CALLED("_nc_tinfo:doupdate(%p)"), (void *) SP_PARM));
+
+ if (SP_PARM == 0)
+ returnCode(ERR);
#if !USE_REENTRANT
/*
returnCode(OK);
}
-#if NCURSES_SP_FUNCS
+#if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER)
NCURSES_EXPORT(int)
doupdate(void)
{
- return NCURSES_SP_NAME(doupdate) (CURRENT_SCREEN);
+ return TINFO_DOUPDATE(CURRENT_SCREEN);
}
#endif
*/
static void
-ClrToEOL(NCURSES_SP_DCLx NCURSES_CH_T blank, bool needclear)
+ClrToEOL(NCURSES_SP_DCLx NCURSES_CH_T blank, int needclear)
{
int j;
- if (SP_PARM != 0 && CurScreen(SP_PARM) != 0
+ if (CurScreen(SP_PARM) != 0
&& SP_PARM->_cursrow >= 0) {
for (j = SP_PARM->_curscol; j < screen_columns(SP_PARM); j++) {
if (j >= 0) {
}
}
}
- } else {
- needclear = TRUE;
}
if (needclear) {
{
int row, col;
- if (0 == SP_PARM)
- return;
-
row = SP_PARM->_cursrow;
col = SP_PARM->_curscol;
** TransformLine(lineno)
**
** Transform the given line in curscr to the one in newscr, using
-** Insert/Delete Character if _nc_idcok && has_ic().
+** Insert/Delete Character if idcok && has_ic().
**
** firstChar = position of first different character in line
** oLastChar = position of last different character in old line
int n;
bool attrchanged = FALSE;
- TR(TRACE_UPDATE, (T_CALLED("TransformLine(%p, %d)"), SP_PARM, lineno));
+ TR(TRACE_UPDATE, (T_CALLED("TransformLine(%p, %d)"), (void *) SP_PARM, lineno));
/* copy new hash value to old one */
if (SP_PARM->oldhash && SP_PARM->newhash)
nLastChar);
memcpy(oldLine + firstChar,
newLine + firstChar,
- (nLastChar - firstChar + 1) * sizeof(NCURSES_CH_T));
+ (unsigned) (nLastChar - firstChar + 1) * sizeof(NCURSES_CH_T));
}
TR(TRACE_UPDATE, (T_RETURN("")));
return;
if (screen_columns(SP_PARM) > firstChar)
memcpy(oldLine + firstChar,
newLine + firstChar,
- (screen_columns(SP_PARM) - firstChar) * sizeof(NCURSES_CH_T));
+ (unsigned) (screen_columns(SP_PARM) - firstChar) * sizeof(NCURSES_CH_T));
TR(TRACE_UPDATE, (T_RETURN("")));
return;
}
if (SP_PARM->_coloron
&& !SP_PARM->_default_color) {
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx
- GET_SCREEN_PAIR(SP_PARM),
+ (short) GET_SCREEN_PAIR(SP_PARM),
0,
FALSE,
NCURSES_SP_NAME(_nc_outch));
static void
InsStr(NCURSES_SP_DCLx NCURSES_CH_T * line, int count)
{
- TR(TRACE_UPDATE, ("InsStr(%p, %p,%d) called", SP_PARM, line, count));
+ TR(TRACE_UPDATE, ("InsStr(%p, %p,%d) called",
+ (void *) SP_PARM,
+ (void *) line, count));
/* Prefer parm_ich as it has the smallest cost - no need to shift
* the whole line on each character. */
int n;
TR(TRACE_UPDATE, ("DelChar(%p, %d) called, position = (%ld,%ld)",
- SP_PARM, count,
+ (void *) SP_PARM, count,
(long) NewScreen(SP_PARM)->_cury,
(long) NewScreen(SP_PARM)->_curx));
bool cursor_saved = FALSE;
int res;
- TR(TRACE_MOVE, ("_nc_scrolln(%p, %d, %d, %d, %d)", SP_PARM, n, top, bot, maxy));
+ TR(TRACE_MOVE, ("_nc_scrolln(%p, %d, %d, %d, %d)",
+ (void *) SP_PARM, n, top, bot, maxy));
if (!IsValidScreen(SP_PARM))
return (ERR);
if (res == ERR)
return (ERR);
- _nc_scroll_window(CurScreen(SP_PARM), n, top, bot, blank);
+ _nc_scroll_window(CurScreen(SP_PARM), n,
+ (NCURSES_SIZE_T) top,
+ (NCURSES_SIZE_T) bot,
+ blank);
/* shift hash values too - they can be reused */
NCURSES_SP_NAME(_nc_scroll_oldhash) (NCURSES_SP_ARGx n, top, bot);
SP_PARM->_color_defs = -(SP_PARM->_color_defs);
for (n = 0; n < SP_PARM->_color_defs; ++n) {
if (SP_PARM->_color_table[n].init) {
- NCURSES_SP_NAME(init_color) (NCURSES_SP_ARGx n,
+ NCURSES_SP_NAME(init_color) (NCURSES_SP_ARGx
+ (short) n,
SP_PARM->_color_table[n].r,
SP_PARM->_color_table[n].g,
SP_PARM->_color_table[n].b);
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_screen_wrap) (NCURSES_SP_DCL0)
{
- if (SP_PARM == 0)
- return;
+ if (SP_PARM != 0) {
- UpdateAttrs(SP_PARM, normal);
+ UpdateAttrs(SP_PARM, normal);
#if NCURSES_EXT_FUNCS
- if (SP_PARM->_coloron
- && !SP_PARM->_default_color) {
- static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
- SP_PARM->_default_color = TRUE;
- NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx
- -1,
- 0,
- FALSE,
- NCURSES_SP_NAME(_nc_outch));
- SP_PARM->_default_color = FALSE;
-
- NCURSES_SP_NAME(mvcur) (NCURSES_SP_ARGx
- SP_PARM->_cursrow,
- SP_PARM->_curscol,
- screen_lines(SP_PARM) - 1,
- 0);
-
- ClrToEOL(NCURSES_SP_ARGx blank, TRUE);
- }
+ if (SP_PARM->_coloron
+ && !SP_PARM->_default_color) {
+ static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
+ SP_PARM->_default_color = TRUE;
+ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx
+ -1,
+ 0,
+ FALSE,
+ NCURSES_SP_NAME(_nc_outch));
+ SP_PARM->_default_color = FALSE;
+
+ TINFO_MVCUR(NCURSES_SP_ARGx
+ SP_PARM->_cursrow,
+ SP_PARM->_curscol,
+ screen_lines(SP_PARM) - 1,
+ 0);
+
+ ClrToEOL(NCURSES_SP_ARGx blank, TRUE);
+ }
#endif
- if (SP_PARM->_color_defs) {
- NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
+ if (SP_PARM->_color_defs) {
+ NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
+ }
}
}