.\" @trace
.\" @trace_block
.\" @trace_on
+.\" @trace_custom
.\" @trace_level
.\" @tracing
.\" @traceopt
.BI " const void *" b ", size_t " sz );
.BI "void trace_on(FILE *" fp ", unsigned " l );
+.BI "void trace_custom(void (*" func ")(const char *" buf ,
+.BI " size_t " sz ", void *" v ),
+.BI " void *" v );
.BI "void trace_level(unsigned " l );
.BI "unsigned tracing(void);"
-.BI "unsigned traceopt(trace_opt *" t ", const char *" p ,
+.BI "unsigned traceopt(const trace_opt *" t ", const char *" p ,
.BI " unsigned " f ", unsigned " bad );
.BI T( statements\fR... )
.B tracing
returns the current trace level, or zero if there is no trace
destination set.
+.PP
+For more advanced programs, a custom output function may be provided by
+.B trace_custom
+and passing a function which will write a buffer of data somewhere
+sensible.
.SS "Parsing user trace options"
The function
.B traceopt