NetBSD/gnu/dist/groff/tmac/groff_trace.man

551 lines
13 KiB
Groff
Raw Normal View History

.
.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
groff_trace \- groff macro package trace.tmac
.SH SYNOPSIS
.\" The .SH was moved to this place to make `apropos' happy.
.
.
.\" --------------------------------------------------------------------
.\" Legalize
.\" --------------------------------------------------------------------
.
.ig
groff_trace.7
File position: <groff-source>/tmac/groff_trace.man
Last update: 14 July 2002
This file is part of groff, the GNU roff type-setting system.
Copyright (C) 2002 Free Software Foundation, Inc.
written by Bernd Warken <bwarken@mayn.de>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being this .ig-section and AUTHOR, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
.
.\" --------------------------------------------------------------------
.\" Setup
.\" --------------------------------------------------------------------
.
Import groff-1.19.1. Changes since 1.19: Groff ----- o The argument of the command line option `-I' is now also passed to troff and grops, specifying a directory to search for files on the command line, files named in `so' and `psbb' requests, and files named in \X'ps: file' and \X'ps: import' escapes. o If option `-V' is used more than once, the commands will be both printed on standard error and run. Troff ----- o Two new read-only, string-valued registers `.m' and `.M' return the name of the current drawing and background color, respectively. o New read-only register `.U' which is set to 1 if in safer mode and set to 0 if in unsafe mode. o An input encoding file for latin-5 (a.k.a. ISO 8859-9) has been added. Example use: groff -Tdvi -mlatin5 my_file > my_file.dvi Note that some output devices don't support all glyphs of this encoding. o If the `return' request is called with an argument, it exits twice, namely the current macro and the macro one level higher. This is used to define a wrapper macro for `return' in trace.tmac. o For completeness, two new requests have been added: `dei1' and `ami1'. They are equivalent to `dei' and `ami', respectively, but the macros are executed with compatibility mode off (similar to `de1' and `am1'). o New command line option `-I' to specify a directory for files (both those on the command line and those named in `psbb' requests). This is also handled by the groff wrapper program. o Since version 1.19 you can say `.vs 0'. Older versions emit a warning and convert this to `.vs \n[.V]'. This hasn't been documented properly. Note that `.vs 0' isn't saved in a diversion since it doesn't result in vertical motion. Pic ___ o Dashed and dotted ellipses have been implemented. Tbl --- o New key character `x' to make tbl call a user-defined macro on a table cell. Patch by Heinz-Jürgen Oertel <hj.oertel@surfeu.de>. Grohtml ------- o New option `-j' to emit output splitted into multiple files. Grops ----- o New command line option `-I' to specify a directory to search for files on the command line and files named in \X'ps: import' and \X'ps: file' escapes. This is also handled by the groff wrapper program. o The default value for the `broken' keyword in the DESC file is now 0. Grolj4 ------ o A new man page `lj4_font(5)' documents how fonts are accessed with grolj4. o The built-in fonts for LJ4 and newer PCL 5 devices have been completely revised, mainly to access as much glyphs as possible. The provided metric files should be compatible with recent PCL 5 printers also. Additionally, font description files have been added for the Arial and Times New Roman family, the MS symbol, and Wingdings fonts. Hpftodit -------- o Completely revised to handle HP TrueType metric files also. See the hpftodit manual page for more details. Macro Packages -------------- o www.tmac: New macro `JOBNAME' to split output into multiple files. o In mdoc, multiple calls to `.Lb' are now supported in the LIBRARY section.
2004-07-30 18:44:08 +04:00
.do nr groff_trace_C \n[.C]
.cp 0
.
.mso www.tmac
.
.if n \{\
. mso tty-char.tmac
. ftr CR R
. ftr CI I
. ftr CB B
.\}
.
.ds Ellipsis .\|.\|.\&\"
.
.\" Global static variables for inter-macro communication
.rr @+Example_font
.
.\" --------------------------------------------------------------------
.\" setup for the macro definitions below
.\"
.\" naming: namespace:category_macro.variable_name (experimental)
.
.\" --------------------------------------------------------------------
.\" configuration of prompt for `.Shell_cmd'* macros
.ds trace:Shell_cmd.prompt_text sh#\" prompt for shell commands
.ds trace:Shell_cmd+.prompt_text >\" prompt on continuation lines
.ds trace:Shell_cmd_base.prompt_font I\" font for prompts
.
.\" automatically determine setup from the configuration above
.als @f trace:Shell_cmd_base.prompt_font\"
.als @t trace:Shell_cmd.prompt_text\"
.als @t+ trace:Shell_cmd+.prompt_text\"
.ds trace:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
.ds trace:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
.nr @w \w'\*[trace:Shell_cmd.prompt]'\"
.nr @w+ \w'\*[trace:Shell_cmd+.prompt]'\"
.ft \*[@f]
.\" Full prompt width is maximum of texts plus 1m
.nr trace:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
.ft
.rm @f
.rm @f+
.rm @t
.rm @t+
.rr @w
.rr @w+
.
.\"--------------------------------------------------------------------
.\" Ignore all arguments like a comment, even after a .eo call.
.de c
..
.c --------------------------------------------------------------------
.de BIR
. ie (\\n[.$] < 3) \
. BI \\$@
. el \{\
. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
. shift 2
. Text \\*[@tmp@]\fR\\$*\f[]
. rm @tmp@
. \}
..
.c --------------------------------------------------------------------
.c .Env_var (<env_var_name> [<punct>])
.c
.c Display an environment variable, with optional punctuation.
.c
.de Env_var
. nh
. SM
. Text \f[CB]\\$1\f[]\\$2
. hy
..
.c --------------------------------------------------------------------
.c .Error (<text>...)
.c
.c Print error message to terminal and abort.
.c
.de Error
. tm \\$*
. ab
..
.c --------------------------------------------------------------------
.de Example
. if r@+Example_font \
. Error previous .Example was not terminated by a ./Example
. nr @+Example_font \\n[.f]
. nh
. nf
.c RS \\n[trace:Shell_cmd_base.prompt_width]u
. ft CR
..
.c --------------------------------------------------------------------
.de /Example
. if !r@+Example_font \
. Error no previous call to .Example
. ft \\n[@+Example_font]
.c RE
. fi
. hy
. rr @+Example_font
..
.c --------------------------------------------------------------------
.de Macdef
. if (\\n[.$] <= 0) \
. Error \\$0 needs at least one argument.
. ds @s .\f[B]\\$1\f[]\"
. shift
. if (\\n[.$] > 0) \
. as @s \~\f[I]\\$*\f[]\"
. IP \\*[@s]
. rm @s
..
.c --------------------------------------------------------------------
.de Macdef+
. br
. ns
. Macdef \\$@
..
.c --------------------------------------------------------------------
.c .Shell_cmd (<CR> [<CI>] ...)
.c
.c A shell command line; display args alternating in fonts CR and CI.
.c
.c Examples:
.c .Shell_cmd "groffer --dpi 100 file"
.c result: `sh# groffer --dpi 100 file'
.c with 'sh#' in font I, the rest in CR
.c
.c .Shell_cmd groffer\~--dpi\~100\~file
.c result: the same as above
.c
.c .Shell_cmd "groffer --dpi=" value " file"
.c result: sh# groffer --dpi=value file
.c with `groffer --dpi=' and `file' in CR; `value' in CI
.c
.c .Shell_cmd groffer\~--dpi= value \~file
.c result: the same as the previous example
.c
.de Shell_cmd
. trace:Shell_cmd_base "\*[trace:Shell_cmd.prompt]" \\$@
..
.c --------------------------------------------------------------------
.c .Shell_cmd+ (<CR> [<CI>] ...)
.c
.c A continuation line for .Shell_cmd.
.c
.de Shell_cmd+
. trace:Shell_cmd_base "\*[trace:Shell_cmd+.prompt]" \\$@
..
.c --------------------------------------------------------------------
.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
.c
.c A shell command line; display args alternating in fonts CR and CI.
.c Internal, do not use directly.
.c
.c Globals: read-only register @.Shell_cmd_width
.c
.de trace:Shell_cmd_base
. if (\\n[.$] <= 0) \
. return
. nr @+font \\n[.f]\"
. ds @prompt \\$1\"
. ft CR
. c gap between prompt and command
. nr @+gap \\n[trace:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
. shift
. ds @cf CR\"
. while (\\n[.$] > 0) \{\
. as @res \\f[\\*[@cf]]\\$1\"
. shift
. ie '\\*[@cf]'CR' \
. ds @cf I\"
. el \
. ds @cf CR\"
. \}
. br
. ad l
. nh
. nf
. Text \\*[@res]\"
. fi
. hy
. ad
. br
. ft \\n[@+font]
. rr @+font
. rr @+gap
. rm @cf
. rm @res
..
.c --------------------------------------------------------------------
.c .Text (<text>...)
.c
.c Treat the arguments as text, no matter how they look.
.c
.de Text
. if (\\n[.$] == 0) \
. return
. nop \)\\$*\)
..
.c --------------------------------------------------------------------
.c .Topic ([<indent>])
.c
.c A bulleted paragraph.
.c
.de Topic
. ie (\\n[.$] = 0) \
. .ds @indent 2m\"
. el \
. .ds @indent \\$1\"
. TP \\*[@indent]
. Text \[bu]
. rm @indent
..
.c --------------------------------------------------------------------
.c .TP+ ()
.c
.c Continuation line for .TP header.
.c
.de TP+
. br
. ns
. TP \\$1
..
.c --------------------------------------------------------------------
.de 'char
. ds @tmp@ `\f(CR\\$1\f[]'
. shift
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de option
. ds @tmp@ \f(CB\\$1\f[]
. shift 1
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de argument
. ds @tmp@ \f(CI\\$1\f[]
. shift 1
. Text \\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de request
. ds @tmp@ \f(CB\\$1\f[]
. shift 1
. Text .\\*[@tmp@]\\$*
. rm @tmp@
..
.c --------------------------------------------------------------------
.de escape
. ds @tmp@ \f[CB]\\$1\f[]
. shift 1
. Text \[rs]\\*[@tmp@]\\$*
. rm @tmp@
..
.
.
.\" --------------------------------------------------------------------
.\" SH SYNOPSIS
.\" --------------------------------------------------------------------
.
.B groff -m trace
.RI [ options\*[Ellipsis] ]
.RI [ files\*[Ellipsis] ]
.
.
.P
Elements in brackets denote optional arguments, and the ellipsis means
that there can be any number of arguments of this kind.
.
.
.\" --------------------------------------------------------------------
.SH DESCRIPTION
.\" --------------------------------------------------------------------
.
The
.I trace
macro package of
.BR groff (@MAN1EXT@)
can be a valuable tool for debugging documents written in the roff
formatting language.
.
A call stack trace is protocolled on standard error, that means, a
diagnostic message is emitted on entering and exiting of a macro call.
.
This greatly eases to track down an error in some macro.
.
.
.P
This tracing process is activated by specifying the groff or troff
command line option
.BR "-m\~trace" .
This works also with the
.BR groffer (@MAN1EXT@)
viewer program.
.
A finer control can be obtained by including the macro file within the
document by the groff macro call
.BR ".mso\~trace.tmac" .
Only macros that are defined after this line are traced.
.
.
.P
If some other macro package should be traced as well it must be specified
after
.BR "-m\~trace"
on the command line.
.
.
.P
The macro file
.B trace.tmac
is unusual because it does not contain any macros to be called by a
user.
.
Instead, the existing macro definition and appending facilities are
modified such that they display diagnostic messages.
.
.
.\" --------------------------------------------------------------------
.SH EXAMPLES
.\" --------------------------------------------------------------------
.
.P
In the following examples, a roff fragment is fed into groff via
standard input.
.
As we are only interested in the diagnostic messages (standard error)
on the terminal, the normal formatted output (standard output) is
redirected into the nirvana device
.IR /dev/null .
The resulting diagnostic messages are displayed directly below the
corresponding example.
.
.
.\" --------------------------------------------------------------------
.SS "Command line option"
.
.P
.Shell_cmd "echo '."
.Shell_cmd+ ".de test_macro"
.Shell_cmd+ ".."
.Shell_cmd+ ".test_macro"
.Shell_cmd+ ".test_macro some dummy arguments"
.Shell_cmd+ "' | groff -m trace >/dev/null"
.P
.Example
*** de trace enter: test_macro
*** trace exit: test_macro
*** de trace enter: test_macro "some" "dummy" "arguments"
*** trace exit: test_macro "some" "dummy" "arguments"
./Example
.
.P
The entry and the exit of each macro call is displayed on the terminal
(standard output) \[em] together with the arguments (if any).
.
.
.\" --------------------------------------------------------------------
.SS "Nested macro calls"
.
.P
.Shell_cmd "echo '."
.Shell_cmd+ ".de child"
.Shell_cmd+ ".."
.Shell_cmd+ ".de parent"
.Shell_cmd+ ".child"
.Shell_cmd+ ".."
.Shell_cmd+ ".parent"
.Shell_cmd+ "' | groff -m trace >/dev/null"
.P
.Example
*** de trace enter: parent
*** de trace enter: child
*** trace exit: child
*** trace exit: parent
./Example
.
.P
This shows that macro calls can be nested.
.
This powerful feature can help to tack down quite complex call stacks.
.
.
.\" --------------------------------------------------------------------
.SS "Activating with .mso"
.
.Shell_cmd "echo '."
.Shell_cmd+ ".de before"
.Shell_cmd+ ..
.Shell_cmd+ ".mso trace.tmac"
.Shell_cmd+ ".de after"
.Shell_cmd+ ..
.Shell_cmd+ .before
.Shell_cmd+ .after
.Shell_cmd+ .before
.Shell_cmd+ "' | groff >/dev/null"
.P
.Example
*** de trace enter: after
*** trace exit: after
./Example
.
.P
Here, the tracing is activated within the document, not by a command
line option.
.
As tracing was not active when macro
.I before
was defined, no call of this macro is protocolled; on the other hand,
the macro
.I after
is fully protocolled.
.
.
.\" --------------------------------------------------------------------
.SH FILES
.\" --------------------------------------------------------------------
.
The
.I trace
macros are kept in the file
.B trace.tmac
located in the
.IR "tmac directory" ;
see
.BR groff_tmac (@MAN5EXT@)
for details.
.
.
.\" --------------------------------------------------------------------
.SH ENVIRONMENT
.\" --------------------------------------------------------------------
.
.TP
.Env_var $GROFF_TMAC_PATH
A colon-separated list of additional tmac directories in which to
search for macro files; see
.BR groff_tmac (@MAN5EXT@)
for details.
.
.
.\" --------------------------------------------------------------------
.SH AUTHOR
.\" --------------------------------------------------------------------
.
Copyright (C) 2002 Free Software Foundation, Inc.
.
.P
This document is distributed under the terms of the FDL (GNU Free
Documentation License) version 1.1 or later.
.
You should have received a copy of the FDL on your system, it is also
available on-line at the
.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
.
.P
This document is part of
.IR groff ,
the GNU roff distribution.
.
It was written by
.MTO bwarken@mayn.de "Bernd Warken".
.
.
.\" --------------------------------------------------------------------
.SH "SEE ALSO"
.\" --------------------------------------------------------------------
.
.TP
.BR groff (@MAN1EXT@)
An overview of the groff system.
.
.
.TP
.BR troff (@MAN1EXT@)
For details on option
.BR -m .
.
.
.TP
.BR groffer (@MAN1EXT@)
A viewer program for all kinds of roff documents.
.
.
.TP
.BR groff_tmac (@MAN5EXT@)
A general description of groff macro packages.
.
.
.TP
.BR groff (@MAN7EXT@)
A short reference for the groff formatting language.
.
.
.P
A complete reference for all parts of the groff system is found in the
groff
.BR info (1)
file.
.
Import groff-1.19.1. Changes since 1.19: Groff ----- o The argument of the command line option `-I' is now also passed to troff and grops, specifying a directory to search for files on the command line, files named in `so' and `psbb' requests, and files named in \X'ps: file' and \X'ps: import' escapes. o If option `-V' is used more than once, the commands will be both printed on standard error and run. Troff ----- o Two new read-only, string-valued registers `.m' and `.M' return the name of the current drawing and background color, respectively. o New read-only register `.U' which is set to 1 if in safer mode and set to 0 if in unsafe mode. o An input encoding file for latin-5 (a.k.a. ISO 8859-9) has been added. Example use: groff -Tdvi -mlatin5 my_file > my_file.dvi Note that some output devices don't support all glyphs of this encoding. o If the `return' request is called with an argument, it exits twice, namely the current macro and the macro one level higher. This is used to define a wrapper macro for `return' in trace.tmac. o For completeness, two new requests have been added: `dei1' and `ami1'. They are equivalent to `dei' and `ami', respectively, but the macros are executed with compatibility mode off (similar to `de1' and `am1'). o New command line option `-I' to specify a directory for files (both those on the command line and those named in `psbb' requests). This is also handled by the groff wrapper program. o Since version 1.19 you can say `.vs 0'. Older versions emit a warning and convert this to `.vs \n[.V]'. This hasn't been documented properly. Note that `.vs 0' isn't saved in a diversion since it doesn't result in vertical motion. Pic ___ o Dashed and dotted ellipses have been implemented. Tbl --- o New key character `x' to make tbl call a user-defined macro on a table cell. Patch by Heinz-Jürgen Oertel <hj.oertel@surfeu.de>. Grohtml ------- o New option `-j' to emit output splitted into multiple files. Grops ----- o New command line option `-I' to specify a directory to search for files on the command line and files named in \X'ps: import' and \X'ps: file' escapes. This is also handled by the groff wrapper program. o The default value for the `broken' keyword in the DESC file is now 0. Grolj4 ------ o A new man page `lj4_font(5)' documents how fonts are accessed with grolj4. o The built-in fonts for LJ4 and newer PCL 5 devices have been completely revised, mainly to access as much glyphs as possible. The provided metric files should be compatible with recent PCL 5 printers also. Additionally, font description files have been added for the Arial and Times New Roman family, the MS symbol, and Wingdings fonts. Hpftodit -------- o Completely revised to handle HP TrueType metric files also. See the hpftodit manual page for more details. Macro Packages -------------- o www.tmac: New macro `JOBNAME' to split output into multiple files. o In mdoc, multiple calls to `.Lb' are now supported in the LIBRARY section.
2004-07-30 18:44:08 +04:00
.cp \n[groff_trace_C]
.
.\" Local Variables:
.\" mode: nroff
.\" End: