Server IP : 85.214.239.14 / Your IP : 13.59.68.161 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/self/root/usr/share/groff/1.22.4/tmac/ |
Upload File : |
.\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in .\" the documentation and/or other materials provided with the .\" distribution. .\" 3. [Deleted. See .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change] .\" 4. Neither the name of the University nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A .\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR .\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT .\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF .\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND .\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)doc 8.1 (Berkeley) 06/08/93 .\" .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed .\" to be installed as mdoc/doc-* rather than tmac.doc-* (the filename .\" 'tmac.doc-common' would be too long); when using groff, the doc-* .\" files are loaded using the 'mso' request. .\" .\" Modified by .\" .\" Werner LEMBERG <wl@gnu.org> and .\" Ruslan Ermilov <ru@freebsd.org> .\" .\" to make it more readable: using long names and many groff features, .\" updating and extending documentation, etc. .\" .\" This is a generated file, created by 'tmac/strip.sed' in groff's .\" source distribution from a file having '-u' appended to its name. .if !\n(.g \ .ab This version of mdoc can be run with GNU troff only! .do if d Dd .nx .cp 0 .if (\n[.x]\n[.y] < 118) \ .ab You need GNU troff version 1.18 or higher to run this version of mdoc! .ie t \ .mso mdoc/doc-ditroff .el \ .mso mdoc/doc-nroff .mso mdoc/doc-common .mso mdoc/doc-syms .eo .ds doc-macro-name .als doc-arg0 doc-macro-name .nr doc-arg-limit 0 .nr doc-num-args 0 .nr doc-arg-ptr 0 .ds doc-arg1 .nr doc-type1 0 .ds doc-space1 .de doc-parse-args .if !\n[doc-arg-limit] \ .doc-set-spacing-1 .nr doc-have-space 0 .if !\n[.$] \ .return .nr doc-arg-limit +1 .ie "\$1"|" \ .ds doc-arg\n[doc-arg-limit] \f[R]|\f[] .el \{ .ie "\$1"..." \ .ds doc-arg\n[doc-arg-limit] \|.\|.\|. .el \ .ds doc-arg\n[doc-arg-limit] "\$1 .\} .doc-get-arg-type* \n[doc-arg-limit] .nr doc-type\n[doc-arg-limit] \n[doc-arg-type] .doc-set-spacing-\n[doc-arg-type] .ie (\n[.$] == 1) \ .nr doc-arg-ptr 0 .el \{\ .shift .doc-parse-args \$@ .\} .nh .. .de doc-parse-arg-vector .if !\n[doc-arg-limit] \ .doc-set-spacing-1 .nr doc-arg-limit +1 .ie "\*[doc-arg\n[doc-arg-limit]]"|" \ .ds doc-arg\n[doc-arg-limit] \f[R]|\f[] .el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \ .ds doc-arg\n[doc-arg-limit] \|.\|.\|. .\} .doc-get-arg-type* \n[doc-arg-limit] .nr doc-type\n[doc-arg-limit] \n[doc-arg-type] .doc-set-spacing-\n[doc-arg-type] .ie (\n[doc-num-args] == 1) \{\ .nr doc-arg-ptr 0 .nr doc-num-args 0 .\} .el \{\ .nr doc-num-args -1 .doc-parse-arg-vector .\} .nh .. .de doc-parse-space-vector .nr doc-arg-limit +1 .doc-set-spacing-\n[doc-type\n[doc-arg-limit]] .ie (\n[doc-num-args] == 1) \ .nr doc-num-args 0 .el \{\ .nr doc-num-args -1 .doc-parse-space-vector .\} .. .de doc-remaining-args .nr doc-arg-ptr +1 .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .ie (\n[doc-num-args] == 1) \{\ .nr doc-arg-ptr 0 .nr doc-num-args 0 .\} .el \{\ .nop \)\*[doc-space]\c .nr doc-num-args -1 .doc-remaining-args .\} .. .de doc-append-arg .nr doc-arg-limit +1 .ds doc-arg\n[doc-arg-limit] "\$1 .nr doc-type\n[doc-arg-limit] \$2 .doc-set-spacing-\$2 .. .de doc-print-and-reset .if \n[doc-space-mode] \ .nop \) .doc-reset-args .. .de doc-reset-args .nr doc-arg-limit 0 .nr doc-arg-ptr 0 .nr doc-have-slot 0 .hy \n[doc-hyphen-flags] .. .ec .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .eo .de Fl .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fl-font]\c .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Fl .doc-parse-args \$@ .if !\n[.$] \ .nop \|\-\|\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \|\-\f[]\s[0]\c .doc-print-and-reset .\} .el \{\ .ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\ .nop \|\-\f[]\s[0]\c .\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 3) \ .nop \|\-\|\c .nr doc-reg-Fl 1 .doc-flag-recursion .\}\} .. .de doc-flag-recursion .nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]] .ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]] .ie (\n[doc-reg-dfr1] == 1) \{\ .nop \f[]\s[0]\c .\*[doc-str-dfr] .\} .el \{\ .nr doc-reg-dfr \n[doc-arg-ptr] .ie (\n[doc-reg-dfr1] == 2) \{\ .ie "\*[doc-str-dfr]"\*[Ba]" \{\ .if \n[doc-reg-Fl] \ .nop \|\-\*[doc-space]\c .nop \)\*[Ba]\c .\} .el \{\ .ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\ .if \n[doc-reg-Fl] \ .nop \|\-\*[doc-space]\c .nop \f[R]|\f[]\c .\} .el \{\ .ie "\*[doc-str-dfr]"-" \ .nop \|\-\^\-\|\c .el \ .nop \|\%\-\*[doc-str-dfr]\&\c .\}\}\} .el \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-str-dfr]\f[]\s[0]\c .\} .ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\ .if (\n[doc-reg-dfr1] == 4) \ .nop \|\-\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .doc-print-and-reset .\} .el \{\ .nr doc-arg-ptr +1 .ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\ .ie (\n[doc-type\n[doc-reg-dfr]] == 4) \ .nop \|\-\c .el \ .nop \)\*[doc-space\n[doc-reg-dfr]]\c .\} .el \ .nop \)\*[doc-space\n[doc-reg-dfr]]\c .shift .nr doc-reg-Fl 0 .doc-flag-recursion \$@ .\}\} .. .de doc-print-recursive .nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]] .ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]] .ie (\n[doc-reg-dpr1] == 1) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .\*[doc-str-dpr] .\} .el \{\ .nr doc-reg-dpr \n[doc-arg-ptr] .ie (\n[doc-reg-dpr1] == 2) \ .nop \%\*[doc-str-dpr]\&\c .el \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-str-dpr]\f[]\s[0]\c .\} .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .doc-print-and-reset .\} .el \{\ .nop \)\*[doc-space\n[doc-reg-dpr]]\c .doc-print-recursive .\}\} .. .de doc-print-prefixes .while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if !(\n[doc-type\n[doc-arg-ptr]] == 4) \ .break .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c .nr doc-arg-ptr +1 .\} .. .de doc-generic-macro .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name \$0 .doc-parse-args \$@ .\} .el \ .tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\ .tmc mdoc warning: Using a macro as first argument .tm1 " cancels effect of .\$0 (#\n[.c]) .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-\$0-font]\c .doc-print-recursive .\} .el \{\ .tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c]) .doc-reset-args .\} .. .ds doc-str-Ar-default "file\ .\|.\|. .de Ar .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ar-font]\c .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Ar .doc-parse-args \$@ .if !\n[.$] \ .nop \)\*[doc-str-Ar-default]\&\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c .doc-print-and-reset .\} .el \{\ .if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default] .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\} .doc-print-recursive .\} .. .als Ad doc-generic-macro .ds doc-Ad-usage address .nr doc-indent-synopsis 0 .nr doc-indent-synopsis-active 0 .de Cd .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Cd .doc-parse-args \$@ .\} .el \ .tm Usage: .Cd configuration_file_declaration ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-in-synopsis-section] \{\ .ie "\*[doc-macro-name]"Cd" \{\ .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis \n[doc-display-indent]u .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .nop \*[doc-Nm-font]\c .doc-print-recursive .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .\} .el \{\ .nop \*[doc-Nm-font]\c .doc-print-recursive .\}\} .el \{\ .nop \*[doc-Nm-font]\c .doc-print-recursive .\}\} .el \{\ .tm Usage: .Cd configuration_file_declaration ... (#\n[.c]) .doc-reset-args .\} .. .als Cm doc-generic-macro .ds doc-Cm-usage interactive_command_modifier .als Dv doc-generic-macro .ds doc-Dv-usage defined_variable .als doc-Dv-font doc-Er-font .als Em doc-generic-macro .ds doc-Em-usage text .als Er doc-generic-macro .ds doc-Er-usage text .als Ev doc-generic-macro .ds doc-Ev-usage text .nr doc-have-decl 0 .nr doc-have-var 0 .de doc-do-func-decl .if \n[doc-in-synopsis-section] \{\ .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-func] \{\ .ie \n[doc-have-decl] \ .br .el \ .doc-paragraph .\} .nr doc-have-decl 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .. .de Fd .ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\ .doc-do-func-decl .nop \*[doc-Fd-font]\$* .br .ft \n[doc-curr-font] .ps \n[doc-curr-size]u .\} .el \{\ .tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c]) .doc-reset-args .\} .. .de In .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name In .doc-parse-args \$@ .\} .el \ .tm Usage: .In include_file ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-in-synopsis-section] \{\ .ie "\*[doc-macro-name]"In" \{\ .doc-do-func-decl .nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]> .ft \n[doc-curr-font] .ps \n[doc-curr-size]u .br .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .el \{\ .ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]] .as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]> .doc-print-recursive .\}\} .el \{\ .ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]] .as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]> .doc-print-recursive .\}\} .el \{\ .tm Usage: .In include_file ... (#\n[.c]) .doc-reset-args .\} .. .als Fr doc-generic-macro .ds doc-Fr-usage function_return_value .als doc-Fr-font doc-Ar-font .als Ic doc-generic-macro .ds doc-Ic-usage interactive_command .als Li doc-generic-macro .ds doc-Li-usage argument .als Ms doc-generic-macro .ds doc-Ms-usage math_symbol .als doc-Ms-font doc-Sy-font .ds doc-command-name .de Nm .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Nm .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .ie "\*[doc-command-name]"" \ .tm Usage: .Nm name ... (#\n[.c]) .el \ .doc-parse-args \*[doc-command-name] .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .ie "\*[doc-command-name]"" \{\ .tm Usage: .Nm name ... (#\n[.c]) .doc-reset-args .\} .el \{\ .nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c .doc-print-and-reset .\}\} .el \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .ie "\*[doc-command-name]"" \ .tm Usage: .Nm name ... (#\n[.c]) .el \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0] .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\}\} .el \{\ .if \n[doc-in-synopsis-section] \{\ .if "\*[doc-macro-name]"Nm" \{\ .br .if !\n[doc-indent-synopsis] \{\ .doc-get-width "\*[doc-arg\n[doc-arg-ptr]]" .nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u) .\} .if !\n[doc-indent-synopsis-active] \{\ .in +\n[doc-indent-synopsis]u .nr doc-indent-synopsis-active 1 .\} .ti -\n[doc-indent-synopsis]u .\}\} .if "\*[doc-command-name]"" \ .ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]] .nop \*[doc-Nm-font]\c .\} .doc-print-recursive .\} .. .de Pa .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Pa .doc-parse-args \$@ .if !\n[.$] \ .nop \*[doc-Pa-font]~\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Pa-font]\c .if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] ~ .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\} .doc-print-recursive .\} .el \{\ .nop \*[doc-Pa-font]~\f[]\s[0]\c .doc-print-and-reset .\} .. .als Sy doc-generic-macro .ds doc-Sy-usage symbolic_text .als Me doc-generic-macro .ds doc-Me-usage menu_entry .de Tn .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Tn .doc-parse-args \$@ .\} .el \ .tm Usage: .Tn trade_name ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \)\*[doc-Tn-font-size]\c .ie !\n[doc-is-reference] \{\ .nop \)\*[doc-Tn-font-shape]\c .doc-print-recursive .\} .el \ .doc-do-references .\} .el \{\ .tm Usage: .Tn trade_name ... (#\n[.c]) .doc-reset-args .\} .. .als Va doc-generic-macro .ds doc-Va-usage variable_name .als No doc-generic-macro .ds doc-No-usage normal_text .ds doc-quote-left .ds doc-quote-right .de Op .if !\n[doc-arg-limit] \ .ds doc-macro-name Op .ds doc-quote-left "\*[doc-left-bracket] .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-string \$@ .. .de Aq .if !\n[doc-arg-limit] \ .ds doc-macro-name Aq .ie "\*[doc-macro-name]"An" \{\ .ds doc-quote-left < .ds doc-quote-right > .\} .el \{\ .ds doc-quote-left \[la] .ds doc-quote-right \[ra] .\} .doc-enclose-string \$@ .. .de Bq .if !\n[doc-arg-limit] \ .ds doc-macro-name Bq .ds doc-quote-left "\*[doc-left-bracket] .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-string \$@ .. .de Brq .if !\n[doc-arg-limit] \ .ds doc-macro-name Brq .ds doc-quote-left { .ds doc-quote-right } .doc-enclose-string \$@ .. .de Dq .if !\n[doc-arg-limit] \ .ds doc-macro-name Dq .ds doc-quote-left "\*[Lq] .ds doc-quote-right "\*[Rq] .doc-enclose-string \$@ .. .de Eq .if !\n[doc-arg-limit] \ .ds doc-macro-name Eq .ds doc-quote-left "\$1 .ds doc-quote-right "\$2 .shift 2 .doc-enclose-string \$@ .. .de Pq .if !\n[doc-arg-limit] \ .ds doc-macro-name Pq .ds doc-quote-left "\*[doc-left-parenthesis] .ds doc-quote-right "\*[doc-right-parenthesis] .doc-enclose-string \$@ .. .de Qq .if !\n[doc-arg-limit] \ .ds doc-macro-name Qq .ds doc-quote-left "\*[q] .ds doc-quote-right "\*[q] .doc-enclose-string \$@ .. .de Sq .if !\n[doc-arg-limit] \ .ds doc-macro-name Sq .ds doc-quote-left "\*[doc-left-singlequote] .ds doc-quote-right "\*[doc-right-singlequote] .doc-enclose-string \$@ .. .de Es .if !\n[doc-arg-limit] \{\ .ie (\n[.$] > 2) \{\ .ds doc-macro-name Es .doc-parse-args \$@ .\} .el \{\ .ds doc-quote-left "\$1 .ds doc-quote-right "\$2 .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .el \ .doc-print-and-reset .. .nr doc-have-slot 0 .de doc-enclose-string .if \n[doc-in-synopsis-section] \ .doc-set-hard-space .if !\n[doc-arg-limit] \{\ .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .nop \)\*[doc-quote-left]\*[doc-quote-right] .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nr doc-arg-ptr +1 .doc-print-prefixes .nop \)\*[doc-quote-left]\)\c .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \)\*[doc-quote-right]\)\c .doc-print-and-reset .\} .el \{\ .ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\ .nr doc-reg-des (\n[doc-arg-limit] - 1) .while (\n[doc-type\n[doc-reg-des]] == 3) \ .nr doc-reg-des -1 .nr doc-reg-des +1 .ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]] .\} .el \{\ .nr doc-reg-des \n[doc-arg-limit] .while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\ .if !\A\*[doc-arg\n[doc-reg-des]] \ .break .if !d doc-after-\*[doc-arg\n[doc-reg-des]] \ .break .nr doc-reg-des -1 .\} .ie (\n[doc-reg-des] == \n[doc-arg-limit]) \ .doc-append-arg "\)\*[doc-quote-right]\)" 3 .el \{\ .ie \n[doc-have-slot] \ .ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]] .el \{\ .nr doc-reg-des +1 .nr doc-reg-des1 \n[doc-arg-limit] .nr doc-reg-des2 (\n[doc-arg-limit] + 1) .while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\ .rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2] .rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2] .rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2] .nr doc-reg-des1 -1 .nr doc-reg-des2 -1 .\} .nr doc-arg-limit +1 .ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\) .nr doc-type\n[doc-reg-des] 3 .nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1) .nr doc-arg-limit (\n[doc-reg-des] - 1) .doc-parse-space-vector .nr doc-have-slot 1 .\}\}\} .doc-do-\n[doc-type\n[doc-arg-ptr]] .\} .if \n[doc-in-synopsis-section] \ .doc-set-soft-space .. .als En doc-enclose-string .de Ao .if !\n[doc-arg-limit] \ .ds doc-macro-name Ao .ie "\*[doc-macro-name]"An" \ .ds doc-quote-left < .el \ .ds doc-quote-left \[la] .doc-enclose-open \$@ .. .de Ac .if !\n[doc-arg-limit] \ .ds doc-macro-name Ac .ie "\*[doc-macro-name]"An" \ .ds doc-quote-right > .el \ .ds doc-quote-right \[ra] .doc-enclose-close \$@ .. .de Bo .if !\n[doc-arg-limit] \ .ds doc-macro-name Bo .ds doc-quote-left "\*[doc-left-bracket] .doc-enclose-open \$@ .. .de Bc .if !\n[doc-arg-limit] \ .ds doc-macro-name Bc .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-close \$@ .. .de Bro .if !\n[doc-arg-limit] \ .ds doc-macro-name Bo .ds doc-quote-left { .doc-enclose-open \$@ .. .de Brc .if !\n[doc-arg-limit] \ .ds doc-macro-name Bc .ds doc-quote-right } .doc-enclose-close \$@ .. .de Do .if !\n[doc-arg-limit] \ .ds doc-macro-name Do .ds doc-quote-left "\*[Lq] .doc-enclose-open \$@ .. .de Dc .if !\n[doc-arg-limit] \ .ds doc-macro-name Dc .ds doc-quote-right "\*[Rq] .doc-enclose-close \$@ .. .de Eo .if !\n[doc-arg-limit] \ .ds doc-macro-name Eo .ds doc-quote-left "\$1 .shift .doc-enclose-open \$@ .. .de Ec .if !\n[doc-arg-limit] \ .ds doc-macro-name Ec .ds doc-quote-right "\$1 .shift .doc-enclose-close \$@ .. .de Oo .if !\n[doc-arg-limit] \ .ds doc-macro-name Oo .ds doc-quote-left [ .doc-enclose-open \$@ .. .de Oc .if !\n[doc-arg-limit] \ .ds doc-macro-name Oc .ds doc-quote-right ] .doc-enclose-close \$@ .. .de Po .if !\n[doc-arg-limit] \ .ds doc-macro-name Po .ds doc-quote-left "\*[doc-left-parenthesis] .doc-enclose-open \$@ .. .de Pc .if !\n[doc-arg-limit] \ .ds doc-macro-name Pc .ds doc-quote-right "\*[doc-right-parenthesis] .doc-enclose-close \$@ .. .de Qo .if !\n[doc-arg-limit] \ .ds doc-macro-name Qo .ds doc-quote-left "\*[q] .doc-enclose-open \$@ .. .de Qc .if !\n[doc-arg-limit] \ .ds doc-macro-name Qc .ds doc-quote-right "\*[q] .doc-enclose-close \$@ .. .de So .if !\n[doc-arg-limit] \ .ds doc-macro-name So .ds doc-quote-left "\*[doc-left-singlequote] .doc-enclose-open \$@ .. .de Sc .if !\n[doc-arg-limit] \ .ds doc-macro-name Sc .ds doc-quote-right "\*[doc-right-singlequote] .doc-enclose-close \$@ .. .de Xo .if !\n[doc-arg-limit] \ .ds doc-macro-name Xo .ds doc-quote-left .doc-enclose-open \$@ .. .de Xc .if !\n[doc-arg-limit] \ .ds doc-macro-name Xc .ds doc-quote-right .doc-enclose-close \$@ .. .nr doc-nesting-level 0 .nr doc-in-list 0 .de doc-enclose-open .if !\n[doc-arg-limit] \ .doc-parse-args \$@ .nr doc-arg-ptr +1 .doc-print-prefixes .nr doc-arg-ptr -1 .nop \)\*[doc-quote-left]\)\c .box doc-enclosure-box\n[doc-nesting-level] .ev doc-enclosure-env\n[doc-nesting-level] .evc 0 .in 0 .nf .nop \&\c .nr doc-nesting-level +1 .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .de doc-enclose-close .nr doc-nesting-level -1 .br .ev .box .chop doc-enclosure-box\n[doc-nesting-level] .unformat doc-enclosure-box\n[doc-nesting-level] .nh .nop \*[doc-enclosure-box\n[doc-nesting-level]]\c .nop \)\*[doc-quote-right]\)\c .if !\n[doc-arg-limit] \{\ .doc-parse-args \$@ .if !\n[.$] \ .doc-print-and-reset .\} .if \n[doc-arg-limit] \{\ .ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nop \)\*[doc-space\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-print-and-reset .\} .if !"\*[doc-macro-name]"It" \ .if \n[doc-in-list] \ .if !\n[doc-nesting-level] \ .doc-\*[doc-list-type-stack\n[doc-list-depth]] .. .de Pf .if !\n[doc-arg-limit] \ .ds doc-macro-name Pf .ie \n[doc-arg-limit] \{\ .ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\ .nr doc-arg-ptr +1 .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .\} .el \ .tm mdoc warning: .Pf: trailing prefix (#\n[.c]) .\} .el \{\ .nop \)\$1\)\c .shift .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .tm mdoc warning: .Pf: missing arguments (#\n[.c]) .nop \) .\}\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \ .doc-print-and-reset .el \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .\} .. .de Ns .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Ns .doc-parse-args \$@ .\} .el \ .tm Usage: .Ns must be called with arguments (#\n[.c]) .\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .de Ap .ie !\n[doc-arg-limit] \ .tm Usage: 'Ap' cannot be first macro on a line (no '.Ap') (#\n[.c]) .el \{\ .nop \)'\)\c .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .ds doc-space "\*[doc-soft-space] .de doc-set-hard-space .ie "\*[doc-space]"" \ .ds doc-saved-space "\*[doc-hard-space] .el \ .ds doc-space "\*[doc-hard-space] .. .de doc-set-soft-space .ie "\*[doc-space]"" \ .ds doc-saved-space "\*[doc-soft-space] .el \ .ds doc-space "\*[doc-soft-space] .. .nr doc-space-mode 1 .ds doc-saved-space "\*[doc-space] .nr doc-have-space 0 .de Sm .ie \n[doc-have-space] \ .nr doc-reg-Sm 0 .el \ .nr doc-reg-Sm 1 .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Sm .doc-parse-args \$@ .\} .el \{\ .ie \n[doc-space-mode] \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .if \n[doc-reg-Sm] \ .if \n[.int] \ .nop \) .\} .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if !d doc-arg\n[doc-arg-ptr] \ .ds doc-arg\n[doc-arg-ptr] .ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .\} .el \{\ .ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .nr doc-arg-ptr -1 .ie \n[doc-space-mode] \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .\} .\}\} .ie \n[doc-space-mode] \{\ .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .if \n[doc-num-args] \ .doc-parse-space-vector .if \n[doc-reg-Sm] \ .if \n[.int] \ .nop \) .\} .el \{\ .nr doc-reg-Sm (\n[doc-arg-ptr] + 1) .while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\ .ds doc-space\n[doc-reg-Sm] .nr doc-reg-Sm +1 .\} .\} .ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-reset-args .. .nr doc-arg-type 0 .de doc-get-arg-type .nr doc-arg-type 2 .if ((\n[doc-width] < 4) & \A\$1) \{\ .ie (\n[doc-width] == 1) \{\ .if r doc-punct\$1 \ .nr doc-arg-type \n[doc-punct\$1] .\} .el \ .if r \$1 \ .if d \$1 \ .nr doc-arg-type 1 .\} .. .de doc-get-arg-type* .nr doc-arg-type 2 .length doc-width "\*[doc-arg\$1] .if ((\n[doc-width] < 4) & \A\*[doc-arg\$1]) \{\ .ie (\n[doc-width] == 1) \{\ .if r doc-punct\*[doc-arg\$1] \ .nr doc-arg-type \n[doc-punct\*[doc-arg\$1]] .\} .el \ .if r \*[doc-arg\$1] \ .if d \*[doc-arg\$1] \ .nr doc-arg-type 1 .\} .. .de doc-set-spacing-1 .nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]] .ie (\n[doc-reg-dssfm1] == 3) \{\ .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfm (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfm] .\} .ds doc-space\n[doc-arg-limit] "\*[doc-space] .\} .el \{\ .ie (\n[doc-reg-dssfm1] == 2) \{\ .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfm (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfm] .\} .ds doc-space\n[doc-arg-limit] .\} .el \ .ds doc-space\n[doc-arg-limit] .\} .. .de doc-set-spacing-2 .ds doc-space\n[doc-arg-limit] "\*[doc-space] .. .de doc-set-spacing-3 .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfps (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfps] .\} .ds doc-space\n[doc-arg-limit] "\*[doc-space] .. .de doc-set-spacing-4 .ds doc-space\n[doc-arg-limit] .. .de doc-do-1 .\*[doc-arg\n[doc-arg-ptr]] .. .als doc-do-2 doc-print-recursive .als doc-do-3 doc-print-recursive .als doc-do-4 doc-print-recursive .nr doc-fontmode-depth 0 .nr doc-fontmode-font-stack0 0 .nr doc-fontmode-size-stack0 0 .de Bf .ds doc-macro-name Bf .ie \n[.$] \{\ .nr doc-fontmode-depth +1 .nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f] .nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps] .ie "\$1"Em" \ .nop \*[doc-Em-font]\c .el \{ .ie "\$1"Li" \ .nop \*[doc-Li-font]\c .el \{ .ie "\$1"Sy" \ .nop \*[doc-Sy-font]\c .el \{ .ie "\$1"-emphasis" \ .nop \*[doc-Em-font]\c .el \{ .ie "\$1"-literal" \ .nop \*[doc-Li-font]\c .el \{ .ie "\$1"-symbolic" \ .nop \*[doc-Sy-font]\c .el \{\ .tmc mdoc warning: Unknown keyword '\$1' in .Bf macro .tm1 " (#\n[.c]) .\}\}\}\}\}\}\} .el \ .tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c]) .. .de Ef .ds doc-macro-name Ef .ie \n[doc-fontmode-depth] \{\ .nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c .nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c .nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0 .nr doc-curr-font \n[.f] .nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0 .nr doc-curr-size \n[.ps] .nr doc-fontmode-depth -1 .\} .el \ .tm mdoc warning: Extraneous .Ef (#\n[.c]) .. .nr doc-keep-type 0 .de Bk .ds doc-macro-name Bk .if \n[doc-keep-type] \ .tm .Bk: nesting keeps not implemented yet. (#\n[.c]) .ie "\$1"-lines" \{\ .nr doc-keep-type 2 .tm .Bk -lines: Not implemented yet. (#\n[.c]) .\} .el \{ .ie "\$1"-words" \{\ .nr doc-keep-type 1 .doc-set-hard-space .\} .el \{ .ie "\$1"" \{\ .nr doc-keep-type 1 .doc-set-hard-space .\} .el \{\ .tm mdoc warning: Unknown keyword '\$1' in .Bk macro (#\n[.c]) .nr doc-keep-type 3 .\}\}\} .. .de Ek .ds doc-macro-name Ek .ie \n[.$] \ .tm Usage: .Ek (does not take arguments) (#\n[.c]) .el \{\ .if !\n[doc-keep-type] \ .tm mdoc warning: .Ek found without .Bk before (#\n[.c]) .ie (\n[doc-keep-type] == 1) \ .doc-set-soft-space .el \{ .if (\n[doc-keep-type] == 2) \ .tm .Bk -lines: Not implemented yet. (#\n[.c]) .\}\} .nr doc-keep-type 0 .. .nr doc-display-depth 0 .nr doc-is-compact 0 .ds doc-display-type-stack0 .nr doc-display-indent-stack0 0 .nr doc-display-ad-stack0 0 .nr doc-display-fi-stack0 0 .nr doc-display-ft-stack0 0 .nr doc-display-ps-stack0 0 .de Bd .ds doc-macro-name Bd .if !\n[.$] \{\ .tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled} .tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c]) .return .\} .nr doc-is-compact 0 .ds doc-display-file .nr doc-reg-Bd 1 .nr doc-display-depth +1 .nr doc-display-ad-stack\n[doc-display-depth] \n[.j] .nr doc-display-fi-stack\n[doc-display-depth] \n[.u] .ie "\$1"-literal" \{\ .ds doc-display-type-stack\n[doc-display-depth] literal .nr doc-display-ft-stack\n[doc-display-depth] \n[.f] .nr doc-display-ps-stack\n[doc-display-depth] \n[.ps] .ie t \ .ta T 9n .el \ .ta T 8n .nf .\} .el \{ .ie "\$1"-filled" \{\ .ds doc-display-type-stack\n[doc-display-depth] filled .ad b .fi .\} .el \{ .ie "\$1"-ragged" \{\ .ds doc-display-type-stack\n[doc-display-depth] ragged .na .fi .\} .el \{ .ie "\$1"-centered" \{\ .ds doc-display-type-stack\n[doc-display-depth] centered .ad c .fi .\} .el \{ .ie "\$1"-unfilled" \{\ .ds doc-display-type-stack\n[doc-display-depth] unfilled .nf .\} .el \{\ .tm1 "mdoc warning: Unknown keyword '\$1' (or missing display type) .tm1 " in .Bd macro (#\n[.c]) .nr doc-reg-Bd 0 .\}\}\}\}\} .if \n[doc-reg-Bd] \{\ .shift .if \n[.$] \ .doc-do-Bd-args \$@ .\} .if !r doc-display-indent-stack\n[doc-display-depth] \ .nr doc-display-indent-stack\n[doc-display-depth] 0 .if \n[doc-display-indent-stack\n[doc-display-depth]] \ .in +\n[doc-display-indent-stack\n[doc-display-depth]]u .if !\n[doc-is-compact] \ .sp \n[doc-display-vertical]u .if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \ .if t \ .nop \*[doc-Li-font]\c .if !\n[cR] \ .ne 2v .if !"\*[doc-display-file]"" \ .so \*[doc-display-file] .nr doc-is-compact 0 .ds doc-display-file .. .de doc-do-Bd-args .nr doc-reg-ddBa 1 .ie "\$1"-offset" \{\ .nr doc-reg-ddBa 2 .ie "\$2"left" \ .nr doc-display-indent-stack\n[doc-display-depth] 0 .el \{ .ie "\$2"right" \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u) .el \{ .ie "\$2"center" \ .nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u) .el \{ .ie "\$2"indent" \ .nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u .el \{ .ie "\$2"indent-two" \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u) .el \ .nr doc-reg-ddBa 1 .\}\}\}\} .if (\n[doc-reg-ddBa] == 1) \{\ .nr doc-reg-ddBa 2 .nr doc-reg-ddBa1 0 .if \B(\$2) \{\ .nr doc-reg-ddBa2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-ddBa "\$2 .substring doc-str-ddBa 0 -2 .if \B(\*[doc-str-ddBa]) \{\ .nr doc-reg-ddBa3 (;(\$2)) .nr doc-reg-ddBa4 (\*[doc-str-ddBa]) .if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \ .nr doc-reg-ddBa1 1 .\} .warn \n[doc-reg-ddBa2] .\} .ie \n[doc-reg-ddBa1] \ .nr doc-display-indent-stack\n[doc-display-depth] \$2 .el \{\ .doc-get-width "\$2" .ie (\n[doc-width] <= 3) \{\ .doc-get-arg-type "\$2" .ie (\n[doc-arg-type] == 1) \ .nr doc-display-indent-stack\n[doc-display-depth] \n[\$2] .el \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\} .\} .el \{ .ie "\$1"-compact" \ .nr doc-is-compact 1 .el \{ .ie "\$1"-file" \{\ .ie !"\$2"" \{\ .ds doc-display-file "\$2 .nr doc-reg-ddBa 2 .\} .el \ .tm mdoc warning: .Bd '-file' keyword requires argument (#\n[.c]) .\} .el \ .tm mdoc warning: Unknown keyword '\$1' in .Bd macro (#\n[.c]) .\}\} .if (\n[doc-reg-ddBa] < \n[.$]) \{\ .shift \n[doc-reg-ddBa] .doc-do-Bd-args \$@ .\} .. .de Ed .ds doc-macro-name Ed .br .if !\n[doc-display-depth] \{\ .tm mdoc warning: Extraneous .Ed (#\n[.c]) .nr doc-display-depth 1 .\} .if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\ .ft \n[doc-display-ft-stack\n[doc-display-depth]] .ps \n[doc-display-ps-stack\n[doc-display-depth]]u .\} .in -\n[doc-display-indent-stack\n[doc-display-depth]]u .ie \n[doc-display-fi-stack\n[doc-display-depth]] \ .fi .el \ .nf .ad \n[doc-display-ad-stack\n[doc-display-depth]] .nr doc-display-indent-stack\n[doc-display-depth] 0 .ds doc-display-type-stack\n[doc-display-depth] .nr doc-display-depth -1 .. .ds doc-list-type-stack1 .nr doc-list-indent-stack1 0 .nr doc-list-have-indent-stack1 0 .de Bl .if !\n[.$] \{\ .doc-Bl-usage .return .\} .ds doc-macro-name Bl .nr doc-list-depth +1 .nr doc-arg-ptr 1 .ie "\$1"-hang" \{\ .ds doc-list-type-stack\n[doc-list-depth] hang-list .nr doc-list-indent-stack\n[doc-list-depth] 6n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-tag" \{\ .ds doc-list-type-stack\n[doc-list-depth] tag-list .nr doc-list-indent-stack\n[doc-list-depth] 6n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-item" \{\ .ds doc-list-type-stack\n[doc-list-depth] item-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-enum" \{\ .ds doc-list-type-stack\n[doc-list-depth] enum-list .nr doc-list-indent-stack\n[doc-list-depth] 3n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-bullet" \{\ .ds doc-list-type-stack\n[doc-list-depth] bullet-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-dash" \{\ .ds doc-list-type-stack\n[doc-list-depth] dash-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-hyphen" \{\ .ds doc-list-type-stack\n[doc-list-depth] dash-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-inset" \{\ .ds doc-list-type-stack\n[doc-list-depth] inset-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-diag" \{\ .ds doc-list-type-stack\n[doc-list-depth] diag-list .\} .el \{ .ie "\$1"-ohang" \{\ .ds doc-list-type-stack\n[doc-list-depth] ohang-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-column" \{\ .ds doc-list-type-stack\n[doc-list-depth] column-list .linetabs 1 .\} .el \{\ .tm1 "mdoc warning: Unknown list type '\$1' (or missing list type) .tm1 " in .Bl macro .tm .nr doc-arg-ptr 0 .\}\}\}\}\}\}\}\}\}\}\} .if !\n[doc-arg-ptr] \{\ .doc-Bl-usage .doc-reset-args .nr doc-list-depth -1 .return .\} .shift .nr doc-reg-Bl 1 .while (\n[doc-reg-Bl] <= \n[.$]) \{\ .ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]] .nr doc-type\n[doc-reg-Bl] 0 .ds doc-space\n[doc-reg-Bl] .nr doc-reg-Bl +1 .\} .doc-increment-list-stack .if \n[.$] \{\ .nr doc-arg-limit \n[.$] .nr doc-arg-ptr 0 .doc-do-Bl-args .in +\n[doc-list-offset-stack\n[doc-list-depth]]u .if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\ .doc-set-column-tab \n[doc-num-columns] ' in -\n[doc-column-indent-width]u .if !\n[doc-compact-list-stack\n[doc-list-depth]] \ .sp \n[doc-display-vertical]u .nf .nr doc-num-columns 0 .\}\} .doc-reset-args .. .de doc-Bl-usage .tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset} .tm1 " [-width <string>] .tm1 " [-offset <string>] [-compact] .tm1 " .Bl -column [-offset <string>] <string1> <string2> ... .tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash} .tm1 " [-offset <string>] [-compact] (#\n[.c]) .. .de doc-do-Bl-args .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \ .return .nr doc-reg-dBla (\n[doc-arg-ptr] + 1) .if (\n[doc-arg-limit] < \n[doc-reg-dBla]) \ .ds doc-arg\n[doc-reg-dBla] .nr doc-reg-dBla 1 .ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \ .nr doc-compact-list-stack\n[doc-list-depth] 1 .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\ .ie (\n[doc-list-depth] > 1) \{\ .nr doc-reg-dBla1 (\n[doc-list-depth] - 1) .ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]] .as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]]. .length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]] .nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n .\} .el \ .tm mdoc warning: '-nested' allowed with nested .Bl macros only (#\n[.c]) .\} .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\ .nr doc-arg-ptr +1 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 0 0 .ie .\*[doc-str-dBla] \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 1 .doc-first-parameter \*[doc-str-dBla] .doc-get-width "\*[doc-str-dfp] .doc-get-arg-type "\*[doc-str-dfp] .ie (\n[doc-arg-type] == 1) \ .nr doc-reg-dBla1 1 .el \ .nr doc-reg-dBla1 0 .\} .el \ .nr doc-reg-dBla1 0 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .ie \n[doc-reg-dBla1] \{\ .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .doc-save-global-vars .doc-reset-args .box doc-box-dBla .ev doc-env-dBla .evc 0 .in 0 .nf .nop \*[doc-str-dBla] .br .ev .box .doc-restore-global-vars .doc-get-width \h'\n[dl]u' .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \{\ .nr doc-reg-dBla1 0 .if \B(\*[doc-str-dBla]) \{\ .nr doc-reg-dBla2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-dBla1 "\*[doc-str-dBla] .substring doc-str-dBla1 0 -2 .if \B(\*[doc-str-dBla1]) \{\ .nr doc-reg-dBla3 (;(\*[doc-str-dBla])) .nr doc-reg-dBla4 (\*[doc-str-dBla1]) .if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \ .nr doc-reg-dBla1 1 .\} .warn \n[doc-reg-dBla2] .\} .ie \n[doc-reg-dBla1] \ .nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla]) .el \{\ .doc-get-arg-width \n[doc-arg-ptr] .ie (\n[doc-width] == 2) \{\ .doc-get-arg-type \*[doc-str-dBla] .ie (\n[doc-arg-type] == 1) \ .nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]] .el \ .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\}\} .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\ .nr doc-arg-ptr +1 .ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \ .nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u .el \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .nr doc-reg-dBla1 0 .if \B(\*[doc-str-dBla]) \{\ .nr doc-reg-dBla2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-dBla1 "\*[doc-str-dBla] .substring doc-str-dBla1 0 -2 .if \B(\*[doc-str-dBla1]) \{\ .nr doc-reg-dBla3 (;(\*[doc-str-dBla])) .nr doc-reg-dBla4 (\*[doc-str-dBla1]) .if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \ .nr doc-reg-dBla1 1 .\} .warn \n[doc-reg-dBla2] .\} .ie \n[doc-reg-dBla1] \ .nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla] .el \{\ .doc-get-arg-width \n[doc-arg-ptr] .ie (\n[doc-width] <= 3) \{\ .doc-get-arg-type \*[doc-str-dBla] .ie (\n[doc-arg-type] == 1) \ .nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]] .el \ .nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\}\} .el \ .nr doc-reg-dBla 0 .\}\}\} .if !\n[doc-reg-dBla] \{\ .ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\ .nr doc-num-columns +1 .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 0 0 .ie .\*[doc-str-dBla] \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 1 .doc-first-parameter \*[doc-str-dBla] .doc-get-width "\*[doc-str-dfp] .doc-get-arg-type "\*[doc-str-dfp] .ie (\n[doc-arg-type] == 1) \ .nr doc-reg-dBla1 1 .el \ .nr doc-reg-dBla1 0 .\} .el \ .nr doc-reg-dBla1 0 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .ie \n[doc-reg-dBla1] \{\ .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .doc-save-global-vars .doc-reset-args .box doc-box-dBla .ev doc-env-dBla .evc 0 .in 0 .nf .nop \*[doc-str-dBla] .br .ev .box .doc-restore-global-vars .ds doc-arg\n[doc-num-columns] "\h'\n[dl]u' .\} .el \ .ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .tmc mdoc warning: Unknown keyword '\*[doc-arg\n[doc-arg-ptr]]' .tm1 " in .Bl macro (#\n[.c]) .\}\} .if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \ .doc-do-Bl-args .. .de doc-save-global-vars .ds doc-macro-name-saved "\*[doc-macro-name] .nr doc-arg-limit-saved \n[doc-arg-limit] .nr doc-num-args-saved \n[doc-num-args] .nr doc-arg-ptr-saved \n[doc-arg-ptr] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\ .ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]] .nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]] .ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-curr-font-saved \n[doc-curr-font] .nr doc-curr-size-saved \n[doc-curr-size] .nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section] .nr doc-in-library-section-saved \n[doc-in-library-section] .nr doc-indent-synopsis-saved \n[doc-indent-synopsis] .nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active] .nr doc-have-decl-saved \n[doc-have-decl] .nr doc-have-var-saved \n[doc-have-var] .ds doc-command-name-saved "\*[doc-command-name] .ds doc-quote-left-saved "\*[doc-quote-left] .ds doc-quote-right-saved "\*[doc-quote-right] .nr doc-nesting-level-saved \n[doc-nesting-level] .nr doc-in-list-saved \n[doc-in-list] .ds doc-space-saved "\*[doc-space] .ds doc-saved-space-saved "\*[doc-saved-space] .nr doc-space-mode-saved \n[doc-space-mode] .nr doc-have-space-saved \n[doc-have-space] .nr doc-have-slot-saved \n[doc-have-slot] .nr doc-keep-type-saved \n[doc-keep-type] .nr doc-display-depth-saved \n[doc-display-depth] .nr doc-is-compact-saved \n[doc-is-compact] .nr doc-reg-dsgv 0 .while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\ .ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]] .nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]] .nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]] .nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]] .nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]] .nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-fontmode-depth-saved \n[doc-fontmode-depth] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\ .nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]] .nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-list-depth-saved \n[doc-list-depth] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\ .ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]] .nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]] .nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]] .nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]] .ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]] .nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]] .nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font] .nr doc-curr-type-saved \n[doc-curr-type] .ds doc-curr-arg-saved "\*[doc-curr-arg] .nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count] .nr doc-num-columns-saved \n[doc-num-columns] .nr doc-column-indent-width-saved \n[doc-column-indent-width] .nr doc-is-func-saved \n[doc-is-func] .nr doc-have-old-func-saved \n[doc-have-old-func] .nr doc-func-arg-count-saved \n[doc-func-arg-count] .ds doc-func-arg-saved "\*[doc-func-arg] .nr doc-num-func-args-saved \n[doc-num-func-args] .nr doc-func-args-processed-saved \n[doc-func-args-processed] .nr doc-have-func-saved \n[doc-have-func] .nr doc-is-reference-saved \n[doc-is-reference] .nr doc-reference-count-saved \n[doc-reference-count] .nr doc-author-count-saved \n[doc-author-count] .nr doc-reg-dsgv 0 .while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\ .ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-book-count-saved \n[doc-book-count] .ds doc-book-name-saved "\*[doc-book-name] .nr doc-city-count-saved \n[doc-city-count] .ds doc-city-name-saved "\*[doc-city-name] .nr doc-date-count-saved \n[doc-date-count] .ds doc-date-saved "\*[doc-date] .nr doc-publisher-count-saved \n[doc-publisher-count] .ds doc-publisher-name-saved "\*[doc-publisher-name] .nr doc-journal-count-saved \n[doc-journal-count] .ds doc-journal-name-saved "\*[doc-journal-name] .nr doc-issue-count-saved \n[doc-issue-count] .ds doc-issue-name-saved "\*[doc-issue-name] .nr doc-optional-count-saved \n[doc-optional-count] .ds doc-optional-string-saved "\*[doc-optional-string] .nr doc-page-number-count-saved \n[doc-page-number-count] .ds doc-page-number-string-saved "\*[doc-page-number-string] .nr doc-corporate-count-saved \n[doc-corporate-count] .ds doc-corporate-name-saved "\*[doc-corporate-name] .nr doc-report-count-saved \n[doc-report-count] .ds doc-report-name-saved "\*[doc-report-name] .nr doc-reference-title-count-saved \n[doc-reference-title-count] .ds doc-reference-title-name-saved "\*[doc-reference-title-name] .ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book] .nr doc-url-count-saved \n[doc-url-count] .ds doc-url-name-saved "\*[doc-url-name] .nr doc-volume-count-saved \n[doc-volume-count] .ds doc-volume-name-saved "\*[doc-volume-name] .nr doc-have-author-saved \n[doc-have-author] .ds doc-document-title-saved "\*[doc-document-title] .ds doc-volume-saved "\*[doc-volume] .ds doc-section-saved "\*[doc-section] .ds doc-operating-system-saved "\*[doc-operating-system] .ds doc-date-string-saved "\*[doc-date-string] .nr doc-header-space-saved \n[doc-header-space] .nr doc-footer-space-saved \n[doc-footer-space] .nr doc-display-vertical-saved \n[doc-display-vertical] .ds doc-header-string-saved "\*[doc-header-string] .nr doc-in-see-also-section-saved \n[doc-in-see-also-section] .nr doc-in-files-section-saved \n[doc-in-files-section] .nr doc-in-authors-section-saved \n[doc-in-authors-section] .. .de doc-restore-global-vars .ds doc-macro-name "\*[doc-macro-name-saved] .nr doc-arg-limit \n[doc-arg-limit-saved] .nr doc-num-args \n[doc-num-args-saved] .nr doc-arg-ptr \n[doc-arg-ptr-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\ .ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved] .nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved] .ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-curr-font \n[doc-curr-font-saved] .nr doc-curr-size \n[doc-curr-size-saved] .nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved] .nr doc-in-library-section \n[doc-in-library-section-saved] .nr doc-indent-synopsis \n[doc-indent-synopsis-saved] .nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved] .nr doc-have-decl \n[doc-have-decl-saved] .nr doc-have-var \n[doc-have-var-saved] .ds doc-command-name "\*[doc-command-name-saved] .ds doc-quote-left "\*[doc-quote-left-saved] .ds doc-quote-right "\*[doc-quote-right-saved] .nr doc-nesting-level \n[doc-nesting-level-saved] .nr doc-in-list \n[doc-in-list-saved] .ds doc-space "\*[doc-space-saved] .ds doc-saved-space "\*[doc-saved-space-saved] .nr doc-space-mode \n[doc-space-mode-saved] .nr doc-have-space \n[doc-have-space-saved] .nr doc-have-slot \n[doc-have-slot-saved] .nr doc-keep-type \n[doc-keep-type-saved] .nr doc-display-depth \n[doc-display-depth-saved] .nr doc-is-compact \n[doc-is-compact-saved] .nr doc-reg-drgv 0 .while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\ .ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved] .nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved] .nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved] .nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved] .nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved] .nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-fontmode-depth \n[doc-fontmode-depth-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\ .nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved .nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved .nr doc-reg-drgv +1 .\} .nr doc-list-depth \n[doc-list-depth-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\ .ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved] .nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved] .nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved] .nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved] .ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved] .nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved] .nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved] .nr doc-curr-type \n[doc-curr-type-saved] .ds doc-curr-arg "\*[doc-curr-arg-saved] .nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved] .nr doc-num-columns \n[doc-num-columns-saved] .nr doc-column-indent-width \n[doc-column-indent-width-saved] .nr doc-is-func \n[doc-is-func-saved] .nr doc-have-old-func \n[doc-have-old-func-saved] .nr doc-func-arg-count \n[doc-func-arg-count-saved] .ds doc-func-arg "\*[doc-func-arg-saved] .nr doc-num-func-args \n[doc-num-func-args-saved] .nr doc-func-args-processed \n[doc-func-args-processed-saved] .nr doc-have-func \n[doc-have-func-saved] .nr doc-is-reference \n[doc-is-reference-saved] .nr doc-reference-count \n[doc-reference-count-saved] .nr doc-author-count \n[doc-author-count-saved] .nr doc-reg-drgv 0 .while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\ .ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-book-count \n[doc-book-count-saved] .ds doc-book-name "\*[doc-book-name-saved] .nr doc-city-count \n[doc-city-count-saved] .ds doc-city-name "\*[doc-city-name-saved] .nr doc-date-count \n[doc-date-count-saved] .ds doc-date "\*[doc-date-saved] .nr doc-publisher-count \n[doc-publisher-count-saved] .ds doc-publisher-name "\*[doc-publisher-name-saved] .nr doc-journal-count \n[doc-journal-count-saved] .ds doc-journal-name "\*[doc-journal-name-saved] .nr doc-issue-count \n[doc-issue-count-saved] .ds doc-issue-name "\*[doc-issue-name-saved] .nr doc-optional-count \n[doc-optional-count-saved] .ds doc-optional-string "\*[doc-optional-string-saved] .nr doc-page-number-count \n[doc-page-number-count-saved] .ds doc-page-number-string "\*[doc-page-number-string-saved] .nr doc-corporate-count \n[doc-corporate-count-saved] .ds doc-corporate-name "\*[doc-corporate-name-saved] .nr doc-report-count \n[doc-report-count-saved] .ds doc-report-name "\*[doc-report-name-saved] .nr doc-reference-title-count \n[doc-reference-title-count-saved] .ds doc-reference-title-name "\*[doc-reference-title-name-saved] .ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved] .nr doc-url-count \n[doc-url-count-saved] .ds doc-url-name "\*[doc-url-name-saved] .nr doc-volume-count \n[doc-volume-count-saved] .ds doc-volume-name "\*[doc-volume-name-saved] .nr doc-have-author \n[doc-have-author-saved] .ds doc-document-title "\*[doc-document-title-saved] .ds doc-volume "\*[doc-volume-saved] .ds doc-section "\*[doc-section-saved] .ds doc-operating-system "\*[doc-operating-system-saved] .ds doc-date-string "\*[doc-date-string-saved] .nr doc-header-space \n[doc-header-space-saved] .nr doc-footer-space \n[doc-footer-space-saved] .nr doc-display-vertical \n[doc-display-vertical-saved] .ds doc-header-string "\*[doc-header-string-saved] .nr doc-in-see-also-section \n[doc-in-see-also-section-saved] .nr doc-in-files-section \n[doc-in-files-section-saved] .nr doc-in-authors-section \n[doc-in-authors-section-saved] .. .de El .if \n[.$] \{\ .tm Usage: .El (does not take arguments) (#\n[.c]) .return .\} .ds doc-macro-name El .ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]] .ie "\*[doc-str-El]"diag-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"column-list" \ .doc-end-column-list .el \{ .ie "\*[doc-str-El]"item-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"ohang-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"inset-list" \ .doc-end-list 0 .el \ .doc-end-list 1 .\}\}\}\} .br .. .ds doc-saved-Pa-font .nr doc-curr-type 0 .ds doc-curr-arg .nr doc-bullet-list-type 1 .nr doc-column-list-type 0 .nr doc-dash-list-type 1 .nr doc-diag-list-type 0 .nr doc-enum-list-type 1 .nr doc-hang-list-type 2 .nr doc-inset-list-type 2 .nr doc-item-list-type 1 .nr doc-ohang-list-type 2 .nr doc-tag-list-type 2 .de It .ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]] .if "\*[doc-str-It]"" \ .tm mdoc error: .It without preceding .Bl (#\n[.c]) .if \n[doc-nesting-level] \{\ .tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao) .tm1 " (#\n[.c]) .\} .br .if !\n[cR] \ .ne 3v .if \n[.$] \{\ .ds doc-macro-name It .nr doc-reg-It 1 .while (\n[doc-reg-It] <= \n[.$]) \{\ .ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]] .nr doc-reg-It +1 .\} .nr doc-num-args \n[.$] .nr doc-arg-ptr 0 .\} .nr doc-reg-It \n[doc-\*[doc-str-It]-type] .if \n[doc-reg-It] \{\ .box doc-item-box\n[doc-list-depth] .ev doc-item-env\n[doc-list-depth] .evc 0 .in 0 .nf .\} .ie (\n[doc-reg-It] == 1) \{\ .if \n[.$] \{\ .tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]' .tm1 " don't take arguments (#\n[.c]) .\}\} .el \{\ .ie \n[.$] \{\ .if (\n[doc-reg-It] == 2) \{\ .doc-parse-arg-vector .nr doc-in-list 1 .nr doc-arg-ptr 1 .nr doc-curr-type \n[doc-type1] .ds doc-curr-arg "\*[doc-arg1] .if \n[doc-in-files-section] \{\ .ds doc-saved-Pa-font "\*[doc-Pa-font] .if n \ .ds doc-Pa-font "\*[doc-No-font] .\} .ie (\n[doc-type1] == 1) \ .\*[doc-arg1] .el \{\ .nr doc-arg-ptr 1 .doc-print-recursive .\}\}\} .el \{\ .tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]' .tm1 " require arguments (#\n[.c]) .\} .\} .if !\n[doc-nesting-level] \ .doc-\*[doc-str-It] .. .de doc-inset-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 0 .br .nh .doc-item-box\n[doc-list-depth] .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-hang-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 1 .nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .ti -\n[doc-reg-dhl]u .nh .ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \ .doc-item-box\n[doc-list-depth] .el \{\ .chop doc-item-box\n[doc-list-depth] .nr doc-reg-dhl1 \n[.k]u .nop \*[doc-item-box\n[doc-list-depth]]\c .nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c .nr doc-have-space 1 .\} .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-ohang-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 0 .nh .doc-item-box\n[doc-list-depth] .br .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-item-list .br .ev .box .doc-set-vertical-and-indent 0 .br .doc-reset-args .. .nr doc-enum-list-count-stack1 0 .de doc-enum-list .nr doc-in-list 1 .nr doc-enum-list-count-stack\n[doc-list-depth] +1 .nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c .nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\& .doc-do-list .. .de doc-bullet-list .nr doc-in-list 1 .nop \)\*[doc-Sy-font]\[bu]\f[] .doc-do-list .. .de doc-dash-list .nr doc-in-list 1 .nop \)\*[doc-Sy-font]\-\f[] .doc-do-list .. .als doc-do-list doc-hang-list .nr doc-diag-list-input-line-count 0 .de doc-diag-list .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\ .ie !\n[doc-compact-list-stack\n[doc-list-depth]] \ .doc-paragraph .el \ .br .\} .el \ .br .nr doc-diag-list-input-line-count \n[.c] .nh .nop \*[doc-Sy-font]\c .if \n[doc-num-args] \ .doc-remaining-args .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c .doc-print-and-reset .. .de doc-tag-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .box doc-box-dtl .ev doc-env-dtl .evc 0 .fi .ad 0 .in 0 .doc-item-box\n[doc-list-depth] .br .ev .box .doc-set-vertical-and-indent 1 .nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .ti -\n[doc-reg-dtl]u .nh .doc-item-box\n[doc-list-depth] .ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \ .br .el \{\ .vpt 0 .br .sp -1 .vpt 1 .nop \&\c .nr doc-have-space 1 .\} .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-set-vertical-and-indent .if !\n[doc-compact-list-stack\n[doc-list-depth]] \ .sp \n[doc-display-vertical]u .if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\ .nr doc-list-have-indent-stack\n[doc-list-depth] 0 .if \$1 \ .in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .\} .if !\n[cR] \ .ne 2v .. .nr doc-list-depth 0 .nr doc-num-columns 0 .nr doc-compact-list-stack1 0 .ds doc-tag-prefix-stack1 .nr doc-list-offset-stack1 0 .de doc-end-list .if \$1 \ ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u .if (\n[doc-list-depth] <= 0) \ .tm mdoc warning: extraneous .El call (#\n[.c]) .doc-decrement-list-stack .nr doc-list-depth -1 .. .de doc-increment-list-stack .nr doc-reg-dils (\n[doc-list-depth] + 1) .nr doc-list-have-indent-stack\n[doc-reg-dils] 0 .nr doc-list-indent-stack\n[doc-reg-dils] 0 .nr doc-list-offset-stack\n[doc-reg-dils] 0 .ds doc-tag-prefix-stack\n[doc-reg-dils] .ds doc-list-type-stack\n[doc-reg-dils] .nr doc-compact-list-stack\n[doc-reg-dils] 0 .nr doc-enum-list-count-stack\n[doc-reg-dils] 0 .. .de doc-decrement-list-stack .ds doc-list-type-stack\n[doc-list-depth] .nr doc-list-have-indent-stack\n[doc-list-depth] 0 .nr doc-list-indent-stack\n[doc-list-depth] 0 .nr doc-list-offset-stack\n[doc-list-depth] 0 .ds doc-tag-prefix-stack\n[doc-list-depth] .nr doc-compact-list-stack\n[doc-list-depth] 0 .nr doc-enum-list-count-stack\n[doc-list-depth] 0 .. .de Xr .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Xr .doc-parse-args \$@ .\} .el \ .doc-Xr-usage .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0] .if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nr doc-reg-Xr (\n[doc-arg-ptr] + 1) .if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\ .ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp] .ds doc-space\n[doc-arg-ptr] .\} .\} .doc-print-recursive .\} .el \ .doc-Xr-usage .\} .el \ .doc-Xr-usage .. .de doc-Xr-usage .tm Usage: .Xr manpage_name [section#] ... (#\n[.c]) .doc-reset-args .. .als Sx doc-generic-macro .ds doc-Sx-usage section_header .de doc-end-column-list .linetabs 0 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u) .ta T .5i .fi .doc-decrement-list-stack .nr doc-list-depth -1 .. .nr doc-column-indent-width 0 .de doc-set-column-tab .ds doc-str-dsct .nr doc-reg-dsct 1 .nr doc-column-indent-width 0 .ie (\$1 < 5) \ .ds doc-str-dsct1 " .el \{\ .ie (\$1 == 5) \ .ds doc-str-dsct1 " .el \{\ .ds doc-str-dsct1 " .\}\} .while (\n[doc-reg-dsct] <= \$1) \{\ .as doc-str-dsct " +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u .nr doc-column-indent-width +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u .nr doc-reg-dsct +1 .\} .ta \*[doc-str-dsct] ' in +\n[doc-column-indent-width]u .. .de doc-column-list .if \n[doc-num-args] \ .doc-parse-arg-vector .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c]) .return .\} .if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\ .nr doc-reg-dcl (\n[doc-arg-ptr] - 1) .ds doc-space\n[doc-reg-dcl] .\} .if !\n[doc-list-indent-stack\n[doc-list-depth]] \ .nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u .if !\n[.u] \{\ .fi .in +\n[doc-column-indent-width]u .\} .ti -\n[doc-column-indent-width]u .doc-do-\n[doc-type\n[doc-arg-ptr]] .. .de Ta .ie \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .nop \*[doc-tab]\c .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .el \ .doc-reset-args .\} .el \{\ .tm1 "Usage: Ta must follow column entry: e.g. .tm1 " .It column_string [Ta [column_string ...]] (#\n[.c]) .\} .. .de Dl .ta T .5i .in +\n[doc-display-indent]u .ie \n[doc-arg-limit] \{\ .tm Usage: .Dl not callable by other macros (#\n[.c]) .doc-reset-args .\} .el \{\ .ie \n[.$] \{\ .ds doc-macro-name Dl .doc-parse-args \$@ .nr doc-arg-ptr 1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Li-font]\c .doc-print-recursive .\} .el \ .tm Usage: .Dl argument ... (#\n[.c]) .\} .in -\n[doc-display-indent]u .. .de D1 .ta T .5i .in +\n[doc-display-indent]u .ie \n[doc-arg-limit] \{\ .tm Usage: .D1 not callable by other macros (#\n[.c]) .doc-reset-args .\} .el \{\ .ie \n[.$] \{\ .ds doc-macro-name D1 .doc-parse-args \$@ .nr doc-arg-ptr 1 .doc-print-recursive .\} .el \ .tm Usage: .D1 argument ... (#\n[.c]) .\} .in -\n[doc-display-indent]u .. .de Vt .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Vt .doc-parse-args \$@ .\} .el \ .tm Usage: .Vt variable_type ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Vt variable_type ... (#\n[.c]) .doc-reset-args .return .\} .if \n[doc-in-synopsis-section] \{\ .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .if \n[doc-have-func] \{\ .ie \n[doc-have-var] \ .br .el \ .doc-paragraph .\} .nr doc-have-var 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ft-font]\c .doc-print-recursive .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-have-old-func] \ .nop \*[doc-soft-space]\c .el \ .br .\} .. .nr doc-is-func 0 .de Ft .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Ft .doc-parse-args \$@ .\} .el \ .tm Usage: .Ft function_type ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Ft function_type ... (#\n[.c]) .doc-reset-args .return .\} .if \n[doc-in-synopsis-section] \{\ .if (\n[doc-have-func] : \n[doc-have-decl]) \{\ .doc-paragraph .nr doc-have-decl 0 .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .nr doc-is-func 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ft-font]\c .doc-print-recursive .. .nr doc-have-old-func 0 .de Ot .nr doc-have-old-func 1 .if \n[doc-in-synopsis-section] \{\ .if (\n[doc-have-func] : \n[doc-have-decl]) \{\ .doc-paragraph .nr doc-have-decl 0 .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .nr doc-is-func 1 .\} .if \n[.$] \ .nop \*[doc-Ft-font]\$*\c .nop \ \f[]\c .. .de Fa .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fa .doc-parse-args \$@ .\} .el \ .tm Usage: .Fa function_arguments ... (#\n[.c]) .\} .ie \n[doc-func-arg-count] \ .doc-do-func .el \{\ .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fa-font]\c .doc-print-recursive .if \n[doc-in-synopsis-section] \ .if \n[doc-have-func] \ .br .\}\} .. .nr doc-func-arg-count 0 .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .de doc-do-func .if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\ .doc-reset-args .return .\} .nr doc-arg-ptr +1 .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .doc-build-func-string \*[doc-arg\n[doc-arg-ptr]] .if (\n[doc-num-func-args] > 1) \ .ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg] .if (\n[doc-func-arg-count] > 1) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c .if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \ .if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \ .nop ,\)\c .nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c .nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c .\} .if (\n[doc-func-arg-count] == 1) \{\ .nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\c .\} .nr doc-func-arg-count +1 .doc-do-func .. .nr doc-have-func 0 .de Fn .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fn .doc-parse-args \$@ .\} .el \ .tm Usage: .Fn function_name [function_arg] ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-is-func] \{\ .br .nr doc-have-var 0 .nr doc-have-decl 0 .nr doc-is-func 0 .\} .el \{\ .if \n[doc-have-func] \{\ .doc-paragraph .nr doc-have-var 0 .nr doc-have-decl 0 .\}\} .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .nr doc-have-func 1 .nr doc-is-func 0 .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis (4u * \n[doc-fixed-width]u) .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .\} .nr doc-arg-ptr +1 .doc-print-prefixes .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Fn function_name [function_arg] ... (#\n[.c]) .doc-reset-args .return .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\*[lp]\)\c .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nop \*[doc-Fa-font]\c .doc-do-func-args .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .\}\} .nop \)\*[rp]\)\c .if \n[doc-in-synopsis-section] \ .nop \);\)\c .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-arg-ptr -1 .nop \)\*[doc-space\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-print-and-reset .if \n[doc-in-synopsis-section] \ .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .. .de doc-do-func-args .if \n[doc-in-synopsis-section] \{\ .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .doc-build-func-string \*[doc-arg\n[doc-arg-ptr]] .if (\n[doc-num-func-args] > 1) \ .ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg] .\} .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-reg-ddfa (\n[doc-arg-ptr] - 1) .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c .if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \ .if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \ .nop ,\)\c .nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c .doc-do-func-args .\}\} .. .nr doc-saved-nesting-level 0 .nr doc-in-func-enclosure 0 .de Fo .if (\n[doc-in-func-enclosure]) \{\ .tm mdoc error: .Fo/.Fc can't be nested (#\n[.c]) .return .\} .nr doc-saved-nesting-level \n[doc-nesting-level] .nr doc-in-func-enclosure 1 .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fo .doc-parse-args \$@ .\} .el \ .tm Usage: .Fo function_name (#\n[.c]) .\} .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-is-func] \{\ .br .nr doc-have-var 0 .nr doc-have-decl 0 .nr doc-is-func 0 .\} .el \{\ .if \n[doc-have-func] \{\ .doc-paragraph .nr doc-have-var 0 .nr doc-have-decl 0 .\}\} .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .nr doc-have-func 1 .nr doc-is-func 0 .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis (4u * \n[doc-fixed-width]u) .\} .box doc-func-box .ev doc-func-env .evc 0 .in 0 .nf .nr doc-arg-ptr +1 .doc-print-prefixes .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-func-arg-count 1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\*[lp]\)\c .doc-reset-args .\} .. .de Fc .if !\n[doc-in-func-enclosure] \{\ .tm mdoc warning: Extraneous .Fc (#\n[.c]) .return .\} .if \n[.$] \{\ .ds doc-macro-name Fc .doc-parse-args \) \$@ .\} .if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \ .tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc .nr doc-func-arg-count 0 .nr doc-in-func-enclosure 0 .ie \n[doc-in-synopsis-section] \ .nop \|\*[rp];\) .el \ .nop \|\*[rp]\) .br .ev .box .chop doc-func-box .unformat doc-func-box .if \n[doc-in-synopsis-section] \{\ .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .\} .nh .nop \*[doc-func-box]\c .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .doc-print-recursive .\} .el \ .doc-print-and-reset .if \n[doc-in-synopsis-section] \ .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .. .de doc-build-func-string .if !\n[doc-num-func-args] \{\ .nr doc-num-func-args \n[.$] .nr doc-func-args-processed 0 .ds doc-func-arg .\} .nr doc-func-args-processed +1 .as doc-func-arg "\$1 .if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\ .as doc-func-arg "\*[doc-hard-space] .shift .doc-build-func-string \$@ .\} .. .nr doc-is-reference 0 .nr doc-reference-count 0 .de Rs .ie \n[.$] \ .tm Usage: .Rs (does not take arguments) (#\n[.c]) .el \{\ .nr doc-is-reference 1 .doc-reset-reference .if \n[doc-in-see-also-section] \ .doc-paragraph .nr doc-reference-count 0 .\} .. .de Re .ie \n[.$] \ .tm Usage: .Re (does not take arguments) (#\n[.c]) .el \{\ .if !\n[doc-is-reference] \{\ .tm mdoc warning: Extraneous .Re (#\n[.c]) .return .\} .doc-print-reference .doc-reset-reference .nr doc-is-reference 0 .\} .. .de doc-reset-reference .while (\n[doc-author-count]) \{\ .ds doc-author-name\n[doc-author-count] .nr doc-author-count -1 .\} .nr doc-journal-count 0 .nr doc-issue-count 0 .nr doc-optional-count 0 .nr doc-corporate-count 0 .nr doc-report-count 0 .nr doc-reference-title-count 0 .nr doc-url-count 0 .nr doc-volume-count 0 .nr doc-city-count 0 .nr doc-date-count 0 .nr doc-page-number-count 0 .nr doc-book-count 0 .nr doc-publisher-count 0 .nr doc-reference-count 0 .ds doc-journal-name .ds doc-issue-name .ds doc-optional-string .ds doc-corporate-name .ds doc-report-name .ds doc-reference-title-name .ds doc-reference-title-name-for-book .ds doc-url-name .ds doc-volume-name .ds doc-city-name .ds doc-date .ds doc-page-number-string .ds doc-book-name .ds doc-publisher-name .. .de doc-finish-reference .nr doc-reference-count -\$1 .ie \n[doc-reference-count] \ .nop \), .el \ .nop \). .. .de doc-print-reference .nh .if \n[doc-author-count] \{\ .doc-print-reference-authors .nr doc-reference-count -\n[doc-author-count] .\} .if \n[doc-reference-title-count] \{\ .unformat doc-reference-title-name .chop doc-reference-title-name .unformat doc-reference-title-name-for-book .chop doc-reference-title-name-for-book .ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\ .nop \)\*[Lq]\)\*[doc-reference-title-name-for-book]\)\*[Rq]\c .doc-finish-reference \n[doc-reference-title-count] .\} .el \{\ .nop \*[doc-reference-title-name]\c .doc-finish-reference \n[doc-reference-title-count] .\}\} .if \n[doc-book-count] \{\ .unformat doc-book-name .chop doc-book-name .nop \*[doc-book-name]\c .doc-finish-reference \n[doc-book-count] .\} .if \n[doc-publisher-count] \{\ .unformat doc-publisher-name .chop doc-publisher-name .nop \*[doc-publisher-name]\c .doc-finish-reference \n[doc-publisher-count] .\} .if \n[doc-journal-count] \{\ .unformat doc-journal-name .chop doc-journal-name .nop \*[doc-journal-name]\c .doc-finish-reference \n[doc-journal-count] .\} .if \n[doc-report-count] \{\ .unformat doc-report-name .chop doc-report-name .nop \*[doc-report-name]\c .doc-finish-reference \n[doc-report-count] .\} .if \n[doc-issue-count] \{\ .unformat doc-issue-name .chop doc-issue-name .nop \*[doc-issue-name]\c .doc-finish-reference \n[doc-issue-count] .\} .if \n[doc-volume-count] \{\ .unformat doc-volume-name .chop doc-volume-name .nop \*[doc-volume-name]\c .doc-finish-reference \n[doc-volume-count] .\} .if \n[doc-url-count] \{\ .unformat doc-url-name .chop doc-url-name .nop \*[doc-url-name]\c .doc-finish-reference \n[doc-url-count] .\} .if \n[doc-page-number-count] \{\ .unformat doc-page-number-string .chop doc-page-number-string .nop \*[doc-page-number-string]\c .doc-finish-reference \n[doc-page-number-count] .\} .if \n[doc-corporate-count] \{\ .unformat doc-corporate-name .chop doc-corporate-name .nop \*[doc-corporate-name]\c .doc-finish-reference \n[doc-corporate-count] .\} .if \n[doc-city-count] \{\ .unformat doc-city-name .chop doc-city-name .nop \*[doc-city-name]\c .doc-finish-reference \n[doc-city-count] .\} .if \n[doc-date-count] \{\ .unformat doc-date .chop doc-date .nop \*[doc-date]\c .doc-finish-reference \n[doc-date-count] .\} .if \n[doc-optional-count] \{\ .unformat doc-optional-string .chop doc-optional-string .nop \*[doc-optional-string]\c .doc-finish-reference \n[doc-optional-count] .\} .if \n[doc-reference-count] \ .tm mdoc warning: unresolved reference problem .hy \n[doc-hyphen-flags] .. .ds doc-str-dpra "and .de doc-print-reference-authors .nr doc-reg-dpra 1 .while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\ .unformat doc-author-name\n[doc-reg-dpra] .chop doc-author-name\n[doc-reg-dpra] .ie (\n[doc-author-count] > 2) \ .nop \)\*[doc-author-name\n[doc-reg-dpra]], .el \ .nop \)\*[doc-author-name\n[doc-reg-dpra]] .nr doc-reg-dpra +1 .\} .unformat doc-author-name\n[doc-reg-dpra] .chop doc-author-name\n[doc-reg-dpra] .if (\n[doc-author-count] > 1) \ .nop \)\*[doc-str-dpra] .nop \)\*[doc-author-name\n[doc-reg-dpra]], .. .nr doc-author-count 0 .ds doc-author-name0 .de %A .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%A author_name ... (#\n[.c]) .return .\} .nr doc-author-count +1 .nr doc-reference-count +1 .ds doc-macro-name %A .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .box doc-author-name\n[doc-author-count] .ev doc-env-%A .evc 0 .in 0 .nf .doc-do-references .. .nr doc-book-count 0 .ds doc-book-name .de %B .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%B book_name ... (#\n[.c]) .return .\} .if \n[doc-is-reference] \{\ .nr doc-book-count +1 .nr doc-reference-count +1 .\} .ds doc-macro-name %B .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-is-reference] \{\ .boxa doc-book-name .ev doc-env-%B .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .\} .el \{\ .nop \*[doc-Em-font]\c .doc-print-recursive .\} .. .nr doc-city-count 0 .ds doc-city-name .de %C .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%C city_name ... (#\n[.c]) .return .\} .nr doc-city-count +1 .nr doc-reference-count +1 .ds doc-macro-name %C .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-city-name .ev doc-env-%C .evc 0 .in 0 .nf .doc-do-references .. .nr doc-date-count 0 .ds doc-date .de %D .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%D date ... (#\n[.c]) .return .\} .nr doc-date-count +1 .nr doc-reference-count +1 .ds doc-macro-name %D .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-date .ev doc-env-%D .evc 0 .in 0 .nf .doc-do-references .. .nr doc-publisher-count 0 .ds doc-publisher-name .de %I .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%I issuer/publisher_name ... (#\n[.c]) .return .\} .nr doc-publisher-count +1 .nr doc-reference-count +1 .ds doc-macro-name %I .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-publisher-name .ev doc-env-%I .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .. .nr doc-journal-count 0 .ds doc-journal-name .de %J .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%J journal_name ... (#\n[.c]) .return .\} .nr doc-journal-count +1 .nr doc-reference-count +1 .ds doc-macro-name %J .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-journal-name .ev doc-env-%J .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .. .nr doc-issue-count 0 .ds doc-issue-name .de %N .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%N issue_number ... (#\n[.c]) .return .\} .nr doc-issue-count +1 .nr doc-reference-count +1 .ds doc-macro-name %N .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-issue-name .ev doc-env-%N .evc 0 .in 0 .nf .doc-do-references .. .nr doc-optional-count 0 .ds doc-optional-string .de %O .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%O optional_information ... (#\n[.c]) .return .\} .nr doc-optional-count +1 .nr doc-reference-count +1 .ds doc-macro-name %O .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-optional-string .ev doc-env-%O .evc 0 .in 0 .nf .doc-do-references .. .nr doc-page-number-count 0 .ds doc-page-number-string .de %P .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%P page_number ... (#\n[.c]) .return .\} .nr doc-page-number-count +1 .nr doc-reference-count +1 .ds doc-macro-name %P .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-page-number-string .ev doc-env-%P .evc 0 .in 0 .nf .doc-do-references .. .nr doc-corporate-count 0 .ds doc-corporate-name .de %Q .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c]) .return .\} .nr doc-corporate-count +1 .nr doc-reference-count +1 .ds doc-macro-name %Q .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-corporate-name .ev doc-env-%Q .evc 0 .in 0 .nf .doc-do-references .. .nr doc-report-count 0 .ds doc-report-name .de %R .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%R reference_report ... (#\n[.c]) .return .\} .nr doc-report-count +1 .nr doc-reference-count +1 .ds doc-macro-name %R .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-report-name .ev doc-env-%R .evc 0 .in 0 .nf .doc-do-references .. .nr doc-reference-title-count 0 .ds doc-reference-title-name .ds doc-reference-title-name-for-book .de %T .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%T reference_title ... (#\n[.c]) .return .\} .if \n[doc-is-reference] \{\ .nr doc-reference-title-count +1 .nr doc-reference-count +1 .\} .ds doc-macro-name %T .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-is-reference] \{\ .boxa doc-reference-title-name-for-book .ev doc-env-%T .evc 0 .in 0 .nf .nop \*[doc-No-font]\c .doc-do-references .ds doc-macro-name %T .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-reference-title-name .ev doc-env-%T .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .\} .el \{\ .nop \*[doc-Em-font]\c .doc-print-recursive .\} .. .nr doc-url-count 0 .ds doc-url-name .nr doc-volume-count 0 .ds doc-volume-name .de %U .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%U URL ... (#\n[.c]) .return .\} .nr doc-url-count +1 .nr doc-reference-count +1 .ds doc-macro-name %U .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-url-name .ev doc-env-%U .evc 0 .in 0 .nf .doc-do-references .. .de %V .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%V volume ... (#\n[.c]) .return .\} .nr doc-volume-count +1 .nr doc-reference-count +1 .ds doc-macro-name %V .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-volume-name .ev doc-env-%V .evc 0 .in 0 .nf .doc-do-references .. .de doc-do-references .if !\n[doc-is-reference] \ .tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c]) .nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]] .ie (\n[doc-reg-ddr1] == 1) \{\ .doc-append-arg \c 3 .\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\ .br .ev .boxa .doc-reset-args .\} .el \{\ .nr doc-reg-ddr \n[doc-arg-ptr] .nr doc-arg-ptr +1 .nop \)\*[doc-space\n[doc-reg-ddr]]\c .doc-do-references .\}\} .. .de Hf .ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\ .doc-paragraph .nop File: .Pa \$1 .Bd -literal .so \$1 .Ed .doc-paragraph .\} .el \ .Usage: .Hf file (#\n[.c]) .. .nr doc-have-author 0 .de An .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ie "\$1"-nosplit" \ .nr doc-in-authors-section 0 .el \{ .ie "\$1"-split" \ .nr doc-in-authors-section 1 .el \{\ .ds doc-macro-name An .doc-parse-args \$@ .\}\}\} .el \{\ .tm1 "Usage: .An {-nosplit | -split} .tm1 " .An author_name ... (#\n[.c]) .\}\} .if \n[doc-in-authors-section] \{\ .ie \n[doc-have-author] \ .br .el \ .nr doc-have-author 1 .\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .doc-print-recursive .\} .el \{\ .tm Usage: .An author_name ... (#\n[.c]) .doc-reset-args .\}\} .. .ds doc-str-Rv-std-prefix "The .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful; .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-std-suffix " is set to indicate the error. .ds doc-str-Rv-stds-prefix "The .ds doc-str-Rv-stds-and "and .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful; .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-stds-suffix " is set to indicate the error. .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned; .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-std0 " is set to indicate the error. .de Rv .if \n[doc-arg-limit] \{\ .tm Usage: .Rv not callable by other macros (#\n[.c]) .doc-reset-args .return .\} .if !\n[.$] \{\ .tm Usage: .Rv [-std] [<function> ...] (#\n[.c]) .return .\} .if "\$1"-std" \{\ .nr doc-reg-Rv \*[doc-section] .if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \ .tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c]) .br .shift .ie (\n[.$] > 1) \{\ .nop \)\*[doc-str-Rv-stds-prefix] .nr doc-reg-Rv 1 .while (\n[doc-reg-Rv] < \n[.$]) \{\ .ie (\n[.$] > 2) \ .Fn \$\n[doc-reg-Rv] , .el \ .Fn \$\n[doc-reg-Rv] .nr doc-reg-Rv +1 .\} .nop \)\*[doc-str-Rv-stds-and] .Fn \$\n[.$] .nop \)\*[doc-str-Rv-stds-suffix] .\} .el \{ .ie (\n[.$] == 1) \{\ .nop \)\*[doc-str-Rv-std-prefix] .Fn \$1 .nop \)\*[doc-str-Rv-std-suffix] .\} .el \{\ .nop \)\*[doc-str-Rv-std0] .\}\}\} .. .ds doc-str-Ex-std-prefix "The .ds doc-str-Ex-std-suffix "utility exits\~0 on success, .as doc-str-Ex-std-suffix " and\~>0 if an error occurs. .ds doc-str-Ex-stds-prefix "The .als doc-str-Ex-stds-and doc-str-Rv-stds-and .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success, .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs. .de Ex .if \n[doc-arg-limit] \{\ .tm Usage: .Ex not callable by other macros (#\n[.c]) .doc-reset-args .return .\} .if !\n[.$] \{\ .tm Usage: .Ex [-std] [<utility> ...] (#\n[.c]) .return .\} .if "\$1"-std" \{\ .nr doc-reg-Ex \*[doc-section] .if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \ .tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c]) .br .shift .ie (\n[.$] > 1) \{\ .nop \)\*[doc-str-Ex-stds-prefix] .nr doc-reg-Ex 1 .while (\n[doc-reg-Ex] < \n[.$]) \{\ .ie (\n[.$] > 2) \ .Nm \$\n[doc-reg-Ex] , .el \ .Nm \$\n[doc-reg-Ex] .nr doc-reg-Ex +1 .\} .nop \)\*[doc-str-Ex-stds-and] .Nm \$\n[.$] .nop \)\*[doc-str-Ex-stds-suffix] .\} .el \{\ .nop \)\*[doc-str-Ex-std-prefix] .Nm \$1 .nop \)\*[doc-str-Ex-std-suffix] .\}\} .. .de Mt .Pa \$@ .. .de Lk .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Lk .doc-parse-args \$@ .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ds doc-target-Lk "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .nr doc-lasttext-Lk \n[doc-arg-limit] .while (\n[doc-lasttext-Lk] >= \n[doc-arg-ptr]) \{\ .if !(\n[doc-type\n[doc-lasttext-Lk]] == 3) \ .break .nr doc-lasttext-Lk -1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .if (\n[doc-arg-ptr] <= \n[doc-lasttext-Lk]) \{\ .nop \*[doc-Em-font]\c .while (\n[doc-arg-ptr] < \n[doc-lasttext-Lk]) \{\ .nop \&\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .\} .nop \&\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]: .nr doc-arg-ptr +1 .\} .nop \*[doc-Sy-font]\*[doc-target-Lk]\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .while (\n[doc-arg-ptr] <= \n[doc-arg-limit]) \{\ .nop \&\*[doc-arg\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .\} .nop \& .doc-reset-args .. .de doc-defunct-macro .tmc mdoc error: .\$0 defunct .if d doc-\$0-usage \ .tmc , \*[doc-\$0-usage] .tm1 " (#\n[.c]) .. .als Db doc-defunct-macro .als Ds doc-defunct-macro .als Or doc-defunct-macro .ds doc-Or-usage use '|' .als Sf doc-defunct-macro .ds doc-Sf-usage use .Pf or .Ns .rn em e@ .de em .tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c]) .tm1 " Should this have been '.Em ...'? .ab .. .de doc-empty-line .if !\n[doc-display-depth] \ .tm mdoc warning: Empty input line #\n[.c] .sp .. .blm doc-empty-line .ec .if '\*[.T]'utf8' \{\ .rchar \- - ' ` .char \- \N'45' .char - \N'45' .char ' \N'39' .char ` \N'96' .\} .mso mdoc.local