.\"***************************************************************************
.\" Copyright (c) 2000-2010,2015 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.                                                           *
.\"***************************************************************************
.\"
.\" $Id: curs_trace.3x,v 1.13 2015/07/20 22:54:44 tom Exp $
.de bP
.IP \(bu 4
..
.TH curs_trace 3X ""
.na
.hy 0
.SH NAME
\fB_tracef\fR,
\fB_tracedump\fR,
\fB_traceattr\fR,
\fB_traceattr2\fR,
\fB_nc_tracebits\fR,
\fB_tracecchar_t\fR,
\fB_tracecchar_t2\fR,
\fB_tracechar\fR,
\fB_tracechtype\fR,
\fB_tracechtype2\fR,
\fB_tracemouse\fR,
\fBtrace\fR \- \fBcurses\fR debugging routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBvoid _tracef(const char *\fP\fIformat\fP\fB, ...);\fR
.br
\fBvoid _tracedump(const char *\fP\fIlabel\fP\fB, WINDOW *\fP\fIwin\fP\fB);\fR
.br
\fBchar *_traceattr(attr_t \fP\fIattr\fP\fB);\fR
.br
\fBchar *_traceattr2(int \fP\fIbuffer\fP\fB, chtype \fP\fIch\fP\fB);\fR
.br
\fBchar *_nc_tracebits(void);\fR
.br
\fBchar * _tracecchar_t(const cchar_t *\fP\fIstring\fP\fB);\fR
.br
\fBchar * _tracecchar_t2(int \fP\fIbuffer\fP\fB, const cchar_t *\fP\fIstring\fP\fB);\fR
.br
\fBchar *_tracechar(int \fP\fIch\fP\fB);\fR
.br
\fBchar *_tracechtype(chtype \fP\fIch\fP\fB);\fR
.br
\fBchar *_tracechtype2(int \fP\fIbuffer\fP\fB, chtype \fP\fIch\fP\fB);\fR
.br
\fBchar *_tracemouse(const MEVENT *\fP\fIevent\fP\fB);\fR
.br
\fBvoid trace(const unsigned int \fP\fIparam\fP\fB);\fR
.SH DESCRIPTION
The \fBtrace\fR routines are used for debugging the ncurses libraries,
as well as applications which use the ncurses libraries.
These functions are normally available only with the debugging library
e.g., \fIlibncurses_g.a\fR, but may be compiled into any model (shared, static,
profile) by defining the symbol \fBTRACE\fR.
Additionally, some functions are only available with the wide-character
configuration of the libraries.
.PP
The principal parts of this interface are
.bP
\fBtrace\fR, which selectively enables different tracing features, and
.bP
\fB_tracef\fR, which writes formatted data to the \fItrace\fR file.
.PP
Calling \fBtrace\fR with a nonzero parameter opens the file \fBtrace\fR
in the current directory for output.
The parameter is formed by OR'ing
values from the list of \fBTRACE_\fP\fIxxx\fR definitions in \fB<curses.h>\fR.
These include:
.TP 5
.B TRACE_DISABLE
turn off tracing.
.TP 5
.B TRACE_TIMES
trace user and system times of updates.
.TP 5
.B TRACE_TPUTS
trace tputs calls.
.TP 5
.B TRACE_UPDATE
trace update actions, old & new screens.
.TP 5
.B TRACE_MOVE
trace cursor movement and scrolling.
.TP 5
.B TRACE_CHARPUT
trace all character outputs.
.TP 5
.B TRACE_ORDINARY
trace all update actions.
The old and new screen contents are written to the trace file
for each refresh.
.TP 5
.B TRACE_CALLS
trace all curses calls.
The parameters for each call are traced, as well as return values.
.TP 5
.B TRACE_VIRTPUT
trace virtual character puts, i.e., calls to \fBaddch\fR.
.TP 5
.B TRACE_IEVENT
trace low-level input processing, including timeouts.
.TP 5
.B TRACE_BITS
trace state of TTY control bits.
.TP 5
.B TRACE_ICALLS
trace internal/nested calls.
.TP 5
.B TRACE_CCALLS
trace per-character calls.
.TP 5
.B TRACE_DATABASE
trace read/write of terminfo/termcap data.
.TP 5
.B TRACE_ATTRS
trace changes to video attributes and colors.
.TP 5
.B TRACE_MAXIMUM
maximum trace level, enables all of the separate trace features.
.PP
Some tracing features are enabled whenever the \fBtrace\fR parameter
is nonzero.
Some features overlap.
The specific names are used as a guideline.
.PP
The other functions either return a pointer to a string-area
(allocated by the corresponding function),
or return no value (such as \fB_tracedump\fP, which implements the
screen dump for \fBTRACE_UPDATE\fP).
The caller should not free these
strings, since the allocation is reused on successive calls.
To work around the problem of a single string-area per function,
some use a buffer-number parameter, telling the library to allocate
additional string-areas.
.PP
These functions check the \fBNCURSES_TRACE\fP environment variable,
to set the tracing feature as if \fBtrace\fP was called:
.RS
.PP
.na
filter,
initscr,
new_prescr,
newterm,
nofilter,
restartterm,
ripoffline,
setupterm,
slk_init,
tgetent,
use_env,
use_extended_names,
use_tioctl
.ad
.RE
.SH RETURN VALUE
Routines which return a value are designed to be used as parameters
to the \fB_tracef\fR routine.
.SH PORTABILITY
These functions are not part of the XSI interface.
Some other curses implementations are known to
have similar, undocumented features,
but they are not compatible with ncurses.
.SH SEE ALSO
\fBcurses\fR(3X).
