/****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-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 *
#include <termcap.h> /* ospeed */
#include <tic.h>
-MODULE_ID("$Id: lib_tputs.c,v 1.79 2009/10/24 21:56:58 tom Exp $")
+MODULE_ID("$Id: lib_tputs.c,v 1.82 2011/10/22 16:34:50 tom Exp $")
NCURSES_EXPORT_VAR(char) PC = 0; /* used by termcap library */
NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed = 0; /* used by termcap library */
#endif
#if NCURSES_SP_FUNCS
-#define my_outch SP_PARM->_outch
+#define SetOutCh(func) if (SP_PARM) SP_PARM->_outch = func; else _nc_prescreen._outch = func
+#define GetOutCh() (SP_PARM ? SP_PARM->_outch : _nc_prescreen._outch)
#else
-static NCURSES_SP_OUTC my_outch = NCURSES_SP_NAME(_nc_outch);
+#define SetOutCh(func) static_outch = func
+#define GetOutCh() static_outch
+static NCURSES_SP_OUTC static_outch = NCURSES_SP_NAME(_nc_outch);
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
napms(ms);
} else {
+ NCURSES_SP_OUTC my_outch = GetOutCh();
register int nullcount;
nullcount = (ms * _nc_baudrate(ospeed)) / (BAUDBYTE * 1000);
* POSIX says write() is safe in a signal handler, but the
* buffered I/O is not.
*/
- if (write(fileno(NC_OUTPUT(SP_PARM)), &tmp, 1) == -1)
+ if (write(fileno(NC_OUTPUT(SP_PARM)), &tmp, (size_t) 1) == -1)
rc = ERR;
} else {
if (putc(ch, NC_OUTPUT(SP_PARM)) == EOF)
int affcnt,
NCURSES_SP_OUTC outc)
{
+ NCURSES_SP_OUTC my_outch = GetOutCh();
bool always_delay;
bool normal_delay;
int number;
if (outc == NCURSES_SP_NAME(_nc_outch))
(void) strcpy(addrbuf, "_nc_outch");
else
- (void) sprintf(addrbuf, "%p", (void *) outc);
+ (void) sprintf(addrbuf, "%p", outc);
if (_nc_tputs_trace) {
_tracef("tputs(%s = %s, %d, %s) called", _nc_tputs_trace,
_nc_visbuf(string), affcnt, addrbuf);
}
#endif /* BSD_TPUTS */
- my_outch = outc; /* redirect delay_output() */
+ SetOutCh(outc); /* redirect delay_output() */
while (*string) {
if (*string != '$')
(*outc) (NCURSES_SP_ARGx *string);
delay_output(trailpad / 10);
#endif /* BSD_TPUTS */
- my_outch = NCURSES_SP_NAME(_nc_outch);
+ SetOutCh(my_outch);
return OK;
}