1 .\" Copyright (c) 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\" must display the following acknowledgement:
14 .\" This product includes software developed by the University of
15 .\" California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\" may be used to endorse or promote products derived from this software
18 .\" without specific prior written permission.
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .\" @(#)doc 8.1 (Berkeley) 06/08/93
34 .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
35 .\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
36 .\" `tmac.doc-common' would be too long); when using groff, the doc-* files
37 .\" are loaded using the `mso' request.
41 .\" Werner LEMBERG <wl@gnu.org> and
42 .\" Ruslan Ermilov <ru@freebsd.org>
44 .\" to make it more readable: using long names and many groff features,
45 .\" updating and extending documentation, etc.
51 . ab This version of mdoc can be run with GNU troff only!
60 .if (\n[.x]\n[.y] < 118) \
61 . ab You need GNU troff version 1.18 or higher to run this version of mdoc!
64 .\" Load start-up files
66 . mso mdoc/doc-ditroff
77 .\" NS doc-macro-name global string
78 .\" NS name of calling request (set in each user-requestable macro)
81 .als doc-arg0 doc-macro-name
84 .\" NS doc-arg-limit global register
85 .\" NS total number of arguments
90 .\" NS doc-num-args global register
91 .\" NS number of arguments to handle (must be set to \n[.$] prior to
92 .\" NS `doc-parse-arg-vector' request)
97 .\" NS doc-arg-ptr global register
98 .\" NS argument pointer
103 .\" NS doc-argXXX global string
104 .\" NS argument vector
112 .\" NS doc-typeXXX global register
113 .\" NS argument type vector (macro=1, string=2, punctuation suffix=3,
114 .\" NS punctuation prefix=4)
122 .\" NS doc-spaceXXX global string
131 .\" NS doc-parse-args macro
132 .\" NS parse arguments (recursively) (`.doc-parse-args arg ...')
141 .\" NS doc-have-space
143 .\" NS local variables:
149 . if !\n[doc-arg-limit] \
152 . nr doc-have-space 0
157 . nr doc-arg-limit +1
159 . \" handle `|' and `...' specially
161 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
162 . el \{ .ie "\$1"..." \
163 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
165 . ds doc-arg\n[doc-arg-limit] "\$1
168 . \" get argument type and set spacing
169 . doc-get-arg-type* \n[doc-arg-limit]
170 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
171 . doc-set-spacing-\n[doc-arg-type]
173 . \" check whether we have processed the last parameter
185 .\" NS doc-parse-arg-vector macro
186 .\" NS parse argument vector (recursive)
188 .\" NS cf. comments in doc-parse-args
198 .\" NS local variables:
203 .de doc-parse-arg-vector
204 . if !\n[doc-arg-limit] \
207 . nr doc-arg-limit +1
209 . ie "\*[doc-arg\n[doc-arg-limit]]"|" \
210 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
211 . el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
212 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
215 . doc-get-arg-type* \n[doc-arg-limit]
216 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
217 . doc-set-spacing-\n[doc-arg-type]
219 . ie (\n[doc-num-args] == 1) \{\
225 . doc-parse-arg-vector
232 .\" NS doc-parse-space-vector macro
233 .\" NS parse space vector (recursive)
240 .de doc-parse-space-vector
241 . nr doc-arg-limit +1
243 . doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
245 . ie (\n[doc-num-args] == 1) \
249 . doc-parse-space-vector
254 .\" NS doc-remaining-args macro
255 .\" NS output remaining arguments as-is, separated by spaces (until
256 .\" NS `doc-num-args' is exhausted)
262 .de doc-remaining-args
264 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
266 . ie (\n[doc-num-args] == 1) \{\
271 . nop \)\*[doc-space]\c
278 .\" NS doc-append-arg macro
279 .\" NS append one argument to argument vector:
280 .\" NS `.doc-append-arg [arg] [type]'
288 . nr doc-arg-limit +1
289 . ds doc-arg\n[doc-arg-limit] "\$1
290 . nr doc-type\n[doc-arg-limit] \$2
291 . doc-set-spacing-\$2
295 .\" NS doc-print-and-reset macro
296 .\" NS finish input line and clean up argument vectors
298 .de doc-print-and-reset
299 . if \n[doc-space-mode] \
305 .\" NS doc-reset-args macro
306 .\" NS reset argument counters
318 . hy \n[doc-hyphen-flags]
324 .\" NS doc-curr-font global register
325 .\" NS saved current font
327 .nr doc-curr-font \n[.f]
330 .\" NS doc-curr-size global register
331 .\" NS saved current font size
333 .nr doc-curr-size \n[.ps]
339 .\" NS handle flags (appends `-' and prints flags): `.Fl [arg ...]'
345 .\" NS doc-macro-name
347 .\" NS local variables:
348 .\" NS doc-reg-Fl (for communication with doc-flag-recursion)
350 .\" NS width register `Fl' set in doc-common
353 . nr doc-curr-font \n[.f]
354 . nr doc-curr-size \n[.ps]
355 . nop \*[doc-Fl-font]\c
357 . if !\n[doc-arg-limit] \{\
358 . ds doc-macro-name Fl
363 . nop \|\-\|\f[]\s[0]
366 . if !\n[doc-arg-limit] \
370 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
372 . nop \|\-\f[]\s[0]\c
373 . doc-print-and-reset
376 . ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
377 . nop \|\-\f[]\s[0]\c
378 . \*[doc-arg\n[doc-arg-ptr]]
381 . if (\n[doc-type\n[doc-arg-ptr]] == 3) \
390 .\" NS doc-flag-recursion macro
391 .\" NS `Fl' flag recursion routine (special handling)
396 .\" NS local variables:
401 .de doc-flag-recursion
402 . nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
403 . ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
405 . ie (\n[doc-reg-dfr1] == 1) \{\
410 . nr doc-reg-dfr \n[doc-arg-ptr]
412 . ie (\n[doc-reg-dfr1] == 2) \{\
413 . \" handle vertical bar -- doc-reg-Fl is set for the first call of
414 . \" doc-flag-recursion only; we need this to make `.Fl | ...' work
416 . ie "\*[doc-str-dfr]"\*[Ba]" \{\
417 . if \n[doc-reg-Fl] \
418 . nop \|\-\*[doc-space]\c
422 . ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
423 . if \n[doc-reg-Fl] \
424 . nop \|\-\*[doc-space]\c
428 . \" two consecutive hyphen characters?
429 . ie "\*[doc-str-dfr]"-" \
432 . nop \|\%\-\*[doc-str-dfr]\&\c
435 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
436 . nop \)\*[doc-str-dfr]\f[]\s[0]\c
439 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
441 . if (\n[doc-reg-dfr1] == 4) \
444 . doc-print-and-reset
448 . ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
449 . ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
452 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
455 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
459 . doc-flag-recursion \$@
464 .\" NS doc-print-recursive macro
465 .\" NS general name recursion routine (print remaining arguments)
470 .\" NS local variables:
475 .de doc-print-recursive
476 . nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
477 . ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
479 . ie (\n[doc-reg-dpr1] == 1) \{\
480 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
484 . nr doc-reg-dpr \n[doc-arg-ptr]
486 . ie (\n[doc-reg-dpr1] == 2) \
487 . \" the `\%' prevents hyphenation on a dash (`-')
488 . nop \%\*[doc-str-dpr]\&\c
490 . \" punctuation character
491 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
492 . nop \)\*[doc-str-dpr]\f[]\s[0]\c
496 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
498 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
499 . doc-print-and-reset
502 . nop \)\*[doc-space\n[doc-reg-dpr]]\c
503 . doc-print-recursive
508 .\" NS doc-print-prefixes macro
509 .\" NS print leading prefixes
514 .de doc-print-prefixes
515 . while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
516 . if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
518 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
519 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
525 .\" NS doc-generic-macro macro
526 .\" NS this is the skeleton for most simple macros
532 .\" NS doc-macro-name
534 .de doc-generic-macro
535 . if !\n[doc-arg-limit] \{\
537 . ds doc-macro-name \$0
541 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
544 . if !\n[doc-arg-limit] \
548 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
549 . if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
550 . tmc mdoc warning: Using a macro as first argument
551 . tm1 " cancels effect of .\$0 (#\n[.c])
553 . \" the right action here would be to reset the argument counters
554 . \" and bail out -- unfortunately, a small number of manual pages
555 . \" (less than 2% for FreeBSD which has been used for testing)
556 . \" relied on the old behaviour (silently ignore this error),
557 . \" so it is commented out
562 . nr doc-curr-font \n[.f]
563 . nr doc-curr-size \n[.ps]
564 . nop \*[doc-\$0-font]\c
565 . doc-print-recursive
569 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
576 .\" NS command line `argument' macro: `.Ar [args ...]'
582 .\" NS doc-macro-name
584 .\" NS local variable:
585 .\" NS doc-str-Ar-default
587 .\" NS width register `Ar' set in doc-common
589 .ds doc-str-Ar-default "file\ .\|.\|.
592 . nr doc-curr-font \n[.f]
593 . nr doc-curr-size \n[.ps]
594 . nop \*[doc-Ar-font]\c
596 . if !\n[doc-arg-limit] \{\
597 . ds doc-macro-name Ar
602 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
605 . if !\n[doc-arg-limit] \
610 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
611 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
612 . doc-print-and-reset
615 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
616 . \" replace previous argument (Ar) with default value
618 . ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
619 . nr doc-type\n[doc-arg-ptr] 2
620 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
622 . \" recompute space vector for remaining arguments
623 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
624 . nr doc-arg-limit \n[doc-arg-ptr]
625 . doc-parse-space-vector
627 . doc-print-recursive
635 .\" NS width register `Ad' set in doc-common
637 .als Ad doc-generic-macro
638 .ds doc-Ad-usage address
641 .\" NS doc-indent-synopsis global register
642 .\" NS indentation in synopsis
644 .nr doc-indent-synopsis 0
647 .\" NS doc-indent-synopsis-active global register (bool)
648 .\" NS indentation in synopsis active
650 .nr doc-indent-synopsis-active 0
654 .\" NS config declaration (for section 4 SYNOPSIS)
656 .\" NS this function causes a break; it uses the `Nm' font
662 .\" NS doc-indent-synopsis
663 .\" NS doc-macro-name
665 .\" NS width register `Cd' set in doc-common
668 . if !\n[doc-arg-limit] \{\
670 . ds doc-macro-name Cd
674 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
677 . if !\n[doc-arg-limit] \
681 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
682 . nr doc-curr-font \n[.f]
683 . nr doc-curr-size \n[.ps]
685 . ie \n[doc-in-synopsis-section] \{\
686 . if "\*[doc-macro-name]"Cd" \{\
688 . if !\n[doc-indent-synopsis] \
689 . nr doc-indent-synopsis \n[doc-display-indent]u
690 . if !\n[doc-indent-synopsis-active] \
691 . in +\n[doc-indent-synopsis]u
692 . ti -\n[doc-indent-synopsis]u
693 . nop \*[doc-Nm-font]\c
694 . doc-print-recursive
695 . if !\n[doc-indent-synopsis-active] \
696 . in -\n[doc-indent-synopsis]u
699 . nop \*[doc-Nm-font]\c
700 . doc-print-recursive
703 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
710 .\" NS interactive command modifier (flag)
712 .\" NS width register `Cm' set in doc-common
714 .als Cm doc-generic-macro
715 .ds doc-Cm-usage interactive_command_modifier
719 .\" NS defined variable
721 .\" NS this function uses the `Er' font
723 .\" NS width register `Dv' set in doc-common
725 .als Dv doc-generic-macro
726 .ds doc-Dv-usage defined_variable
727 .als doc-Dv-font doc-Er-font
733 .\" NS width register `Em' set in doc-common
735 .als Em doc-generic-macro
736 .ds doc-Em-usage text
742 .\" NS width register `Er' set in doc-common
744 .als Er doc-generic-macro
745 .ds doc-Er-usage text
749 .\" NS environment variable
751 .\" NS width register `Ev' set in doc-common
753 .als Ev doc-generic-macro
754 .ds doc-Ev-usage text
757 .\" NS doc-have-decl global register (bool)
758 .\" NS subroutine test (in synopsis only)
763 .\" NS doc-have-var global register (bool)
764 .\" NS whether last type is a variable type
769 .\" NS doc-do-func-decl macro
770 .\" NS do something special while in SYNOPSIS
779 . if \n[doc-in-synopsis-section] \{\
780 . \" if a variable type was the last thing given, want vertical space
781 . if \n[doc-have-var] \{\
785 . \" if a subroutine was the last thing given, want vertical space
786 . if \n[doc-have-func] \{\
787 . ie \n[doc-have-decl] \
795 . nr doc-curr-font \n[.f]
796 . nr doc-curr-size \n[.ps]
801 .\" NS function declaration -- not callable
803 .\" NS this function causes a break
805 .\" NS width register `Fd' set in doc-common
808 . ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
810 . nop \*[doc-Fd-font]\$*
812 . ft \n[doc-curr-font]
813 . ps \n[doc-curr-size]u
816 . tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
823 .\" NS #include statement - not callable
825 .\" NS this function causes a break; it uses the `Fd' font
827 .\" NS width register `In' set in doc-common
830 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
832 . nop \*[doc-Fd-font]#include <\$1>
834 . ft \n[doc-curr-font]
835 . ps \n[doc-curr-size]u
838 . tm Usage: .In include_file -- In is not callable (#\n[.c])
845 .\" NS function return value
847 .\" NS this function uses the `Ar' font
849 .\" NS width register `Fr' set in doc-common
851 .als Fr doc-generic-macro
852 .ds doc-Fr-usage function_return_value
853 .als doc-Fr-font doc-Ar-font
857 .\" NS interactive command
859 .\" NS width register `Ic' set in doc-common
861 .als Ic doc-generic-macro
862 .ds doc-Ic-usage interactive_command
868 .\" NS width register `Li' set in doc-common
870 .als Li doc-generic-macro
871 .ds doc-Li-usage argument
877 .\" NS this function uses the `Sy' font
879 .\" NS width register `Ms' set in doc-common
881 .als Ms doc-generic-macro
882 .ds doc-Ms-usage math_symbol
883 .als doc-Ms-font doc-Sy-font
886 .\" NS doc-command-name global string
887 .\" NS save first invocation of .Nm
893 .\" NS name of command or page topic
897 .\" NS doc-command-name
900 .\" NS doc-indent-synopsis
901 .\" NS doc-indent-synopsis-active
902 .\" NS doc-macro-name
904 .\" NS width register `Nm' set in doc-common
907 . if !\n[doc-arg-limit] \{\
908 . ds doc-macro-name Nm
912 . ie "\*[doc-command-name]"" \
913 . tm Usage: .Nm name ... (#\n[.c])
915 . doc-parse-args \*[doc-command-name]
918 . if !\n[doc-arg-limit] \
923 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
925 . ie "\*[doc-command-name]"" \{\
926 . tm Usage: .Nm name ... (#\n[.c])
930 . nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
931 . doc-print-and-reset
934 . nr doc-curr-font \n[.f]
935 . nr doc-curr-size \n[.ps]
937 . ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
938 . ie "\*[doc-command-name]"" \
939 . tm Usage: .Nm name ... (#\n[.c])
941 . \" replace previous argument (Nm) with default value
943 . ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
944 . nr doc-type\n[doc-arg-ptr] 2
945 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
947 . \" recompute space vector for remaining arguments
948 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
949 . nr doc-arg-limit \n[doc-arg-ptr]
950 . doc-parse-space-vector
953 . \" handle `.Nm ...' in SYNOPSIS
954 . if \n[doc-in-synopsis-section] \{\
955 . if "\*[doc-macro-name]"Nm" \{\
957 . if !\n[doc-indent-synopsis] \{\
958 . doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
959 . nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
961 . if !\n[doc-indent-synopsis-active] \{\
962 . in +\n[doc-indent-synopsis]u
963 . nr doc-indent-synopsis-active 1
965 . ti -\n[doc-indent-synopsis]u
967 . if "\*[doc-command-name]"" \
968 . ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
970 . nop \*[doc-Nm-font]\c
972 . doc-print-recursive
978 .\" NS pathname: `.Pa [arg ...]'
984 .\" NS doc-macro-name
986 .\" NS width register `Pa' set in doc-common
989 . if !\n[doc-arg-limit] \{\
990 . ds doc-macro-name Pa
995 . nop \*[doc-Pa-font]~\f[]\s[0]
998 . if !\n[doc-arg-limit] \
1002 . doc-print-prefixes
1003 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1004 . nr doc-curr-font \n[.f]
1005 . nr doc-curr-size \n[.ps]
1006 . nop \*[doc-Pa-font]\c
1007 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
1008 . \" replace previous argument (Pa) with default value
1010 . ds doc-arg\n[doc-arg-ptr] ~
1011 . nr doc-type\n[doc-arg-ptr] 2
1012 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
1014 . \" recompute space vector for remaining arguments
1015 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
1016 . nr doc-arg-limit \n[doc-arg-ptr]
1017 . doc-parse-space-vector
1019 . doc-print-recursive
1022 . nop \*[doc-Pa-font]~\f[]\s[0]\c
1023 . doc-print-and-reset
1028 .\" NS Sy user macro
1031 .\" NS width register `Sy' set in doc-common
1033 .als Sy doc-generic-macro
1034 .ds doc-Sy-usage symbolic_text
1037 .\" NS Me user macro
1040 .\" NS width register `Me' set in doc-common
1042 .als Me doc-generic-macro
1043 .ds doc-Me-usage menu_entry
1046 .\" NS Tn user macro
1051 .\" NS doc-curr-font
1052 .\" NS doc-curr-size
1053 .\" NS doc-macro-name
1055 .\" NS width register `Tn' set in doc-common
1058 . if !\n[doc-arg-limit] \{\
1060 . ds doc-macro-name Tn
1061 . doc-parse-args \$@
1064 . tm Usage: .Tn trade_name ... (#\n[.c])
1067 . if !\n[doc-arg-limit] \
1071 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1072 . nr doc-curr-font \n[.f]
1073 . nr doc-curr-size \n[.ps]
1074 . nop \)\*[doc-Tn-font-size]\c
1075 . ie !\n[doc-is-reference] \{\
1076 . nop \)\*[doc-Tn-font-shape]\c
1077 . doc-print-recursive
1083 . tm Usage: .Tn trade_name ... (#\n[.c])
1089 .\" NS Va user macro
1090 .\" NS variable name
1092 .\" NS width register `Va' set in doc-common
1094 .als Va doc-generic-macro
1095 .ds doc-Va-usage variable_name
1098 .\" NS No user macro
1099 .\" NS normal text macro (default text style if mess up)
1101 .\" NS width register `No' set in doc-common
1103 .als No doc-generic-macro
1104 .ds doc-No-usage normal_text
1107 .\" NS doc-quote-left global string
1108 .\" NS left quotation character for `doc-enclose-string' and
1109 .\" NS `doc-enclose-open'
1114 .\" NS doc-quote-right global string
1115 .\" NS right quotation character for `doc-enclose-string' and
1116 .\" NS `doc-enclose-close'
1121 .\" NS Op user macro
1122 .\" NS option expression (i.e., enclose string in square brackets)
1125 .\" NS doc-macro-name
1126 .\" NS doc-quote-left
1127 .\" NS doc-quote-right
1129 .\" NS width register `Op' set in doc-common
1132 . if !\n[doc-arg-limit] \
1133 . ds doc-macro-name Op
1135 . ds doc-quote-left "\*[doc-left-bracket]
1136 . ds doc-quote-right "\*[doc-right-bracket]
1138 . doc-enclose-string \$@
1142 .\" NS Aq user macro
1143 .\" NS enclose string in angle brackets
1146 .\" NS doc-macro-name
1147 .\" NS doc-quote-left
1148 .\" NS doc-quote-right
1150 .\" NS width register `Aq' set in doc-common
1153 . if !\n[doc-arg-limit] \
1154 . ds doc-macro-name Aq
1156 . ds doc-quote-left \[la]
1157 . ds doc-quote-right \[ra]
1159 . doc-enclose-string \$@
1163 .\" NS Bq user macro
1164 .\" NS enclose string in square brackets
1167 .\" NS doc-macro-name
1168 .\" NS doc-quote-left
1169 .\" NS doc-quote-right
1171 .\" NS width register `Bq' set in doc-common
1174 . if !\n[doc-arg-limit] \
1175 . ds doc-macro-name Bq
1177 . ds doc-quote-left "\*[doc-left-bracket]
1178 . ds doc-quote-right "\*[doc-right-bracket]
1180 . doc-enclose-string \$@
1184 .\" NS Brq user macro
1185 .\" NS enclose string in braces
1188 .\" NS doc-macro-name
1189 .\" NS doc-quote-left
1190 .\" NS doc-quote-right
1192 .\" NS width register `Brq' set in doc-common
1195 . if !\n[doc-arg-limit] \
1196 . ds doc-macro-name Brq
1198 . ds doc-quote-left {
1199 . ds doc-quote-right }
1201 . doc-enclose-string \$@
1205 .\" NS Dq user macro
1206 .\" NS enclose string in double quotes
1209 .\" NS doc-macro-name
1210 .\" NS doc-quote-left
1211 .\" NS doc-quote-right
1213 .\" NS width register `Dq' set in doc-common
1216 . if !\n[doc-arg-limit] \
1217 . ds doc-macro-name Dq
1219 . ds doc-quote-left "\*[Lq]
1220 . ds doc-quote-right "\*[Rq]
1222 . doc-enclose-string \$@
1226 .\" NS Eq user macro
1227 .\" NS enclose string in user-defined quotes (args 1 and 2)
1230 .\" NS doc-macro-name
1231 .\" NS doc-quote-left
1232 .\" NS doc-quote-right
1234 .\" NS width register `Eq' set in doc-common
1237 . if !\n[doc-arg-limit] \
1238 . ds doc-macro-name Eq
1240 . ds doc-quote-left "\$1
1241 . ds doc-quote-right "\$2
1244 . doc-enclose-string \$@
1248 .\" NS Pq user macro
1249 .\" NS enclose string in parentheses
1252 .\" NS doc-macro-name
1253 .\" NS doc-quote-left
1254 .\" NS doc-quote-right
1256 .\" NS width register `Pq' set in doc-common
1259 . if !\n[doc-arg-limit] \
1260 . ds doc-macro-name Pq
1262 . ds doc-quote-left "\*[doc-left-parenthesis]
1263 . ds doc-quote-right "\*[doc-right-parenthesis]
1265 . doc-enclose-string \$@
1269 .\" NS Ql user macro
1270 .\" NS quoted literal
1272 .\" is in file doc-[dit|n]roff
1275 .\" NS Qq user macro
1276 .\" NS enclose string in straight double quotes
1279 .\" NS doc-macro-name
1280 .\" NS doc-quote-left
1281 .\" NS doc-quote-right
1283 .\" NS width register `Qq' set in doc-common
1286 . if !\n[doc-arg-limit] \
1287 . ds doc-macro-name Qq
1289 . ds doc-quote-left "\*[q]
1290 . ds doc-quote-right "\*[q]
1292 . doc-enclose-string \$@
1296 .\" NS Sq user macro
1297 .\" NS enclose string in single quotes
1300 .\" NS doc-macro-name
1301 .\" NS doc-quote-left
1302 .\" NS doc-quote-right
1304 .\" NS width register `Sq' set in doc-common
1307 . if !\n[doc-arg-limit] \
1308 . ds doc-macro-name Sq
1310 . ds doc-quote-left "\*[doc-left-singlequote]
1311 . ds doc-quote-right "\*[doc-right-singlequote]
1313 . doc-enclose-string \$@
1317 .\" NS Es user macro
1318 .\" NS set up arguments (i.e., the left and right quotation character as
1319 .\" NS first and second argument) for .En call
1323 .\" NS doc-macro-name
1324 .\" NS doc-quote-left
1325 .\" NS doc-quote-right
1328 . if !\n[doc-arg-limit] \{\
1329 . ie (\n[.$] > 2) \{\
1330 . ds doc-macro-name Es
1331 . doc-parse-args \$@
1334 . ds doc-quote-left "\$1
1335 . ds doc-quote-right "\$2
1338 . if !\n[doc-arg-limit] \
1342 . ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
1344 . ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
1346 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1347 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1349 . doc-print-and-reset
1353 .\" NS doc-have-slot global register (bool)
1354 .\" NS set if `doc-enclose-string' has created a slot for closing
1360 .\" NS doc-enclose-string macro
1361 .\" NS enclose string with given args (e.g. [ and ])
1366 .\" NS doc-have-slot
1368 .\" NS local variables:
1374 .\" NS doc-quote-left
1375 .\" NS doc-quote-right
1377 .de doc-enclose-string
1378 . if \n[doc-in-synopsis-section] \
1379 . doc-set-hard-space
1381 . if !\n[doc-arg-limit] \{\
1383 . doc-parse-args \$@
1385 . nop \)\*[doc-quote-left]\*[doc-quote-right]
1388 . if !\n[doc-arg-limit] \
1391 . nr doc-curr-font \n[.f]
1392 . nr doc-curr-size \n[.ps]
1395 . doc-print-prefixes
1396 . \" the final `\)' prevents hyphenation in case the next character is `\%'
1397 . nop \)\*[doc-quote-left]\)\c
1398 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
1400 . nop \)\*[doc-quote-right]\)\c
1401 . doc-print-and-reset
1404 . \" test whether last arguments are of type closing punctuation
1406 . ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
1407 . nr doc-reg-des (\n[doc-arg-limit] - 1)
1408 . while (\n[doc-type\n[doc-reg-des]] == 3) \
1411 . \" prepend closing delimiter
1413 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1416 . \" test whether last arguments are macros which continue the line
1418 . nr doc-reg-des \n[doc-arg-limit]
1419 . while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
1420 . if !\A
\a\*[doc-arg\n[doc-reg-des]]
\a \
1422 . if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
1427 . \" if there are no trailing macros to be skipped, append argument
1428 . ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
1429 . doc-append-arg "\)\*[doc-quote-right]\)" 3
1431 . \" if a previous call to `doc-enclose-string' has already created
1432 . \" a slot, prepend argument
1433 . ie \n[doc-have-slot] \
1434 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1436 . \" we have to shift all arguments to the right
1438 . nr doc-reg-des1 \n[doc-arg-limit]
1439 . nr doc-reg-des2 (\n[doc-arg-limit] + 1)
1440 . while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
1441 . rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
1442 . rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
1443 . rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
1444 . nr doc-reg-des1 -1
1445 . nr doc-reg-des2 -1
1447 . nr doc-arg-limit +1
1449 . \" finally, insert closing delimiter into the freed slot and
1450 . \" recompute spacing vector
1451 . ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
1452 . nr doc-type\n[doc-reg-des] 3
1453 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
1454 . nr doc-arg-limit (\n[doc-reg-des] - 1)
1455 . doc-parse-space-vector
1456 . nr doc-have-slot 1
1459 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1462 . if \n[doc-in-synopsis-section] \
1463 . doc-set-soft-space
1467 .\" NS En user macro
1468 .\" NS enclose arguments with quotation characters set up with `.Es'
1470 .als En doc-enclose-string
1473 .\" NS Ao user macro
1477 .\" NS doc-macro-name
1478 .\" NS doc-quote-left
1480 .\" NS width register `Ao' set in doc-common
1483 . if !\n[doc-arg-limit] \
1484 . ds doc-macro-name Ao
1486 . ds doc-quote-left \[la]
1488 . doc-enclose-open \$@
1492 .\" NS Ac user macro
1496 .\" NS doc-macro-name
1497 .\" NS doc-quote-right
1499 .\" NS width register `Ac' set in doc-common
1502 . if !\n[doc-arg-limit] \
1503 . ds doc-macro-name Ac
1505 . ds doc-quote-right \[ra]
1507 . doc-enclose-close \$@
1511 .\" NS Bo user macro
1515 .\" NS doc-macro-name
1516 .\" NS doc-quote-left
1518 .\" NS width register `Bo' set in doc-common
1521 . if !\n[doc-arg-limit] \
1522 . ds doc-macro-name Bo
1524 . ds doc-quote-left "\*[doc-left-bracket]
1526 . doc-enclose-open \$@
1530 .\" NS Bc user macro
1531 .\" NS bracket close
1534 .\" NS doc-macro-name
1535 .\" NS doc-quote-right
1537 .\" NS width register `Bc' set in doc-common
1540 . if !\n[doc-arg-limit] \
1541 . ds doc-macro-name Bc
1543 . ds doc-quote-right "\*[doc-right-bracket]
1545 . doc-enclose-close \$@
1549 .\" NS Bro user macro
1553 .\" NS doc-macro-name
1554 .\" NS doc-quote-left
1556 .\" NS width register `Bro' set in doc-common
1559 . if !\n[doc-arg-limit] \
1560 . ds doc-macro-name Bo
1562 . ds doc-quote-left {
1564 . doc-enclose-open \$@
1568 .\" NS Brc user macro
1572 .\" NS doc-macro-name
1573 .\" NS doc-quote-right
1575 .\" NS width register `Brc' set in doc-common
1578 . if !\n[doc-arg-limit] \
1579 . ds doc-macro-name Bc
1581 . ds doc-quote-right }
1583 . doc-enclose-close \$@
1587 .\" NS Do user macro
1588 .\" NS double quote open
1591 .\" NS doc-macro-name
1592 .\" NS doc-quote-left
1594 .\" NS width register `Do' set in doc-common
1597 . if !\n[doc-arg-limit] \
1598 . ds doc-macro-name Do
1600 . ds doc-quote-left "\*[Lq]
1602 . doc-enclose-open \$@
1606 .\" NS Dc user macro
1607 .\" NS double quote close
1610 .\" NS doc-macro-name
1611 .\" NS doc-quote-right
1613 .\" NS width register `Dc' set in doc-common
1616 . if !\n[doc-arg-limit] \
1617 . ds doc-macro-name Dc
1619 . ds doc-quote-right "\*[Rq]
1621 . doc-enclose-close \$@
1625 .\" NS Eo user macro
1626 .\" NS enclose open (using first argument as beginning of enclosure)
1629 .\" NS doc-macro-name
1630 .\" NS doc-quote-left
1632 .\" NS width register `Eo' set in doc-common
1635 . if !\n[doc-arg-limit] \
1636 . ds doc-macro-name Eo
1638 . ds doc-quote-left "\$1
1641 . doc-enclose-open \$@
1645 .\" NS Ec user macro
1646 .\" NS enclose close (using first argument as end of enclosure)
1649 .\" NS doc-macro-name
1650 .\" NS doc-quote-right
1652 .\" NS width register `Ec' set in doc-common
1655 . if !\n[doc-arg-limit] \
1656 . ds doc-macro-name Ec
1658 . ds doc-quote-right "\$1
1661 . doc-enclose-close \$@
1665 .\" NS Oo user macro
1669 .\" NS doc-macro-name
1670 .\" NS doc-quote-left
1672 .\" NS width register `Oo' set in doc-common
1675 . if !\n[doc-arg-limit] \
1676 . ds doc-macro-name Oo
1678 . ds doc-quote-left [
1680 . doc-enclose-open \$@
1684 .\" NS Oc user macro
1688 .\" NS doc-macro-name
1689 .\" NS doc-quote-right
1691 .\" NS width register `Oc' set in doc-common
1694 . if !\n[doc-arg-limit] \
1695 . ds doc-macro-name Oc
1697 . ds doc-quote-right ]
1699 . doc-enclose-close \$@
1703 .\" NS Po user macro
1704 .\" NS parenthesis open
1707 .\" NS doc-macro-name
1708 .\" NS doc-quote-left
1710 .\" NS width register `Po' set in doc-common
1713 . if !\n[doc-arg-limit] \
1714 . ds doc-macro-name Po
1716 . ds doc-quote-left "\*[doc-left-parenthesis]
1718 . doc-enclose-open \$@
1722 .\" NS Pc user macro
1723 .\" NS parenthesis close
1726 .\" NS doc-macro-name
1727 .\" NS doc-quote-right
1729 .\" NS width register `Pc' set in doc-common
1732 . if !\n[doc-arg-limit] \
1733 . ds doc-macro-name Pc
1735 . ds doc-quote-right "\*[doc-right-parenthesis]
1737 . doc-enclose-close \$@
1741 .\" NS Qo user macro
1742 .\" NS straight double quote open
1745 .\" NS doc-macro-name
1746 .\" NS doc-quote-left
1748 .\" NS width register `Qo' set in doc-common
1751 . if !\n[doc-arg-limit] \
1752 . ds doc-macro-name Qo
1754 . ds doc-quote-left "\*[q]
1756 . doc-enclose-open \$@
1760 .\" NS Qc user macro
1761 .\" NS straight double quote close
1764 .\" NS doc-macro-name
1765 .\" NS doc-quote-right
1767 .\" NS width register `Qc' set in doc-common
1770 . if !\n[doc-arg-limit] \
1771 . ds doc-macro-name Qc
1773 . ds doc-quote-right "\*[q]
1775 . doc-enclose-close \$@
1779 .\" NS So user macro
1780 .\" NS single quote open
1783 .\" NS doc-macro-name
1784 .\" NS doc-quote-left
1786 .\" NS width register `So' set in doc-common
1789 . if !\n[doc-arg-limit] \
1790 . ds doc-macro-name So
1792 . ds doc-quote-left "\*[doc-left-singlequote]
1794 . doc-enclose-open \$@
1798 .\" NS Sc user macro
1799 .\" NS single quote close
1802 .\" NS doc-macro-name
1803 .\" NS doc-quote-right
1805 .\" NS width register `Sc' set in doc-common
1808 . if !\n[doc-arg-limit] \
1809 . ds doc-macro-name Sc
1811 . ds doc-quote-right "\*[doc-right-singlequote]
1813 . doc-enclose-close \$@
1817 .\" NS Xo user macro
1821 .\" NS doc-macro-name
1822 .\" NS doc-quote-left
1824 .\" NS width register `Xo' set in doc-common
1827 . if !\n[doc-arg-limit] \
1828 . ds doc-macro-name Xo
1832 . doc-enclose-open \$@
1836 .\" NS Xc user macro
1840 .\" NS doc-macro-name
1841 .\" NS doc-quote-right
1843 .\" NS width register `Xc' set in doc-common
1846 . if !\n[doc-arg-limit] \
1847 . ds doc-macro-name Xc
1849 . ds doc-quote-right
1851 . doc-enclose-close \$@
1855 .\" NS doc-nesting-level global register
1856 .\" NS used by `doc-enclose-open' and `doc-enclose-close'
1858 .nr doc-nesting-level 0
1861 .\" NS doc-in-list global register (bool)
1862 .\" NS whether we are in (logical) .It
1867 .\" NS doc-enclose-open macro
1868 .\" NS enclose string open
1872 .\" NS doc-nesting-level
1874 .de doc-enclose-open
1875 . if !\n[doc-arg-limit] \
1876 . doc-parse-args \$@
1879 . doc-print-prefixes
1882 . nop \)\*[doc-quote-left]\)\c
1884 . \" start enclosure box
1885 . box doc-enclosure-box\n[doc-nesting-level]
1886 . ev doc-enclosure-env\n[doc-nesting-level]
1890 . \" we insert something to make .chop always work
1893 . \" increase nesting level *after* parsing of arguments
1894 . nr doc-nesting-level +1
1896 . if \n[doc-arg-limit] \{\
1898 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1899 . doc-print-recursive
1906 .\" NS doc-enclose-close macro
1907 .\" NS enclose string close
1910 .\" NS doc-nesting-level
1912 .de doc-enclose-close
1913 . nr doc-nesting-level -1
1915 . \" finish enclosure box
1919 . chop doc-enclosure-box\n[doc-nesting-level]
1920 . unformat doc-enclosure-box\n[doc-nesting-level]
1923 . nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
1924 . nop \)\*[doc-quote-right]\)\c
1926 . if !\n[doc-arg-limit] \{\
1927 . doc-parse-args \$@
1930 . doc-print-and-reset
1933 . if \n[doc-arg-limit] \{\
1934 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
1935 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
1937 . doc-print-recursive
1940 . doc-print-and-reset
1943 . \" shall we finish .It macro?
1944 . if !"\*[doc-macro-name]"It" \
1945 . if \n[doc-in-list] \
1946 . if !\n[doc-nesting-level] \
1947 . doc-\*[doc-list-type-stack\n[doc-list-depth]]
1951 .\" NS Pf user macro
1952 .\" NS prefix: `.Pf prefix arg ...'
1956 .\" NS doc-macro-name
1957 .\" NS doc-quote-left
1959 .\" NS width register `Pf' set in doc-common
1962 . if !\n[doc-arg-limit] \
1963 . ds doc-macro-name Pf
1965 . ie \n[doc-arg-limit] \{\
1966 . ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
1968 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
1971 . tm mdoc warning: .Pf: trailing prefix (#\n[.c])
1977 . doc-parse-args \$@
1979 . tm mdoc warning: .Pf: missing arguments (#\n[.c])
1983 . if \n[doc-arg-limit] \{\
1985 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
1986 . doc-print-and-reset
1988 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1993 .\" NS Ns user macro
1994 .\" NS remove space (space removal done by `doc-parse-args')
1998 .\" NS doc-macro-name
2000 .\" NS width register `Ns' set in doc-common
2003 . if !\n[doc-arg-limit] \{\
2005 . ds doc-macro-name Ns
2006 . doc-parse-args \$@
2009 . tm Usage: .Ns must be called with arguments (#\n[.c])
2012 . if \n[doc-arg-limit] \{\
2014 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2015 . doc-print-recursive
2022 .\" NS Ap user macro
2023 .\" NS append an apostrophe
2025 .\" NS width register `Ap' set in doc-common
2028 . ie !\n[doc-arg-limit] \
2029 . tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
2033 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2034 . doc-print-recursive
2041 .\" NS doc-space global string
2042 .\" NS current inter-argument space
2044 .ds doc-space "\*[doc-soft-space]
2047 .\" NS doc-soft-space constant string
2048 .\" NS soft (stretchable) space (defined in doc-common)
2051 .\" NS doc-hard-space constant string
2052 .\" NS hard (unpaddable) space (defined in doc-common)
2055 .\" NS doc-set-hard-space macro
2056 .\" NS set current space string to hard (unpaddable) space.
2059 .\" NS doc-saved-space
2062 .de doc-set-hard-space
2063 . ie "\*[doc-space]"" \
2064 . ds doc-saved-space "\*[doc-hard-space]
2066 . ds doc-space "\*[doc-hard-space]
2070 .\" NS doc-set-soft-space macro
2071 .\" NS set current space string to soft space
2074 .\" NS doc-saved-space
2077 .de doc-set-soft-space
2078 . ie "\*[doc-space]"" \
2079 . ds doc-saved-space "\*[doc-soft-space]
2081 . ds doc-space "\*[doc-soft-space]
2085 .\" NS doc-space-mode global register (bool)
2086 .\" NS default is one (space mode on)
2088 .nr doc-space-mode 1
2091 .\" NS doc-saved-space global string
2092 .\" NS saved value of `doc-space'
2094 .ds doc-saved-space "\*[doc-space]
2097 .\" NS doc-have-space global register (bool)
2098 .\" NS set if last command was horizontal space
2100 .nr doc-have-space 0
2103 .\" NS Sm user macro
2104 .\" NS space mode (`.Sm'/`.Sm on'/`.Sm off')
2106 .\" NS without argument, toggle space mode
2109 .\" NS doc-arg-limit
2112 .\" NS doc-macro-name
2114 .\" NS doc-saved-space
2116 .\" NS doc-space-mode
2119 .\" NS local variables:
2122 .\" NS width register `Sm' set in doc-common
2125 . ie \n[doc-have-space] \
2130 . if !\n[doc-arg-limit] \{\
2132 . ds doc-macro-name Sm
2133 . doc-parse-args \$@
2136 . ie \n[doc-space-mode] \
2137 . nr doc-space-mode 0
2139 . nr doc-space-mode 1
2142 . if !\n[doc-arg-limit] \
2147 . \" avoid a warning message in case `Sm' is the last parameter
2148 . if !d doc-arg\n[doc-arg-ptr] \
2149 . ds doc-arg\n[doc-arg-ptr]
2151 . ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
2152 . ds doc-space "\*[doc-saved-space]
2153 . nr doc-space-mode 1
2156 . ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
2157 . ds doc-saved-space "\*[doc-space]
2159 . nr doc-space-mode 0
2162 . \" no argument for Sm
2164 . ie \n[doc-space-mode] \
2165 . nr doc-space-mode 0
2167 . nr doc-space-mode 1
2170 . ie \n[doc-space-mode] \{\
2171 . \" recompute space vector for remaining arguments
2172 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
2173 . nr doc-arg-limit \n[doc-arg-ptr]
2174 . if \n[doc-num-args] \
2175 . doc-parse-space-vector
2177 . \" finish line only if it is interrupted and `doc-have-space'
2179 . if \n[doc-reg-Sm] \
2184 . \" reset remaining space vector elements
2185 . nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
2186 . while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
2187 . ds doc-space\n[doc-reg-Sm]
2189 . \" the body of a `while' request must end with the fitting `\}'!
2193 . \" do we have parameters to print?
2194 . ie (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
2195 . \" ignore `.Sm on' and `.Sm off' without additional parameters
2196 . ie (\n[doc-arg-ptr] > 1) \
2197 . doc-print-and-reset
2202 . \" skip `Sm' argument
2204 . doc-print-recursive
2209 .\" NS doc-arg-type immediate register
2210 .\" NS argument type (macro=1, string=2, punctuation suffix=3,
2211 .\" NS punctuation prefix=4)
2216 .\" NS doc-get-arg-type macro
2217 .\" NS get argument type
2219 .\" NS this macro expects the width of the argument in `doc-width'
2224 .de doc-get-arg-type
2227 . if ((\n[doc-width] < 4) & \A
\a\$1
\a) \{\
2228 . ie (\n[doc-width] == 1) \{\
2229 . if r doc-punct\$1 \
2230 . nr doc-arg-type \n[doc-punct\$1]
2240 .\" NS doc-get-arg-type* macro
2241 .\" NS similar to as `doc-get-arg-type' but uses doc-argXXX strings
2243 .\" NS this macro sets the `doc-width' register using the `length' request
2244 .\" NS to get the number of characters in a string literally
2250 .de doc-get-arg-type*
2252 . length doc-width "\*[doc-arg\$1]
2254 . if ((\n[doc-width] < 4) & \A
\a\*[doc-arg\$1]
\a) \{\
2255 . ie (\n[doc-width] == 1) \{\
2256 . if r doc-punct\*[doc-arg\$1] \
2257 . nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
2260 . if r \*[doc-arg\$1] \
2261 . if d \*[doc-arg\$1] \
2267 .\" NS doc-set-spacing-1 macro
2268 .\" NS set spacing for macros
2273 .\" NS local variables:
2274 .\" NS doc-reg-dssfm
2275 .\" NS doc-reg-dssfm1
2277 .de doc-set-spacing-1
2278 . nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
2280 . \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
2282 . ie (\n[doc-reg-dssfm1] == 3) \{\
2283 . if \n[doc-arg-limit] \{\
2284 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2285 . ds doc-space\n[doc-reg-dssfm]
2287 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2290 . \" macros like .Ap and .Ns have value 2 (remove space before and after
2292 . ie (\n[doc-reg-dssfm1] == 2) \{\
2293 . if \n[doc-arg-limit] \{\
2294 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2295 . ds doc-space\n[doc-reg-dssfm]
2297 . ds doc-space\n[doc-arg-limit]
2300 . ds doc-space\n[doc-arg-limit]
2305 .\" NS doc-set-spacing-2 macro
2306 .\" NS set spacing for strings
2311 .de doc-set-spacing-2
2312 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2316 .\" NS doc-set-spacing-3 macro
2317 .\" NS set spacing for punctuation suffixes
2322 .\" NS local variables:
2323 .\" NS doc-reg-dssfps
2325 .de doc-set-spacing-3
2326 . if \n[doc-arg-limit] \{\
2327 . nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
2328 . ds doc-space\n[doc-reg-dssfps]
2331 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2335 .\" NS doc-set-spacing-4 macro
2336 .\" NS set spacing for punctuation prefixes
2341 .de doc-set-spacing-4
2342 . ds doc-space\n[doc-arg-limit]
2346 .\" type switches (on current argument doc-arg-ptr)
2349 .\" NS doc-do-1 macro
2350 .\" NS call request if macro
2353 . \*[doc-arg\n[doc-arg-ptr]]
2357 .\" NS doc-do-2 macro
2358 .\" NS call .doc-print-recursive if string
2360 .als doc-do-2 doc-print-recursive
2363 .\" NS doc-do-3 macro
2364 .\" NS call .doc-print-recursive if punctuation suffix
2366 .als doc-do-3 doc-print-recursive
2369 .\" NS doc-do-4 macro
2370 .\" NS call .doc-print-recursive if punctuation prefix
2372 .als doc-do-4 doc-print-recursive
2375 .\" NS doc-fontmode-depth global register
2376 .\" NS font mode level
2378 .nr doc-fontmode-depth 0
2381 .\" NS doc-fontmode-font-stackXXX global register
2382 .\" NS stack of saved current font values from `Bf' macro
2385 .\" NS doc-fontmode-depth
2387 .nr doc-fontmode-font-stack0 0
2390 .\" NS doc-fontmode-size-stackXXX global register
2391 .\" NS stack of saved current size values from `Bf' macro
2394 .\" NS doc-fontmode-depth
2396 .nr doc-fontmode-size-stack0 0
2399 .\" NS Bf user macro
2400 .\" NS begin font mode (will be begin-mode/end-mode in groff & TeX)
2403 .\" NS doc-fontmode-depth
2404 .\" NS doc-fontmode-font-stackXXX
2405 .\" NS doc-fontmode-size-stackXXX
2406 .\" NS doc-macro-name
2408 .\" NS width register `Bf' set in doc-common
2411 . ds doc-macro-name Bf
2414 . nr doc-fontmode-depth +1
2416 . \" save current font and size
2417 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
2418 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
2421 . nop \*[doc-Em-font]\c
2422 . el \{ .ie "\$1"Li" \
2423 . nop \*[doc-Li-font]\c
2424 . el \{ .ie "\$1"Sy" \
2425 . nop \*[doc-Sy-font]\c
2426 . el \{ .ie "\$1"-emphasis" \
2427 . nop \*[doc-Em-font]\c
2428 . el \{ .ie "\$1"-literal" \
2429 . nop \*[doc-Li-font]\c
2430 . el \{ .ie "\$1"-symbolic" \
2431 . nop \*[doc-Sy-font]\c
2433 . tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
2437 . tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
2441 .\" NS Ef user macro
2442 .\" NS end font mode
2445 .\" NS doc-macro-name
2447 .\" NS width register `Ef' set in doc-common
2450 . ds doc-macro-name Ef
2452 . ie \n[doc-fontmode-depth] \{\
2453 . \" restore saved font and size
2454 . nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
2455 . nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
2457 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
2458 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
2459 . nr doc-fontmode-depth -1
2462 . tm mdoc warning: Extraneous .Ef (#\n[.c])
2466 .\" NS doc-keep-type global register
2467 .\" NS current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
2472 .\" NS Bk user macro
2476 .\" NS doc-keep-type
2477 .\" NS doc-macro-name
2479 .\" NS width register `Bk' set in doc-common
2482 . ds doc-macro-name Bk
2484 . if \n[doc-keep-type] \
2485 . tm .Bk: nesting keeps not implemented yet. (#\n[.c])
2487 . ie "\$1"-lines" \{\
2488 . nr doc-keep-type 2
2489 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2491 . el \{ .ie "\$1"-words" \{\
2492 . nr doc-keep-type 1
2493 . doc-set-hard-space
2495 . el \{ .ie "\$1"" \{\
2497 . nr doc-keep-type 1
2498 . doc-set-hard-space
2501 . tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
2502 . nr doc-keep-type 3
2505 \#. nr doc-nesting-level +1
2509 .\" NS Ek user macro
2513 .\" NS doc-keep-type
2514 .\" NS doc-macro-name
2516 .\" NS width register `Ek' set in doc-common
2519 . ds doc-macro-name Ek
2521 \#. nr doc-nesting-level -1
2524 . tm Usage: .Ek (does not take arguments) (#\n[.c])
2526 . if !\n[doc-keep-type] \
2527 . tm mdoc warning: .Ek found without .Bk before (#\n[.c])
2529 . ie (\n[doc-keep-type] == 1) \
2530 . doc-set-soft-space
2531 . el \{ .if (\n[doc-keep-type] == 2) \
2532 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2535 . nr doc-keep-type 0
2537 \#. if !"\*[doc-out-string]"" \
2538 \#. doc-print-out-string
2542 .\" NS doc-display-depth global register
2543 .\" NS display level
2545 .nr doc-display-depth 0
2548 .\" NS doc-is-compact global register (bool)
2549 .\" NS set if the `compact' keyword is given
2551 .nr doc-is-compact 0
2554 .\" NS doc-display-type-stackXXX global string
2555 .\" NS the display type stack
2558 .\" NS doc-display-depth
2560 .ds doc-display-type-stack0
2563 .\" NS doc-display-indent-stackXXX global register
2564 .\" NS stack of display indentation values
2567 .\" NS doc-display-depth
2569 .nr doc-display-indent-stack0 0
2572 .\" NS doc-display-ad-stackXXX global register
2573 .\" NS stack of saved adjustment modes
2576 .\" NS doc-display-depth
2578 .nr doc-display-ad-stack0 0
2581 .\" NS doc-display-fi-stackXXX global register
2582 .\" NS stack of saved fill modes
2585 .\" NS doc-display-depth
2587 .nr doc-display-fi-stack0 0
2590 .\" NS doc-display-ft-stackXXX global register
2591 .\" NS stack of saved fonts
2594 .\" NS doc-display-depth
2596 .nr doc-display-ft-stack0 0
2599 .\" NS doc-display-ps-stackXXX global register
2600 .\" NS stack of saved font sizes
2603 .\" NS doc-display-depth
2605 .nr doc-display-ps-stack0 0
2608 .\" NS Bd user macro
2609 .\" NS begin display
2611 .\" NS width register `Bd' set in doc-common
2614 .\" NS doc-curr-font
2615 .\" NS doc-curr-size
2616 .\" NS doc-display-depth
2617 .\" NS doc-display-ad-stackXXX
2618 .\" NS doc-display-fi-stackXXX
2619 .\" NS doc-display-ft-stackXXX
2620 .\" NS doc-display-ps-stackXXX
2621 .\" NS doc-display-file
2622 .\" NS doc-display-indent-stackXXX
2623 .\" NS doc-display-type-stackXXX
2624 .\" NS doc-is-compact
2625 .\" NS doc-macro-name
2627 .\" NS local variables:
2631 . ds doc-macro-name Bd
2634 . tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
2635 . tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c])
2639 . nr doc-is-compact 0
2640 . ds doc-display-file
2642 . nr doc-display-depth +1
2644 . \" save current adjustment and fill modes
2645 . nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
2646 . nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
2648 . ie "\$1"-literal" \{\
2649 . ds doc-display-type-stack\n[doc-display-depth] literal
2650 . nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
2651 . nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
2654 . nop \*[doc-Li-font]\c
2661 . el \{ .ie "\$1"-filled" \{\
2662 . ds doc-display-type-stack\n[doc-display-depth] filled
2666 . el \{ .ie "\$1"-ragged" \{\
2667 . ds doc-display-type-stack\n[doc-display-depth] ragged
2671 . el \{ .ie "\$1"-centered" \{\
2672 . ds doc-display-type-stack\n[doc-display-depth] centered
2676 . el \{ .ie "\$1"-unfilled" \{\
2677 . ds doc-display-type-stack\n[doc-display-depth] unfilled
2681 . tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
2682 . tm1 " in .Bd macro (#\n[.c])
2686 . \" have we seen an argument?
2687 . if \n[doc-reg-Bd] \{\
2689 . \" check other arguments
2691 . doc-do-Bd-args \$@
2694 . \" avoid warning about non-existent register
2695 . if !r doc-display-indent-stack\n[doc-display-depth] \
2696 . nr doc-display-indent-stack\n[doc-display-depth] 0
2698 . if \n[doc-display-indent-stack\n[doc-display-depth]] \
2699 . in +\n[doc-display-indent-stack\n[doc-display-depth]]u
2701 . if !\n[doc-is-compact] \
2702 . sp \n[doc-display-vertical]u
2707 . if !"\*[doc-display-file]"" \
2708 . so \*[doc-display-file]
2710 . nr doc-is-compact 0
2711 . ds doc-display-file
2715 .\" NS doc-do-Bd-args macro
2716 .\" NS resolve remaining .Bd arguments
2719 .\" NS doc-display-file
2720 .\" NS doc-display-indent-stackXXX
2721 .\" NS doc-is-compact
2723 .\" NS local variables:
2725 .\" NS doc-reg-ddBa1
2726 .\" NS doc-reg-ddBa2
2727 .\" NS doc-reg-ddBa3
2728 .\" NS doc-reg-ddBa4
2734 . ie "\$1"-offset" \{\
2738 . nr doc-display-indent-stack\n[doc-display-depth] 0
2739 . el \{ .ie "\$2"right" \
2740 . nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
2741 . el \{ .ie "\$2"center" \
2742 . nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
2743 . el \{ .ie "\$2"indent" \
2744 . nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
2745 . el \{ .ie "\$2"indent-two" \
2746 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
2751 . \" not a known keyword
2752 . if (\n[doc-reg-ddBa] == 1) \{\
2755 . nr doc-reg-ddBa1 0
2756 . if \B
\a(\$2)
\a \{\
2757 . \" disable warnings related to scaling indicators (32)
2758 . nr doc-reg-ddBa2 \n[.warn]
2759 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
2761 . \" values without a scaling indicator are taken as strings;
2762 . \" we test whether the parameter string with and without the last
2763 . \" character yields identical numerical results (ignoring the
2764 . \" scaling indicator)
2765 . ds doc-str-ddBa "\$2
2766 . substring doc-str-ddBa 0 -2
2767 . if \B
\a(\*[doc-str-ddBa])
\a \{\
2768 . nr doc-reg-ddBa3 (;(\$2))
2769 . nr doc-reg-ddBa4 (\*[doc-str-ddBa])
2770 . if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
2771 . nr doc-reg-ddBa1 1
2774 . \" enable all warnings again
2775 . warn \n[doc-reg-ddBa2]
2778 . ie \n[doc-reg-ddBa1] \
2779 . nr doc-display-indent-stack\n[doc-display-depth] \$2
2781 . doc-get-width "\$2"
2782 . ie (\n[doc-width] <= 3) \{\
2783 . \" if the offset parameter is a macro, use the macro's
2784 . \" width as specified in doc-common
2785 . doc-get-arg-type "\$2"
2786 . ie (\n[doc-arg-type] == 1) \
2787 . nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
2789 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2792 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2795 . el \{ .ie "\$1"-compact" \
2796 . nr doc-is-compact 1
2797 . el \{ .ie "\$1"-file" \{\
2799 . ds doc-display-file "\$2
2803 . tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
2806 . tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
2809 . if (\n[doc-reg-ddBa] < \n[.$]) \{\
2810 . shift \n[doc-reg-ddBa]
2811 . doc-do-Bd-args \$@
2816 .\" NS Ed user macro
2820 .\" NS doc-display-depth
2821 .\" NS doc-display-indent-stackXXX
2822 .\" NS doc-display-type-stackXXX
2823 .\" NS doc-macro-name
2825 .\" NS width register `Ed' set in doc-common
2828 . ds doc-macro-name Ed
2832 . if !\n[doc-display-depth] \{\
2833 . tm mdoc warning: Extraneous .Ed (#\n[.c])
2834 . nr doc-display-depth 1
2837 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
2838 . ft \n[doc-display-ft-stack\n[doc-display-depth]]
2839 . ps \n[doc-display-ps-stack\n[doc-display-depth]]u
2842 . in -\n[doc-display-indent-stack\n[doc-display-depth]]u
2844 . \" restore saved adjustment and fill modes
2845 . ie \n[doc-display-fi-stack\n[doc-display-depth]] \
2849 . ad \n[doc-display-ad-stack\n[doc-display-depth]]
2851 . nr doc-display-indent-stack\n[doc-display-depth] 0
2852 . ds doc-display-type-stack\n[doc-display-depth]
2853 . nr doc-display-depth -1
2857 .\" NS doc-list-type-stackXXX global string
2858 .\" NS stack of list types
2861 .\" NS doc-list-depth
2863 .ds doc-list-type-stack1
2866 .\" NS doc-list-indent-stackXXX global register
2867 .\" NS stack of list indentation values
2870 .\" NS doc-list-depth
2872 .nr doc-list-indent-stack1 0
2875 .\" NS doc-list-have-indent-stackXXX global register (bool)
2876 .\" NS an indentation value is active
2879 .\" NS doc-list-depth
2881 .nr doc-list-have-indent-stack1 0
2884 .\" NS Bl user macro
2887 .\" NS width register `Bl' set in doc-common
2892 .\" NS doc-list-depth
2893 .\" NS doc-list-have-indent-stackXXX
2894 .\" NS doc-list-indent-stackXXX
2895 .\" NS doc-list-type-stackXXX
2896 .\" NS doc-macro-name
2898 .\" NS doc-num-columns
2900 .\" NS local variables:
2909 . ds doc-macro-name Bl
2910 . nr doc-list-depth +1
2913 . ie "\$1"-hang" \{\
2914 . ds doc-list-type-stack\n[doc-list-depth] hang-list
2915 . nr doc-list-indent-stack\n[doc-list-depth] 6n
2916 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2918 . el \{ .ie "\$1"-tag" \{\
2919 . ds doc-list-type-stack\n[doc-list-depth] tag-list
2920 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2922 . el \{ .ie "\$1"-item" \{\
2923 . ds doc-list-type-stack\n[doc-list-depth] item-list
2924 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2926 . el \{ .ie "\$1"-enum" \{\
2927 . ds doc-list-type-stack\n[doc-list-depth] enum-list
2928 . nr doc-list-indent-stack\n[doc-list-depth] 3n
2929 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2931 . el \{ .ie "\$1"-bullet" \{\
2932 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
2933 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2934 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2936 . el \{ .ie "\$1"-dash" \{\
2937 . ds doc-list-type-stack\n[doc-list-depth] dash-list
2938 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2939 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2941 . el \{ .ie "\$1"-hyphen" \{\
2942 . ds doc-list-type-stack\n[doc-list-depth] dash-list
2943 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2944 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2946 . el \{ .ie "\$1"-inset" \{\
2947 . ds doc-list-type-stack\n[doc-list-depth] inset-list
2948 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2950 . el \{ .ie "\$1"-diag" \{\
2951 . ds doc-list-type-stack\n[doc-list-depth] diag-list
2953 . el \{ .ie "\$1"-ohang" \{\
2954 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
2955 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2957 . el \{ .ie "\$1"-column" \{\
2958 . ds doc-list-type-stack\n[doc-list-depth] column-list
2962 . tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
2963 . tm1 " in .Bl macro
2966 . \}\}\}\}\}\}\}\}\}\}\}
2968 . \" we have seen a list type
2969 . if !\n[doc-arg-ptr] \{\
2972 . nr doc-list-depth -1
2978 . \" fill argument vector
2980 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
2981 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
2982 . \" dummy type and space so that doc-save-global-vars() doesn't warn
2983 . nr doc-type\n[doc-reg-Bl] 0
2984 . ds doc-space\n[doc-reg-Bl]
2988 . doc-increment-list-stack
2991 . nr doc-arg-limit \n[.$]
2995 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
2997 . \" initialize column list
2998 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
2999 . doc-set-column-tab \n[doc-num-columns]
3000 ' in -\n[doc-column-indent-width]u
3001 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3002 . sp \n[doc-display-vertical]u
3005 . nr doc-num-columns 0
3012 .\" NS doc-Bl-usage macro
3015 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3016 . tm1 " [-width <string>]
3017 . tm1 " [-offset <string>] [-compact]
3018 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3019 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3020 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3024 .\" NS doc-do-Bl-args macro
3025 .\" NS resolve remaining .Bl arguments
3030 .\" NS doc-compact-list-stackXXX
3031 .\" NS doc-list-indent-stackXXX
3032 .\" NS doc-list-offset-stackXXX
3033 .\" NS doc-num-columns
3034 .\" NS doc-tag-prefix-stackXXX
3035 .\" NS doc-tag-width-stackXXX
3037 .\" NS local variables:
3041 .\" NS doc-reg-dBla1
3042 .\" NS doc-reg-dBla2
3043 .\" NS doc-reg-dBla3
3044 .\" NS doc-reg-dBla4
3046 .\" NS doc-str-dBla1
3051 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
3054 . \" avoid a warning message in case e.g. `-offset' has no parameter
3055 . nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
3056 . if !d doc-arg\n[doc-reg-dBla] \
3057 . ds doc-arg\n[doc-reg-dBla]
3061 . ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
3062 . nr doc-compact-list-stack\n[doc-list-depth] 1
3064 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
3065 . ie (\n[doc-list-depth] > 1) \{\
3066 . nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
3067 . ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
3068 . as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
3069 . length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
3070 . nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
3073 . tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
3076 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
3078 . ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
3080 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3081 . substring doc-str-dBla 0 0
3082 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3083 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3084 . substring doc-str-dBla 1
3085 . doc-first-parameter \*[doc-str-dBla]
3086 . doc-get-width "\*[doc-str-dfp]
3087 . doc-get-arg-type "\*[doc-str-dfp]
3088 . ie (\n[doc-arg-type] == 1) \
3089 . nr doc-reg-dBla1 1
3091 . nr doc-reg-dBla1 0
3094 . nr doc-reg-dBla1 0
3095 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3097 . ie \n[doc-reg-dBla1] \{\
3098 . \" execute string in a box to get the width of the diversion
3099 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3100 . doc-save-global-vars
3107 . nop \*[doc-str-dBla]
3111 . doc-restore-global-vars
3112 . doc-get-width \h'\n[dl]u'
3113 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3116 . \" test whether argument is a valid numeric expression
3117 . nr doc-reg-dBla1 0
3118 . if \B
\a(\*[doc-str-dBla])
\a \{\
3119 . \" disable warnings related to scaling indicators (32)
3120 . nr doc-reg-dBla2 \n[.warn]
3121 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3123 . \" values without a scaling indicator are taken as strings;
3124 . \" we test whether the parameter string with and without the last
3125 . \" character yields identical numerical results (ignoring the
3126 . \" scaling indicator)
3127 . ds doc-str-dBla1 "\*[doc-str-dBla]
3128 . substring doc-str-dBla1 0 -2
3129 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3130 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3131 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3132 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3133 . nr doc-reg-dBla1 1
3136 . \" enable all warnings again
3137 . warn \n[doc-reg-dBla2]
3140 . ie \n[doc-reg-dBla1] \
3141 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3143 . doc-get-arg-width \n[doc-arg-ptr]
3144 . ie (\n[doc-width] == 2) \{\
3145 . \" if the width parameter is a macro, use the macro's
3146 . \" width as specified in doc-common
3147 . doc-get-arg-type \*[doc-str-dBla]
3148 . ie (\n[doc-arg-type] == 1) \
3149 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3151 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3154 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3157 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3160 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3161 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3163 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3164 . nr doc-reg-dBla1 0
3165 . if \B
\a(\*[doc-str-dBla])
\a \{\
3166 . nr doc-reg-dBla2 \n[.warn]
3167 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3169 . ds doc-str-dBla1 "\*[doc-str-dBla]
3170 . substring doc-str-dBla1 0 -2
3171 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3172 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3173 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3174 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3175 . nr doc-reg-dBla1 1
3178 . warn \n[doc-reg-dBla2]
3181 . ie \n[doc-reg-dBla1] \
3182 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3184 . doc-get-arg-width \n[doc-arg-ptr]
3185 . ie (\n[doc-width] <= 3) \{\
3186 . \" if the offset parameter is a macro, use the macro's
3187 . \" width as specified in doc-common
3188 . doc-get-arg-type \*[doc-str-dBla]
3189 . ie (\n[doc-arg-type] == 1) \
3190 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3192 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3195 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3201 . \" not a known keyword, so it specifies the width of the next column
3202 . \" (if it is a column list)
3203 . if !\n[doc-reg-dBla] \{\
3204 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3205 . nr doc-num-columns +1
3206 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3207 . substring doc-str-dBla 0 0
3208 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3209 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3210 . substring doc-str-dBla 1
3211 . doc-first-parameter \*[doc-str-dBla]
3212 . doc-get-width "\*[doc-str-dfp]
3213 . doc-get-arg-type "\*[doc-str-dfp]
3214 . ie (\n[doc-arg-type] == 1) \
3215 . nr doc-reg-dBla1 1
3217 . nr doc-reg-dBla1 0
3220 . nr doc-reg-dBla1 0
3221 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3223 . ie \n[doc-reg-dBla1] \{\
3224 . \" execute string in a box to get the width of the diversion
3225 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3226 . doc-save-global-vars
3233 . nop \*[doc-str-dBla]
3237 . doc-restore-global-vars
3238 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3241 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3244 . tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
3245 . tm1 " in .Bl macro (#\n[.c])
3248 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3253 .\" NS doc-save-global-vars macro
3254 .\" NS save all global variables
3256 .\" NS local variables:
3259 .de doc-save-global-vars
3260 . ds doc-macro-name-saved "\*[doc-macro-name]
3261 . nr doc-arg-limit-saved \n[doc-arg-limit]
3262 . nr doc-num-args-saved \n[doc-num-args]
3263 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3266 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3267 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3268 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3269 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3270 . nr doc-reg-dsgv +1
3273 . nr doc-curr-font-saved \n[doc-curr-font]
3274 . nr doc-curr-size-saved \n[doc-curr-size]
3275 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3276 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3277 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3278 . nr doc-have-decl-saved \n[doc-have-decl]
3279 . nr doc-have-var-saved \n[doc-have-var]
3280 . ds doc-command-name-saved "\*[doc-command-name]
3281 . ds doc-quote-left-saved "\*[doc-quote-left]
3282 . ds doc-quote-right-saved "\*[doc-quote-right]
3283 . nr doc-nesting-level-saved \n[doc-nesting-level]
3284 . nr doc-in-list-saved \n[doc-in-list]
3285 . ds doc-space-saved "\*[doc-space]
3286 . ds doc-saved-space-saved "\*[doc-saved-space]
3287 . nr doc-space-mode-saved \n[doc-space-mode]
3288 . nr doc-have-space-saved \n[doc-have-space]
3289 . nr doc-have-slot-saved \n[doc-have-slot]
3290 . nr doc-keep-type-saved \n[doc-keep-type]
3291 . nr doc-display-depth-saved \n[doc-display-depth]
3292 . nr doc-is-compact-saved \n[doc-is-compact]
3295 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3296 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3297 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3298 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3299 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3300 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3301 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3302 . nr doc-reg-dsgv +1
3305 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3308 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3309 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3310 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3311 . nr doc-reg-dsgv +1
3314 . nr doc-list-depth-saved \n[doc-list-depth]
3317 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3318 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3319 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3320 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3321 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3322 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3323 . ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
3324 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3325 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3326 . nr doc-reg-dsgv +1
3329 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3330 . nr doc-curr-type-saved \n[doc-curr-type]
3331 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3332 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3333 . nr doc-num-columns-saved \n[doc-num-columns]
3334 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3335 . nr doc-is-func-saved \n[doc-is-func]
3336 . nr doc-have-old-func-saved \n[doc-have-old-func]
3337 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3338 . ds doc-func-arg-saved "\*[doc-func-arg]
3339 . nr doc-num-func-args-saved \n[doc-num-func-args]
3340 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3341 . nr doc-have-func-saved \n[doc-have-func]
3342 . nr doc-is-reference-saved \n[doc-is-reference]
3343 . nr doc-reference-count-saved \n[doc-reference-count]
3344 . nr doc-author-count-saved \n[doc-author-count]
3347 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3348 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3349 . nr doc-reg-dsgv +1
3352 . nr doc-book-count-saved \n[doc-book-count]
3353 . ds doc-book-name-saved "\*[doc-book-name]
3354 . nr doc-date-count-saved \n[doc-date-count]
3355 . ds doc-date-saved "\*[doc-date]
3356 . nr doc-publisher-count-saved \n[doc-publisher-count]
3357 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3358 . nr doc-journal-count-saved \n[doc-journal-count]
3359 . ds doc-journal-name-saved "\*[doc-journal-name]
3360 . nr doc-issue-count-saved \n[doc-issue-count]
3361 . ds doc-issue-name-saved "\*[doc-issue-name]
3362 . nr doc-optional-count-saved \n[doc-optional-count]
3363 . ds doc-optional-string-saved "\*[doc-optional-string]
3364 . nr doc-page-number-count-saved \n[doc-page-number-count]
3365 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3366 . nr doc-corporate-count-saved \n[doc-corporate-count]
3367 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3368 . nr doc-report-count-saved \n[doc-report-count]
3369 . ds doc-report-name-saved "\*[doc-report-name]
3370 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3371 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3372 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3373 . nr doc-volume-count-saved \n[doc-volume-count]
3374 . ds doc-volume-name-saved "\*[doc-volume-name]
3375 . nr doc-have-author-saved \n[doc-have-author]
3377 . ds doc-document-title-saved "\*[doc-document-title]
3378 . ds doc-volume-saved "\*[doc-volume]
3379 . ds doc-section-saved "\*[doc-section]
3380 . ds doc-operating-system-saved "\*[doc-operating-system]
3381 . ds doc-date-string-saved "\*[doc-date-string]
3382 . nr doc-header-space-saved \n[doc-header-space]
3383 . nr doc-footer-space-saved \n[doc-footer-space]
3384 . nr doc-display-vertical-saved \n[doc-display-vertical]
3385 . ds doc-header-string-saved "\*[doc-header-string]
3386 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3387 . nr doc-in-files-section-saved \n[doc-in-files-section]
3388 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3392 .\" NS doc-restore-global-vars macro
3393 .\" NS restore all global variables
3395 .\" NS local variables:
3398 .de doc-restore-global-vars
3399 . ds doc-macro-name "\*[doc-macro-name-saved]
3400 . nr doc-arg-limit \n[doc-arg-limit-saved]
3401 . nr doc-num-args \n[doc-num-args-saved]
3402 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3405 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3406 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3407 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3408 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3409 . nr doc-reg-drgv +1
3412 . nr doc-curr-font \n[doc-curr-font-saved]
3413 . nr doc-curr-size \n[doc-curr-size-saved]
3414 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3415 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3416 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3417 . nr doc-have-decl \n[doc-have-decl-saved]
3418 . nr doc-have-var \n[doc-have-var-saved]
3419 . ds doc-command-name "\*[doc-command-name-saved]
3420 . ds doc-quote-left "\*[doc-quote-left-saved]
3421 . ds doc-quote-right "\*[doc-quote-right-saved]
3422 . nr doc-nesting-level \n[doc-nesting-level-saved]
3423 . nr doc-in-list \n[doc-in-list-saved]
3424 . ds doc-space "\*[doc-space-saved]
3425 . ds doc-saved-space "\*[doc-saved-space-saved]
3426 . nr doc-space-mode \n[doc-space-mode-saved]
3427 . nr doc-have-space \n[doc-have-space-saved]
3428 . nr doc-have-slot \n[doc-have-slot-saved]
3429 . nr doc-keep-type \n[doc-keep-type-saved]
3430 . nr doc-display-depth \n[doc-display-depth-saved]
3431 . nr doc-is-compact \n[doc-is-compact-saved]
3434 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3435 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3436 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3437 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3438 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3439 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3440 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3441 . nr doc-reg-drgv +1
3444 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3447 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3448 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3449 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3450 . nr doc-reg-drgv +1
3453 . nr doc-list-depth \n[doc-list-depth-saved]
3456 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3457 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3458 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3459 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3460 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3461 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3462 . ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
3463 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3464 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3465 . nr doc-reg-drgv +1
3468 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3469 . nr doc-curr-type \n[doc-curr-type-saved]
3470 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3471 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3472 . nr doc-num-columns \n[doc-num-columns-saved]
3473 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3474 . nr doc-is-func \n[doc-is-func-saved]
3475 . nr doc-have-old-func \n[doc-have-old-func-saved]
3476 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3477 . ds doc-func-arg "\*[doc-func-arg-saved]
3478 . nr doc-num-func-args \n[doc-num-func-args-saved]
3479 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3480 . nr doc-have-func \n[doc-have-func-saved]
3481 . nr doc-is-reference \n[doc-is-reference-saved]
3482 . nr doc-reference-count \n[doc-reference-count-saved]
3483 . nr doc-author-count \n[doc-author-count-saved]
3486 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3487 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3488 . nr doc-reg-drgv +1
3491 . nr doc-book-count \n[doc-book-count-saved]
3492 . ds doc-book-name "\*[doc-book-name-saved]
3493 . nr doc-date-count \n[doc-date-count-saved]
3494 . ds doc-date "\*[doc-date-saved]
3495 . nr doc-publisher-count \n[doc-publisher-count-saved]
3496 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3497 . nr doc-journal-count \n[doc-journal-count-saved]
3498 . ds doc-journal-name "\*[doc-journal-name-saved]
3499 . nr doc-issue-count \n[doc-issue-count-saved]
3500 . ds doc-issue-name "\*[doc-issue-name-saved]
3501 . nr doc-optional-count \n[doc-optional-count-saved]
3502 . ds doc-optional-string "\*[doc-optional-string-saved]
3503 . nr doc-page-number-count \n[doc-page-number-count-saved]
3504 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3505 . nr doc-corporate-count \n[doc-corporate-count-saved]
3506 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3507 . nr doc-report-count \n[doc-report-count-saved]
3508 . ds doc-report-name "\*[doc-report-name-saved]
3509 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3510 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3511 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3512 . nr doc-volume-count \n[doc-volume-count-saved]
3513 . ds doc-volume-name "\*[doc-volume-name-saved]
3514 . nr doc-have-author \n[doc-have-author-saved]
3516 . ds doc-document-title "\*[doc-document-title-saved]
3517 . ds doc-volume "\*[doc-volume-saved]
3518 . ds doc-section "\*[doc-section-saved]
3519 . ds doc-operating-system "\*[doc-operating-system-saved]
3520 . ds doc-date-string "\*[doc-date-string-saved]
3521 . nr doc-header-space \n[doc-header-space-saved]
3522 . nr doc-footer-space \n[doc-footer-space-saved]
3523 . nr doc-display-vertical \n[doc-display-vertical-saved]
3524 . ds doc-header-string "\*[doc-header-string-saved]
3525 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3526 . nr doc-in-files-section \n[doc-in-files-section-saved]
3527 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3531 .\" NS El user macro
3535 .\" NS doc-list-depth
3536 .\" NS doc-macro-name
3538 .\" NS local variables:
3541 .\" NS width register `El' set in doc-common
3545 . tm Usage: .El (does not take arguments) (#\n[.c])
3549 . ds doc-macro-name El
3550 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3552 . ie "\*[doc-str-El]"diag-list" \
3554 . el \{ .ie "\*[doc-str-El]"column-list" \
3555 . doc-end-column-list
3556 . el \{ .ie "\*[doc-str-El]"item-list" \
3558 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3560 . el \{ .ie "\*[doc-str-El]"inset-list" \
3570 .\" NS doc-saved-Pa-font global string
3571 .\" NS saved doc-Pa-font string for section FILES (no underline if
3574 .ds doc-saved-Pa-font
3577 .\" NS doc-curr-type global register
3578 .\" NS current argument type
3583 .\" NS doc-curr-arg global string
3584 .\" NS current argument
3589 .\" NS doc-item-boxXXX global box
3590 .\" NS item boxes associated list depth
3593 .\" NS doc-list-depth
3596 .\" NS It user macro
3603 .\" NS doc-curr-type
3605 .\" NS doc-macro-name
3607 .\" NS doc-saved-Pa-font
3609 .\" NS local variables:
3612 .\" NS doc-XXX-list-type
3614 .\" NS width register `It' set in doc-common
3616 .nr doc-bullet-list-type 1
3617 .nr doc-column-list-type 0
3618 .nr doc-dash-list-type 1
3619 .nr doc-diag-list-type 0
3620 .nr doc-enum-list-type 1
3621 .nr doc-hang-list-type 2
3622 .nr doc-inset-list-type 2
3623 .nr doc-item-list-type 1
3624 .nr doc-ohang-list-type 2
3625 .nr doc-tag-list-type 2
3628 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3630 . if "\*[doc-str-It]"" \
3631 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3633 . if \n[doc-nesting-level] \{\
3634 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3643 . ds doc-macro-name It
3645 . \" fill argument vector
3647 . while (\n[doc-reg-It] <= \n[.$]) \{\
3648 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3652 . nr doc-num-args \n[.$]
3656 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3658 . if \n[doc-reg-It] \{\
3660 . box doc-item-box\n[doc-list-depth]
3661 . ev doc-item-env\n[doc-list-depth]
3667 . ie (\n[doc-reg-It] == 1) \{\
3669 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3670 . tm1 " don't take arguments (#\n[.c])
3674 . if (\n[doc-reg-It] == 2) \{\
3675 . \" handle list types with arguments
3676 . doc-parse-arg-vector
3680 . nr doc-curr-type \n[doc-type1]
3681 . ds doc-curr-arg "\*[doc-arg1]
3683 . if \n[doc-in-files-section] \{\
3684 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3686 . ds doc-Pa-font "\*[doc-No-font]
3689 . ie (\n[doc-type1] == 1) \
3693 . doc-print-recursive
3696 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3697 . tm1 " require arguments (#\n[.c])
3701 . \" the previous call of `.doc-print-recursive' can contain calls to
3702 . \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
3703 . if !\n[doc-nesting-level] \
3704 . doc-\*[doc-str-It]
3708 .\" NS doc-inset-list macro
3709 .\" NS .It item of list-type inset
3715 . \" finish item box
3719 . unformat doc-item-box\n[doc-list-depth]
3721 . doc-set-vertical-and-indent 0
3725 . doc-item-box\n[doc-list-depth]
3727 . if \n[doc-in-files-section] \
3729 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3736 .\" NS doc-hang-list macro
3737 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3740 .\" NS doc-have-space
3743 .\" NS local variables:
3748 . \" finish item box
3752 . unformat doc-item-box\n[doc-list-depth]
3754 . doc-set-vertical-and-indent 1
3755 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3756 . ti -\n[doc-reg-dhl]u
3759 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3760 . doc-item-box\n[doc-list-depth]
3762 . chop doc-item-box\n[doc-list-depth]
3763 . nr doc-reg-dhl1 \n[.k]u
3764 . nop \*[doc-item-box\n[doc-list-depth]]\c
3765 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3766 . nr doc-have-space 1
3769 . if \n[doc-in-files-section] \
3771 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3778 .\" NS doc-ohang-list macro
3779 .\" NS .It item of list-type overhanging tag
3785 . \" finish item box
3789 . unformat doc-item-box\n[doc-list-depth]
3791 . doc-set-vertical-and-indent 0
3793 . doc-item-box\n[doc-list-depth]
3796 . if \n[doc-in-files-section] \
3798 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3805 .\" NS doc-item-list macro
3806 .\" NS .It item of list-type [empty tag]
3809 . \" finish (dummy) item box
3814 . doc-set-vertical-and-indent 0
3821 .\" NS doc-enum-list-count-stackXXX global register
3822 .\" NS stack of current enum count values
3825 .\" NS doc-list-depth
3827 .nr doc-enum-list-count-stack1 0
3830 .\" NS doc-enum-list macro
3831 .\" NS enumerated list
3834 .\" NS doc-enum-list-count-stackXXX
3839 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3841 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3843 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3844 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3849 .\" NS doc-bullet-list macro
3850 .\" NS bullet paragraph list
3857 . nop \)\*[doc-Sy-font]\[bu]\f[]
3862 .\" NS doc-dash-list macro
3863 .\" NS hyphen paragraph list (sub bullet list)
3870 . nop \)\*[doc-Sy-font]\-\f[]
3875 .\" NS doc-do-list macro
3876 .\" NS .It item of list-type enum/bullet/hyphen
3878 .als doc-do-list doc-hang-list
3881 .\" NS doc-diag-list-input-line-count global register
3882 .\" NS saved line number to be checked in next diag-list item
3884 .nr doc-diag-list-input-line-count 0
3887 .\" NS doc-diag-list macro
3888 .\" NS .It item of list-type diagnostic-message
3891 .\" NS doc-curr-font
3892 .\" NS doc-curr-size
3893 .\" NS doc-diag-list-input-line-count
3896 . nr doc-curr-font \n[.f]
3897 . nr doc-curr-size \n[.ps]
3899 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3900 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3907 . nr doc-diag-list-input-line-count \n[.c]
3910 . nop \*[doc-Sy-font]\c
3911 . if \n[doc-num-args] \
3912 . doc-remaining-args
3913 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
3915 . doc-print-and-reset
3919 .\" NS doc-tag-list macro
3920 .\" NS .It item of list-type `tag'
3923 .\" NS doc-have-space
3926 .\" NS local variables:
3932 . \" finish item box
3936 . unformat doc-item-box\n[doc-list-depth]
3938 . \" we use a box without `.nf' to compute the tag width (via `dl' register)
3945 . doc-item-box\n[doc-list-depth]
3950 . if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
3951 . if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
3952 . in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3953 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3957 . doc-set-vertical-and-indent 1
3958 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3959 . ti -\n[doc-reg-dtl]u
3962 . doc-item-box\n[doc-list-depth]
3963 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3966 . \" format the tag separately to prevent stretching of spaces
3972 . nr doc-have-space 1
3975 . if \n[doc-in-files-section] \
3977 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3984 .\" NS doc-get-tag-width macro
3985 .\" NS resolve unknown tag width (`tag' list-type only)
3988 .\" NS doc-list-indent-stackXXX
3989 .\" NS doc-tag-width-stackXXX
3993 .\" NS doc-curr-type
3995 .de doc-get-tag-width
3996 . ie (\n[doc-curr-type] == 1) \{\
3997 . ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
3998 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
4001 . ds doc-tag-width-stack\n[doc-list-depth] No
4002 . nr doc-list-indent-stack\n[doc-list-depth] \n[No]
4007 .\" NS doc-set-vertical-and-indent macro
4008 .\" NS set up vertical spacing (if not compact) and indentation (with
4009 .\" NS offset if argument is non-zero)
4012 .\" NS doc-list-have-indent-stackXXX
4014 .de doc-set-vertical-and-indent
4015 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4016 . sp \n[doc-display-vertical]u
4018 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4019 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4021 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4029 .\" NS doc-list-depth global register
4030 .\" NS list type stack counter
4032 .nr doc-list-depth 0
4035 .\" NS doc-num-columns global register
4036 .\" NS number of columns
4038 .nr doc-num-columns 0
4041 .\" NS doc-compact-list-stackXXX global register (bool)
4042 .\" NS stack of flags to indicate whether a particular list is compact
4045 .\" NS doc-list-depth
4047 .nr doc-compact-list-stack1 0
4050 .\" NS doc-tag-prefix-stackXXX global string
4051 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4054 .\" NS doc-list-depth
4056 .ds doc-tag-prefix-stack1
4059 .\" NS doc-tag-width-stackXXX global string
4060 .\" NS stack of strings indicating how to set up current element of
4061 .\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
4062 .\" NS directly; if it is a macro name, use the macro's width value;
4063 .\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
4066 .\" NS doc-list-depth
4068 .ds doc-tag-width-stack0
4069 .ds doc-tag-width-stack1
4072 .\" NS doc-list-offset-stackXXX global register
4073 .\" NS stack of list offsets
4076 .\" NS doc-list-depth
4078 .nr doc-list-offset-stack1 0
4081 .\" NS doc-end-list macro
4082 .\" NS list end function; resets indentation (and offset if argument is
4086 .\" NS doc-list-depth
4087 .\" NS doc-list-offset-stackXXX
4091 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4093 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4095 . if (\n[doc-list-depth] <= 0) \
4096 . tm mdoc warning: extraneous .El call (#\n[.c])
4098 . doc-decrement-list-stack
4099 . nr doc-list-depth -1
4103 .\" NS doc-increment-list-stack macro
4104 .\" NS set up next block for list
4107 .\" NS doc-compact-list-stackXXX
4108 .\" NS doc-list-have-indent-stackXXX
4109 .\" NS doc-list-indent-stackXXX
4110 .\" NS doc-list-offset-stackXXX
4111 .\" NS doc-list-type-stackXXX
4112 .\" NS doc-tag-prefix-stackXXX
4113 .\" NS doc-tag-width-stackXXX
4114 .\" NS doc-enum-list-count-stackXXX
4116 .\" NS local variables:
4119 .de doc-increment-list-stack
4120 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4121 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4122 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4123 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4124 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4125 . ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
4126 . ds doc-list-type-stack\n[doc-reg-dils]
4127 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4128 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4132 .\" NS doc-decrement-list-stack macro
4133 .\" NS decrement stack
4136 .\" NS doc-compact-list-stackXXX
4137 .\" NS doc-list-have-indent-stackXXX
4138 .\" NS doc-list-indent-stackXXX
4139 .\" NS doc-list-offset-stackXXX
4140 .\" NS doc-list-type-stackXXX
4141 .\" NS doc-tag-prefix-stackXXX
4142 .\" NS doc-tag-width-stackXXX
4143 .\" NS doc-enum-list-count-stackXXX
4145 .de doc-decrement-list-stack
4146 . ds doc-list-type-stack\n[doc-list-depth]
4147 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4148 . nr doc-list-indent-stack\n[doc-list-depth] 0
4149 . nr doc-list-offset-stack\n[doc-list-depth] 0
4150 . ds doc-tag-prefix-stack\n[doc-list-depth]
4151 . ds doc-tag-width-stack\n[doc-list-depth]
4152 . nr doc-compact-list-stack\n[doc-list-depth] 0
4153 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4157 .\" NS Xr user macro
4158 .\" NS cross reference (for man pages only)
4162 .\" NS doc-macro-name
4164 .\" NS local variables:
4167 .\" NS width register `Xr' set in doc-common
4170 . if !\n[doc-arg-limit] \{\
4172 . ds doc-macro-name Xr
4173 . doc-parse-args \$@
4179 . if !\n[doc-arg-limit] \
4183 . doc-print-prefixes
4184 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4185 . \" first argument must be a string
4186 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4187 . nr doc-curr-font \n[.f]
4188 . nr doc-curr-size \n[.ps]
4189 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4191 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4192 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4193 . \" modify second argument if it is a string and
4194 . \" remove space inbetween
4195 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4196 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4197 . ds doc-space\n[doc-arg-ptr]
4200 . doc-print-recursive
4210 .\" NS doc-Xr-usage macro
4213 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4218 .\" NS Sx user macro
4219 .\" NS cross section reference
4221 .\" NS width register `Sx' set in doc-common
4223 .als Sx doc-generic-macro
4224 .ds doc-Sx-usage section_header
4227 .\" NS doc-end-column-list macro
4228 .\" NS column-list end-list
4231 .\" NS doc-list-depth
4233 .de doc-end-column-list
4235 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4238 . doc-decrement-list-stack
4239 . nr doc-list-depth -1
4243 .\" NS doc-column-indent-width global register
4244 .\" NS holds the indent width for a column list
4246 .nr doc-column-indent-width 0
4249 .\" NS doc-set-column-tab macro
4250 .\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
4253 .\" NS doc-column-indent-width
4255 .\" NS local variables:
4258 .\" NS doc-str-dsct1
4260 .de doc-set-column-tab
4263 . nr doc-column-indent-width 0
4266 . ds doc-str-dsct1 " \"
4269 . ds doc-str-dsct1 " \"
4271 . \" XXX: this is packed abnormally close -- intercolumn width
4272 . \" should be configurable
4273 . ds doc-str-dsct1 " \"
4276 . while (\n[doc-reg-dsct] <= \$1) \{\
4277 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4278 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4279 . nr doc-reg-dsct +1
4282 . ta \*[doc-str-dsct]
4283 ' in +\n[doc-column-indent-width]u
4287 .\" NS doc-column-list macro
4292 .\" NS doc-list-indent-stackXXX
4295 .\" NS local variables:
4299 . if \n[doc-num-args] \
4300 . doc-parse-arg-vector
4303 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4304 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4308 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4309 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4310 . ds doc-space\n[doc-reg-dcl]
4313 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4314 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4317 . in +\n[doc-column-indent-width]u
4319 . ti -\n[doc-column-indent-width]u
4321 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4325 .\" NS Ta user macro
4326 .\" NS append tab (\t)
4331 .\" NS width register `Ta' set in doc-common
4334 . ie \n[doc-arg-limit] \{\
4337 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4338 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4343 . tm1 "Usage: Ta must follow column entry: e.g.
4344 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4349 .\" NS Dl user macro
4350 .\" NS display (one line) literal
4352 .\" NS this function uses the `Li' font
4356 .\" NS doc-curr-font
4357 .\" NS doc-curr-size
4358 .\" NS doc-macro-name
4360 .\" NS width register `Dl' set in doc-common
4364 . in +\n[doc-display-indent]u
4366 . ie \n[doc-arg-limit] \{\
4367 . tm Usage: .Dl not callable by other macros (#\n[.c])
4372 . ds doc-macro-name Dl
4373 . doc-parse-args \$@
4375 . nr doc-curr-font \n[.f]
4376 . nr doc-curr-size \n[.ps]
4377 . nop \*[doc-Li-font]\c
4378 . doc-print-recursive
4381 . tm Usage: .Dl argument ... (#\n[.c])
4384 . in -\n[doc-display-indent]u
4388 .\" NS D1 user macro
4389 .\" NS display (one line)
4393 .\" NS doc-macro-name
4395 .\" NS width register `D1' set in doc-common
4399 . in +\n[doc-display-indent]u
4401 . ie \n[doc-arg-limit] \{\
4402 . tm Usage: .D1 not callable by other macros (#\n[.c])
4407 . ds doc-macro-name D1
4408 . doc-parse-args \$@
4410 . doc-print-recursive
4413 . tm Usage: .D1 argument ... (#\n[.c])
4416 . in -\n[doc-display-indent]u
4420 .\" NS Vt user macro
4421 .\" NS variable type (for forcing old style variable declarations);
4422 .\" NS this is not done in the same manner as .Ot for fortrash --
4423 .\" NS clean up later
4426 .\" NS doc-curr-font
4427 .\" NS doc-curr-size
4428 .\" NS doc-have-decl
4430 .\" NS doc-macro-name
4432 .\" NS width register `Vt' set in doc-common
4435 . if !\n[doc-arg-limit] \{\
4437 . ds doc-macro-name Vt
4438 . doc-parse-args \$@
4441 . tm Usage: .Vt variable_type ... (#\n[.c])
4444 . if !\n[doc-arg-limit] \
4448 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4449 . tm Usage: .Vt variable_type ... (#\n[.c])
4454 . if \n[doc-in-synopsis-section] \{\
4455 . \" if a function declaration was the last thing given,
4456 . \" want vertical space
4457 . if \n[doc-have-decl] \{\
4459 . nr doc-have-decl 0
4462 . \" if a subroutine was the last thing given, want vertical space
4463 . if \n[doc-have-func] \{\
4464 . ie \n[doc-have-var] \
4473 . nr doc-curr-font \n[.f]
4474 . nr doc-curr-size \n[.ps]
4475 . nop \*[doc-Ft-font]\c
4476 . doc-print-recursive
4478 . if \n[doc-in-synopsis-section] \{\
4479 . ie \n[doc-have-old-func] \
4480 . nop \*[doc-soft-space]\c
4487 .\" NS doc-is-func global register (bool)
4488 .\" NS set if subroutine (in synopsis only) (fortran only)
4493 .\" NS Ft user macro
4494 .\" NS function type
4497 .\" NS doc-curr-font
4498 .\" NS doc-curr-size
4499 .\" NS doc-have-decl
4502 .\" NS doc-macro-name
4504 .\" NS width register `Ft' set in doc-common
4507 . if !\n[doc-arg-limit] \{\
4509 . ds doc-macro-name Ft
4510 . doc-parse-args \$@
4513 . tm Usage: .Ft function_type ... (#\n[.c])
4516 . if !\n[doc-arg-limit] \
4520 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4521 . tm Usage: .Ft function_type ... (#\n[.c])
4526 . if \n[doc-in-synopsis-section] \{\
4527 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4529 . nr doc-have-decl 0
4533 . if \n[doc-have-var] \{\
4541 . nr doc-curr-font \n[.f]
4542 . nr doc-curr-size \n[.ps]
4543 . nop \*[doc-Ft-font]\c
4544 . doc-print-recursive
4548 .\" NS doc-have-old-func global register (bool)
4549 .\" NS set if `Ot' has been called
4551 .nr doc-have-old-func 0
4554 .\" NS Ot user macro
4555 .\" NS old function type (fortran -- no newline)
4558 .\" NS doc-have-decl
4559 .\" NS doc-have-old-func
4563 .\" NS width register `Ot' set in doc-common
4566 . nr doc-have-old-func 1
4568 . if \n[doc-in-synopsis-section] \{\
4569 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4571 . nr doc-have-decl 0
4575 . if \n[doc-have-var] \{\
4584 . nop \*[doc-Ft-font]\$*\c
4589 .\" NS Fa user macro
4590 .\" NS function arguments
4594 .\" NS doc-curr-font
4595 .\" NS doc-curr-size
4596 .\" NS doc-macro-name
4598 .\" NS width register `Fa' set in doc-common
4601 . if !\n[doc-arg-limit] \{\
4603 . ds doc-macro-name Fa
4604 . doc-parse-args \$@
4607 . tm Usage: .Fa function_arguments ... (#\n[.c])
4610 . ie \n[doc-func-arg-count] \
4614 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4615 . nr doc-curr-font \n[.f]
4616 . nr doc-curr-size \n[.ps]
4617 . nop \*[doc-Fa-font]\c
4618 . doc-print-recursive
4620 . if \n[doc-in-synopsis-section] \
4621 . if \n[doc-have-func] \
4627 .\" NS doc-func-arg-count global register
4628 .\" NS how many function arguments have been processed so far
4630 .nr doc-func-arg-count 0
4633 .\" NS doc-func-arg global string
4634 .\" NS work buffer for function name strings
4639 .\" NS doc-num-func-args global register
4640 .\" NS number of function arguments
4642 .nr doc-num-func-args 0
4645 .\" NS doc-func-args-processed global register
4646 .\" NS function arguments processed so far
4648 .nr doc-func-args-processed 0
4651 .\" NS doc-do-func macro
4652 .\" NS internal .Fa for .Fc
4658 .\" NS doc-func-arg-count
4659 .\" NS doc-func-args-processed
4660 .\" NS doc-num-func-args
4663 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4671 . nr doc-num-func-args 0
4672 . nr doc-func-args-processed 0
4674 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4675 . if (\n[doc-num-func-args] > 1) \
4676 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4678 . if (\n[doc-func-arg-count] > 1) \{\
4679 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|,\)\c
4680 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4681 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4684 . if (\n[doc-func-arg-count] == 1) \{\
4685 . nop \|\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4688 . nr doc-func-arg-count +1
4693 .\" NS doc-have-func global register (bool)
4694 .\" NS whether we have more than one function in synopsis
4699 .\" NS Fn user macro
4704 .\" NS doc-curr-font
4705 .\" NS doc-curr-size
4706 .\" NS doc-have-decl
4707 .\" NS doc-have-func
4709 .\" NS doc-indent-synopsis
4711 .\" NS doc-macro-name
4713 .\" NS width register `Fn' set in doc-common
4716 . if !\n[doc-arg-limit] \{\
4718 . ds doc-macro-name Fn
4719 . doc-parse-args \$@
4722 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4725 . if !\n[doc-arg-limit] \
4728 . if \n[doc-in-synopsis-section] \{\
4729 . \" if there is/has been more than one subroutine declaration
4730 . ie \n[doc-is-func] \{\
4733 . nr doc-have-decl 0
4737 . if \n[doc-have-func] \{\
4740 . nr doc-have-decl 0
4743 . if \n[doc-have-decl] \{\
4748 . if \n[doc-have-var] \{\
4750 . nr doc-have-decl 0
4753 . nr doc-have-func 1
4757 . if !\n[doc-indent-synopsis] \
4758 . nr doc-indent-synopsis (8u * \n[doc-fixed-width]u)
4759 . if !\n[doc-indent-synopsis-active] \
4760 . in +\n[doc-indent-synopsis]u
4761 . ti -\n[doc-indent-synopsis]u
4765 . doc-print-prefixes
4766 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4767 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4772 . nr doc-curr-font \n[.f]
4773 . nr doc-curr-size \n[.ps]
4774 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4775 . nop \f[]\s[0]\*[lp]\)\c
4778 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4779 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4780 . nop \*[doc-Fa-font]\c
4782 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4786 . if \n[doc-in-synopsis-section] \
4789 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4790 . \" output the space (if needed)
4792 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4795 . doc-print-recursive
4798 . doc-print-and-reset
4800 . if \n[doc-in-synopsis-section] \
4801 . if !\n[doc-indent-synopsis-active] \
4802 . in -\n[doc-indent-synopsis]u
4806 .\" NS doc-do-func-args macro
4807 .\" NS handle function arguments
4813 .\" NS doc-func-args-processed
4814 .\" NS doc-num-func-args
4816 .\" NS local variables:
4819 .de doc-do-func-args
4820 . if \n[doc-in-synopsis-section] \{\
4822 . nr doc-num-func-args 0
4823 . nr doc-func-args-processed 0
4825 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4826 . if (\n[doc-num-func-args] > 1) \
4827 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4830 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4833 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4834 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4835 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4836 . nop \|\f[\n[doc-curr-font]]\s[\n[doc-curr-size]u],\)\c
4837 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4843 .\" NS doc-saved-nesting-level global register
4845 .nr doc-saved-nesting-level 0
4848 .\" NS doc-in-func-enclosure global register (bool)
4850 .nr doc-in-func-enclosure 0
4853 .\" NS Fo user macro
4854 .\" NS function open
4858 .\" NS doc-curr-font
4859 .\" NS doc-curr-size
4860 .\" NS doc-func-arg-count
4861 .\" NS doc-have-decl
4862 .\" NS doc-have-func
4864 .\" NS doc-in-func-enclosure
4865 .\" NS doc-indent-synopsis
4867 .\" NS doc-macro-name
4868 .\" NS doc-saved-nesting-level
4870 .\" NS width register `Fo' set in doc-common
4873 . if (\n[doc-in-func-enclosure]) \{\
4874 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4878 . nr doc-saved-nesting-level \n[doc-nesting-level]
4879 . nr doc-in-func-enclosure 1
4881 . if !\n[doc-arg-limit] \{\
4883 . ds doc-macro-name Fo
4884 . doc-parse-args \$@
4887 . tm Usage: .Fo function_name (#\n[.c])
4890 . if \n[doc-in-synopsis-section] \{\
4891 . \" if there is/has been more than one subroutine declaration
4892 . ie \n[doc-is-func] \{\
4895 . nr doc-have-decl 0
4899 . if \n[doc-have-func] \{\
4902 . nr doc-have-decl 0
4905 . if \n[doc-have-decl] \{\
4910 . if \n[doc-have-var] \{\
4912 . nr doc-have-decl 0
4915 . nr doc-have-func 1
4919 . if !\n[doc-indent-synopsis] \
4920 . nr doc-indent-synopsis (8u * \n[doc-fixed-width]u)
4923 . \" start function box
4931 . doc-print-prefixes
4932 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4933 . nr doc-func-arg-count 1
4934 . nr doc-curr-font \n[.f]
4935 . nr doc-curr-size \n[.ps]
4937 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4938 . nop \f[]\s[0]\*[lp]\)\c
4944 .\" NS Fc user macro
4945 .\" NS function close
4949 .\" NS doc-func-arg-count
4950 .\" NS doc-in-func-enclosure
4951 .\" NS doc-saved-nesting-level
4952 .\" NS doc-macro-name
4954 .\" NS width register `Fc' set in doc-common
4957 . if !\n[doc-in-func-enclosure] \{\
4958 . tm mdoc warning: Extraneous .Fc (#\n[.c])
4963 . ds doc-macro-name Fc
4964 . \" the first (dummy) argument is used to get the correct spacing
4965 . doc-parse-args \) \$@
4968 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
4969 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
4971 . nr doc-func-arg-count 0
4972 . nr doc-in-func-enclosure 0
4974 . ie \n[doc-in-synopsis-section] \
4979 . \" finish function box
4984 . unformat doc-func-box
4986 . if \n[doc-in-synopsis-section] \{\
4987 . if !\n[doc-indent-synopsis-active] \
4988 . in +\n[doc-indent-synopsis]u
4989 . ti -\n[doc-indent-synopsis]u
4993 . nop \*[doc-func-box]\c
4996 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4997 . nr doc-curr-font \n[.f]
4998 . nr doc-curr-size \n[.ps]
4999 . doc-print-recursive
5002 . doc-print-and-reset
5004 . if \n[doc-in-synopsis-section] \
5005 . if !\n[doc-indent-synopsis-active] \
5006 . in -\n[doc-indent-synopsis]u
5010 .\" NS doc-build-func-string macro
5011 .\" NS collect function arguments and set hard spaces inbetween
5015 .\" NS doc-func-args-processed
5016 .\" NS doc-num-func-args
5018 .de doc-build-func-string
5019 . if !\n[doc-num-func-args] \{\
5020 . nr doc-num-func-args \n[.$]
5021 . nr doc-func-args-processed 0
5025 . nr doc-func-args-processed +1
5026 . as doc-func-arg "\$1
5028 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5029 . as doc-func-arg "\*[doc-hard-space]
5032 . doc-build-func-string \$@
5037 .\" Very crude references: Stash all reference info into boxes, print out
5038 .\" reference on .Re macro and clean up. Ordering very limited, no fancy
5039 .\" citations, but can do articles, journals, and books -- need to add
5040 .\" several missing options (like city etc). Should be able to grab a refer
5041 .\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
5045 .\" NS doc-is-reference global register (bool)
5046 .\" NS set if in reference
5048 .nr doc-is-reference 0
5051 .\" NS doc-reference-count global register
5052 .\" NS reference element counter
5054 .nr doc-reference-count 0
5057 .\" NS Rs user macro
5058 .\" NS reference start
5061 .\" NS doc-is-reference
5062 .\" NS doc-reference-count
5064 .\" NS width register `Rs' set in doc-common
5068 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5070 . nr doc-is-reference 1
5071 . doc-reset-reference
5072 . if \n[doc-in-see-also-section] \
5074 . nr doc-reference-count 0
5079 .\" NS Re user macro
5080 .\" NS reference end
5083 .\" NS doc-is-reference
5085 .\" NS width register `Re' set in doc-common
5089 . tm Usage: .Re (does not take arguments) (#\n[.c])
5091 . doc-print-reference
5092 . doc-reset-reference
5093 . nr doc-is-reference 0
5098 .\" NS doc-reset-reference macro
5099 .\" NS reference cleanup
5102 .\" NS doc-author-count
5103 .\" NS doc-author-nameXXX
5104 .\" NS doc-book-count
5105 .\" NS doc-book-name
5106 .\" NS doc-corporate-count
5107 .\" NS doc-corporate-name
5109 .\" NS doc-date-count
5110 .\" NS doc-issue-count
5111 .\" NS doc-issue-name
5112 .\" NS doc-journal-count
5113 .\" NS doc-journam-name
5114 .\" NS doc-optional-count
5115 .\" NS doc-optional-string
5116 .\" NS doc-page-number-count
5117 .\" NS doc-page-number-string
5118 .\" NS doc-reference-title-count
5119 .\" NS doc-reference-title-name
5120 .\" NS doc-reference-title-name-for-book
5121 .\" NS doc-report-count
5122 .\" NS doc-report-name
5123 .\" NS doc-volume-count
5124 .\" NS doc-volume-name
5126 .de doc-reset-reference
5127 . while (\n[doc-author-count]) \{\
5128 . ds doc-author-name\n[doc-author-count]
5129 . nr doc-author-count -1
5131 . nr doc-journal-count 0
5132 . nr doc-issue-count 0
5133 . nr doc-optional-count 0
5134 . nr doc-corporate-count 0
5135 . nr doc-report-count 0
5136 . nr doc-reference-title-count 0
5137 . nr doc-volume-count 0
5138 . nr doc-date-count 0
5139 . nr doc-page-number-count 0
5140 . nr doc-book-count 0
5142 . ds doc-journal-name
5144 . ds doc-optional-string
5145 . ds doc-corporate-name
5146 . ds doc-report-name
5147 . ds doc-reference-title-name
5148 . ds doc-reference-title-name-for-book
5149 . ds doc-volume-name
5151 . ds doc-page-number-string
5156 .\" NS doc-finish-reference macro
5157 .\" NS auxiliary macro for doc-print-reference
5160 .\" NS doc-reference-count
5162 .de doc-finish-reference
5163 . nr doc-reference-count -1
5164 . ie \n[doc-reference-count] \
5171 .\" NS doc-print-reference macro
5172 .\" NS reference print
5175 .\" NS doc-reference-count
5177 .de doc-print-reference
5181 . if \n[doc-author-count] \{\
5182 . doc-print-reference-authors
5183 . nr doc-reference-count -\n[doc-author-count]
5186 . if \n[doc-reference-title-count] \{\
5187 . unformat doc-reference-title-name
5188 . chop doc-reference-title-name
5189 . unformat doc-reference-title-name-for-book
5190 . chop doc-reference-title-name-for-book
5191 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5192 . nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
5193 . doc-finish-reference
5196 . nop \*[doc-reference-title-name]\c
5197 . doc-finish-reference
5200 . if \n[doc-book-count] \{\
5201 . unformat doc-book-name
5202 . chop doc-book-name
5203 . nop \*[doc-book-name]\c
5204 . doc-finish-reference
5207 . if \n[doc-publisher-count] \{\
5208 . unformat doc-publisher-name
5209 . chop doc-publisher-name
5210 . nop \*[doc-publisher-name]\c
5211 . doc-finish-reference
5214 . if \n[doc-journal-count] \{\
5215 . unformat doc-journal-name
5216 . chop doc-journal-name
5217 . nop \*[doc-journal-name]\c
5218 . doc-finish-reference
5221 . if \n[doc-report-count] \{\
5222 . unformat doc-report-name
5223 . chop doc-report-name
5224 . nop \*[doc-report-name]\c
5225 . doc-finish-reference
5228 . if \n[doc-issue-count] \{\
5229 . unformat doc-issue-name
5230 . chop doc-issue-name
5231 . nop \*[doc-issue-name]\c
5232 . doc-finish-reference
5235 . if \n[doc-volume-count] \{\
5236 . unformat doc-volume-name
5237 . chop doc-volume-name
5238 . nop \*[doc-volume-name]\c
5239 . doc-finish-reference
5242 . if \n[doc-page-number-count] \{\
5243 . unformat doc-page-number-string
5244 . chop doc-page-number-string
5245 . nop \*[doc-page-number-string]\c
5246 . doc-finish-reference
5249 . if \n[doc-corporate-count] \{\
5250 . unformat doc-corporate-name
5251 . chop doc-corporate-name
5252 . nop \*[doc-corporate-name]\c
5253 . doc-finish-reference
5256 . if \n[doc-date-count] \{\
5259 . nop \*[doc-date]\c
5260 . doc-finish-reference
5263 . if \n[doc-optional-count] \{\
5264 . unformat doc-optional-string
5265 . chop doc-optional-string
5266 . nop \*[doc-optional-string]\c
5267 . doc-finish-reference
5270 . if \n[doc-reference-count] \
5271 . tm mdoc warning: unresolved reference problem
5273 . hy \n[doc-hyphen-flags]
5277 .\" NS doc-print-reference-authors macro
5278 .\" NS print out reference authors
5280 .\" NS local variables:
5284 .ds doc-str-dpra "and
5286 .de doc-print-reference-authors
5289 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5290 . unformat doc-author-name\n[doc-reg-dpra]
5291 . chop doc-author-name\n[doc-reg-dpra]
5292 . ie (\n[doc-author-count] > 2) \
5293 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5295 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5296 . nr doc-reg-dpra +1
5299 . unformat doc-author-name\n[doc-reg-dpra]
5300 . chop doc-author-name\n[doc-reg-dpra]
5301 . if (\n[doc-author-count] > 1) \
5302 . nop \)\*[doc-str-dpra]
5303 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5307 .\" NS doc-author-count global register
5308 .\" NS counter of author references
5310 .nr doc-author-count 0
5313 .\" NS doc-author-nameXXX global box
5314 .\" NS array of author names
5317 .\" NS doc-author-count
5319 .ds doc-author-name0
5322 .\" NS %A user macro
5323 .\" NS reference author(s)
5327 .\" NS doc-author-count
5328 .\" NS doc-curr-font
5329 .\" NS doc-curr-size
5330 .\" NS doc-macro-name
5331 .\" NS doc-reference-count
5333 .\" NS local variables:
5336 .\" NS width register `%A' set in doc-common
5339 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5340 . tm Usage: .%A author_name ... (#\n[.c])
5344 . nr doc-author-count +1
5345 . nr doc-reference-count +1
5347 . ds doc-macro-name %A
5348 . doc-parse-args \$@
5351 . nr doc-curr-font \n[.f]
5352 . nr doc-curr-size \n[.ps]
5354 . \" save to reference box
5355 . box doc-author-name\n[doc-author-count]
5364 .\" NS doc-book-count global register
5365 .\" NS counter of book references
5367 .nr doc-book-count 0
5370 .\" NS doc-book-name global box
5371 .\" NS string of collected book references
5376 .\" NS %B user macro
5377 .\" NS [reference] book name
5381 .\" NS doc-book-count
5382 .\" NS doc-curr-font
5383 .\" NS doc-curr-size
5384 .\" NS doc-macro-name
5385 .\" NS doc-reference-count
5387 .\" NS local variables:
5390 .\" NS width register `%B' set in doc-common
5393 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5394 . tm Usage: .%B book_name ... (#\n[.c])
5398 . if \n[doc-is-reference] \{\
5399 . nr doc-book-count +1
5400 . nr doc-reference-count +1
5403 . ds doc-macro-name %B
5404 . doc-parse-args \$@
5407 . nr doc-curr-font \n[.f]
5408 . nr doc-curr-size \n[.ps]
5410 . ie \n[doc-is-reference] \{\
5411 . \" append to reference box
5412 . boxa doc-book-name
5417 . nop \*[doc-Em-font]\c
5421 . nop \*[doc-Em-font]\c
5422 . doc-print-recursive
5427 .\" NS doc-date-count global register
5428 .\" NS counter of date references
5430 .nr doc-date-count 0
5433 .\" NS doc-date global box
5434 .\" NS string of collected date references
5439 .\" NS %D user macro
5440 .\" NS [reference] date
5444 .\" NS doc-curr-font
5445 .\" NS doc-curr-size
5446 .\" NS doc-date-count
5447 .\" NS doc-macro-name
5448 .\" NS doc-reference-count
5450 .\" NS local variables:
5453 .\" NS width register `%D' set in doc-common
5456 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5457 . tm Usage: .%D date ... (#\n[.c])
5461 . nr doc-date-count +1
5462 . nr doc-reference-count +1
5464 . ds doc-macro-name %D
5465 . doc-parse-args \$@
5468 . nr doc-curr-font \n[.f]
5469 . nr doc-curr-size \n[.ps]
5471 . \" append to reference box
5481 .\" NS doc-publisher-count global register
5482 .\" NS counter of publisher references
5484 .nr doc-publisher-count 0
5487 .\" NS doc-publisher-name global box
5488 .\" NS string of collected publisher references
5490 .ds doc-publisher-name
5493 .\" NS %I user macro
5494 .\" NS [reference] issuer/publisher name
5498 .\" NS doc-curr-font
5499 .\" NS doc-curr-size
5500 .\" NS doc-macro-name
5501 .\" NS doc-publisher-count
5502 .\" NS doc-reference-count
5504 .\" NS local variables:
5507 .\" NS width register `%I' set in doc-common
5510 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5511 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5515 . nr doc-publisher-count +1
5516 . nr doc-reference-count +1
5518 . ds doc-macro-name %I
5519 . doc-parse-args \$@
5522 . nr doc-curr-font \n[.f]
5523 . nr doc-curr-size \n[.ps]
5525 . \" append to reference box
5526 . boxa doc-publisher-name
5531 . nop \*[doc-Em-font]\c
5536 .\" NS doc-journal-count global register
5537 .\" NS counter of journal references
5539 .nr doc-journal-count 0
5542 .\" NS doc-journal-name global box
5543 .\" NS string of collected journal references
5545 .ds doc-journal-name
5548 .\" NS %J user macro
5549 .\" NS [reference] Journal Name
5553 .\" NS doc-curr-font
5554 .\" NS doc-curr-size
5555 .\" NS doc-journal-count
5556 .\" NS doc-macro-name
5557 .\" NS doc-reference-count
5559 .\" NS local variables:
5562 .\" NS width register `%J' set in doc-common
5565 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5566 . tm Usage: .%J journal_name ... (#\n[.c])
5570 . nr doc-journal-count +1
5571 . nr doc-reference-count +1
5573 . ds doc-macro-name %J
5574 . doc-parse-args \$@
5577 . nr doc-curr-font \n[.f]
5578 . nr doc-curr-size \n[.ps]
5580 . \" append to reference box
5581 . boxa doc-journal-name
5586 . nop \*[doc-Em-font]\c
5591 .\" NS doc-issue-count global register
5592 .\" NS counter of issue number references
5594 .nr doc-issue-count 0
5597 .\" NS doc-issue-name global box
5598 .\" NS string of collected issue number references
5603 .\" NS %N user macro
5604 .\" NS [reference] issue number
5608 .\" NS doc-curr-font
5609 .\" NS doc-curr-size
5610 .\" NS doc-issue-count
5611 .\" NS doc-macro-name
5612 .\" NS doc-reference-count
5614 .\" NS local variables:
5617 .\" NS width register `%N' set in doc-common
5620 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5621 . tm Usage: .%N issue_number ... (#\n[.c])
5625 . nr doc-issue-count +1
5626 . nr doc-reference-count +1
5628 . ds doc-macro-name %N
5629 . doc-parse-args \$@
5632 . nr doc-curr-font \n[.f]
5633 . nr doc-curr-size \n[.ps]
5635 . \" append to reference box
5636 . boxa doc-issue-name
5645 .\" NS doc-optional-count global register
5646 .\" NS counter of optional information references
5648 .nr doc-optional-count 0
5651 .\" NS doc-optional-string global box
5652 .\" NS string of collected optional information references
5654 .ds doc-optional-string
5657 .\" NS %O user macro
5658 .\" NS [reference] optional information
5662 .\" NS doc-curr-font
5663 .\" NS doc-curr-size
5664 .\" NS doc-macro-name
5665 .\" NS doc-optional-count
5666 .\" NS doc-reference-count
5668 .\" NS local variables:
5671 .\" NS width register `%O' set in doc-common
5674 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5675 . tm Usage: .%O optional_information ... (#\n[.c])
5679 . nr doc-optional-count +1
5680 . nr doc-reference-count +1
5682 . ds doc-macro-name %O
5683 . doc-parse-args \$@
5686 . nr doc-curr-font \n[.f]
5687 . nr doc-curr-size \n[.ps]
5689 . \" append to reference box
5690 . boxa doc-optional-string
5699 .\" NS doc-page-number-count global register
5700 .\" NS counter of page number references
5702 .nr doc-page-number-count 0
5705 .\" NS doc-page-number-string global box
5706 .\" NS string of collected page number references
5708 .ds doc-page-number-string
5711 .\" NS %P user macro
5712 .\" NS [reference] page numbers
5716 .\" NS doc-curr-font
5717 .\" NS doc-curr-size
5718 .\" NS doc-macro-name
5719 .\" NS doc-page-number-count
5720 .\" NS doc-reference-count
5722 .\" NS local variables:
5725 .\" NS width register `%P' set in doc-common
5728 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5729 . tm Usage: .%P page_number ... (#\n[.c])
5733 . nr doc-page-number-count +1
5734 . nr doc-reference-count +1
5736 . ds doc-macro-name %P
5737 . doc-parse-args \$@
5740 . nr doc-curr-font \n[.f]
5741 . nr doc-curr-size \n[.ps]
5743 . \" append to reference box
5744 . boxa doc-page-number-string
5753 .\" NS doc-corporate-count global register
5754 .\" NS counter of corporate references
5756 .nr doc-corporate-count 0
5759 .\" NS doc-corporate-name global box
5760 .\" NS string of collected corporate references
5762 .ds doc-corporate-name
5765 .\" NS %Q user macro
5766 .\" NS corporate or foreign author
5770 .\" NS doc-corporate-count
5771 .\" NS doc-curr-font
5772 .\" NS doc-curr-size
5773 .\" NS doc-macro-name
5774 .\" NS doc-reference-count
5776 .\" NS local variables:
5779 .\" NS width register `%Q' set in doc-common
5782 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5783 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5787 . nr doc-corporate-count +1
5788 . nr doc-reference-count +1
5790 . ds doc-macro-name %Q
5791 . doc-parse-args \$@
5794 . nr doc-curr-font \n[.f]
5795 . nr doc-curr-size \n[.ps]
5797 . \" append to reference box
5798 . boxa doc-corporate-name
5807 .\" NS doc-report-count global register
5808 .\" NS counter of report references
5810 .nr doc-report-count 0
5813 .\" NS doc-report-name global box
5814 .\" NS string of collected report references
5819 .\" NS %R user macro
5820 .\" NS [reference] report name
5824 .\" NS doc-curr-font
5825 .\" NS doc-curr-size
5826 .\" NS doc-macro-name
5827 .\" NS doc-reference-count
5828 .\" NS doc-report-count
5830 .\" NS local variables:
5833 .\" NS width register `%R' set in doc-common
5836 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5837 . tm Usage: .%R reference_report ... (#\n[.c])
5841 . nr doc-report-count +1
5842 . nr doc-reference-count +1
5844 . ds doc-macro-name %R
5845 . doc-parse-args \$@
5848 . nr doc-curr-font \n[.f]
5849 . nr doc-curr-size \n[.ps]
5851 . \" append to reference box
5852 . boxa doc-report-name
5861 .\" NS doc-reference-title-count global register
5862 .\" NS counter of reference title references
5864 .nr doc-reference-title-count 0
5867 .\" NS doc-reference-title-name global box
5868 .\" NS string of collected reference title references
5870 .ds doc-reference-title-name
5873 .\" NS doc-reference-title-name-for-book global box
5874 .\" NS string of collected reference title references
5875 .\" NS (saved with another font; this is a shortcoming of groff)
5877 .ds doc-reference-title-name-for-book
5880 .\" NS %T user macro
5881 .\" NS reference title
5885 .\" NS doc-curr-font
5886 .\" NS doc-curr-size
5887 .\" NS doc-macro-name
5888 .\" NS doc-reference-title-count
5889 .\" NS doc-report-count
5891 .\" NS local variables:
5894 .\" NS width register `%T' set in doc-common
5897 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5898 . tm Usage: .%T reference_title ... (#\n[.c])
5902 . if \n[doc-is-reference] \{\
5903 . nr doc-reference-title-count +1
5904 . nr doc-reference-count +1
5907 . ds doc-macro-name %T
5908 . doc-parse-args \$@
5911 . nr doc-curr-font \n[.f]
5912 . nr doc-curr-size \n[.ps]
5913 . ie \n[doc-is-reference] \{\
5914 . \" append to reference box
5915 . boxa doc-reference-title-name-for-book
5920 . nop \*[doc-No-font]\c
5923 . \" do it a second time with another font
5924 . ds doc-macro-name %T
5925 . doc-parse-args \$@
5928 . nr doc-curr-font \n[.f]
5929 . nr doc-curr-size \n[.ps]
5930 . boxa doc-reference-title-name
5935 . nop \*[doc-Em-font]\c
5939 . nop \*[doc-Em-font]\c
5940 . doc-print-recursive
5945 .\" NS doc-volume-count global register
5946 .\" NS counter of reference title references
5948 .nr doc-volume-count 0
5951 .\" NS doc-volume-name global box
5952 .\" NS string of collected volume references
5957 .\" NS %V user macro
5958 .\" NS reference volume
5962 .\" NS doc-curr-font
5963 .\" NS doc-curr-size
5964 .\" NS doc-macro-name
5965 .\" NS doc-reference-title-count
5966 .\" NS doc-volume-count
5968 .\" NS local variables:
5971 .\" NS width register `%V' set in doc-common
5974 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5975 . tm Usage: .%V volume ... (#\n[.c])
5979 . nr doc-volume-count +1
5980 . nr doc-reference-count +1
5982 . ds doc-macro-name %V
5983 . doc-parse-args \$@
5986 . nr doc-curr-font \n[.f]
5987 . nr doc-curr-size \n[.ps]
5989 . \" append to reference box
5990 . boxa doc-volume-name
5999 .\" NS doc-do-references macro
6000 .\" NS reference recursion routine
6005 .\" NS local variables:
6009 .de doc-do-references
6010 . if !\n[doc-is-reference] \
6011 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6013 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6015 . ie (\n[doc-reg-ddr1] == 1) \{\
6016 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6017 . doc-append-arg \c 3
6018 . \*[doc-arg\n[doc-arg-ptr]]
6021 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6023 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6024 . \" finish reference box
6032 . nr doc-reg-ddr \n[doc-arg-ptr]
6034 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6040 .\" NS Hf user macro
6041 .\" NS source include header files.
6044 .\" NS doc-curr-font
6045 .\" NS doc-curr-size
6047 .\" NS width register `Hf' set in doc-common
6050 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6062 . Usage: .Hf file (#\n[.c])
6066 .\" NS doc-have-author global register (bool)
6069 .nr doc-have-author 0
6072 .\" NS An user macro
6077 .\" NS doc-curr-font
6078 .\" NS doc-curr-size
6079 .\" NS doc-have-author
6080 .\" NS doc-macro-name
6082 .\" NS width register `An' set in doc-common
6085 . if !\n[doc-arg-limit] \{\
6087 . ie "\$1"-nosplit" \
6088 . nr doc-in-authors-section 0
6089 . el \{ .ie "\$1"-split" \
6090 . nr doc-in-authors-section 1
6092 . ds doc-macro-name An
6093 . doc-parse-args \$@
6096 . tm1 "Usage: .An {-nosplit | -split}
6097 . tm1 .An author_name ... (#\n[.c])
6100 . if \n[doc-in-authors-section] \{\
6101 . ie \n[doc-have-author] \
6104 . nr doc-have-author 1
6107 . if \n[doc-arg-limit] \{\
6109 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6110 . nr doc-curr-font \n[.f]
6111 . nr doc-curr-size \n[.ps]
6112 . doc-print-recursive
6115 . tm Usage: .An author_name ... (#\n[.c])
6121 .\" NS Rv user macro
6122 .\" NS return values
6124 .\" NS width register `Rv' set in doc-common
6126 .\" NS local variables:
6127 .\" NS doc-str-Rv-std-prefix
6128 .\" NS doc-str-Rv-std-suffix
6129 .\" NS doc-str-Rv-stds-prefix
6130 .\" NS doc-str-Rv-stds-and
6131 .\" NS doc-str-Rv-stds-suffix
6132 .\" NS doc-str-Rv-std0
6134 .ds doc-str-Rv-std-prefix "The
6135 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6136 .as doc-str-Rv-std-suffix " otherwise the value\~-1 is returned and
6137 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6138 .as doc-str-Rv-std-suffix " is set to indicate the error.
6140 .ds doc-str-Rv-stds-prefix "The
6141 .ds doc-str-Rv-stds-and "and
6142 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6143 .as doc-str-Rv-stds-suffix " otherwise the value\~-1 is returned and
6144 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6145 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6147 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6148 .as doc-str-Rv-std0 " otherwise the value\~-1 is returned and
6149 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6150 .as doc-str-Rv-std0 " is set to indicate the error.
6154 .\" XXX: what does this function without `-std'?
6156 . if \n[doc-arg-limit] \{\
6157 . tm Usage: .Rv not callable by other macros (#\n[.c])
6163 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6168 . nr doc-reg-Rv \*[doc-section]
6169 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6170 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6173 . ie (\n[.$] > 1) \{\
6174 . nop \)\*[doc-str-Rv-stds-prefix]
6176 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6178 . Fn \$\n[doc-reg-Rv] ,
6180 . Fn \$\n[doc-reg-Rv]
6183 . nop \)\*[doc-str-Rv-stds-and]
6185 . nop \)\*[doc-str-Rv-stds-suffix]
6187 . el \{ .ie (\n[.$] == 1) \{\
6188 . nop \)\*[doc-str-Rv-std-prefix]
6190 . nop \)\*[doc-str-Rv-std-suffix]
6193 . nop \)\*[doc-str-Rv-std0]
6198 .\" NS Ex user macro
6201 .\" NS width register `Ex' set in doc-common
6203 .\" NS local variables:
6204 .\" NS doc-str-Ex-std-prefix
6205 .\" NS doc-str-Ex-std-suffix
6207 .ds doc-str-Ex-std-prefix "The
6208 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6209 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6211 .ds doc-str-Ex-stds-prefix "The
6212 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6213 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6214 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6218 .\" XXX: what does this function without `-std'?
6220 . if \n[doc-arg-limit] \{\
6221 . tm Usage: .Ex not callable by other macros (#\n[.c])
6227 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6232 . nr doc-reg-Ex \*[doc-section]
6233 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6234 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6237 . ie (\n[.$] > 1) \{\
6238 . nop \)\*[doc-str-Ex-stds-prefix]
6240 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6242 . Nm \$\n[doc-reg-Ex] ,
6244 . Nm \$\n[doc-reg-Ex]
6247 . nop \)\*[doc-str-Ex-stds-and]
6249 . nop \)\*[doc-str-Ex-stds-suffix]
6252 . nop \)\*[doc-str-Ex-std-prefix]
6254 . nop \)\*[doc-str-Ex-std-suffix]
6259 .\" NS Mt user macro
6260 .\" NS mailto (for conversion to HTML)
6263 . \" XXX: error handling missing
6268 .\" NS Lk user macro
6269 .\" NS link (for conversion to HTML)
6271 .\" NS local variables:
6276 . ds doc-str-Lk Sy \$@
6278 . ie (\n[.$] > 1) \{\
6279 . doc-get-arg-type \$2
6280 . ie (\n[doc-arg-type] < 3) \{\
6282 . ds doc-str-Lk Sy "\$1"
6283 . doc-get-width "\$1"
6286 . as doc-str-Lk " \$@
6289 . doc-get-width "\$1"
6292 . doc-get-width "\$1"
6298 . ie (\n[doc-width] >= \n[doc-reg-Lk]) \
6305 .\" NS doc-defunct-macro macro
6306 .\" NS this is the skeleton for defunct macros
6309 .de doc-defunct-macro
6310 . tmc mdoc error: .\$0 defunct
6311 . if d doc-\$0-usage \
6312 . tmc , \*[doc-\$0-usage]
6319 .als Db doc-defunct-macro
6321 .als Ds doc-defunct-macro
6323 .als Or doc-defunct-macro
6324 .ds doc-Or-usage use `|'
6326 .als Sf doc-defunct-macro
6327 .ds doc-Sf-usage use .Pf or .Ns
6333 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6334 . tm1 " Should this have been `.Em ...'?
6339 .\" NS doc-empty-line macro
6340 .\" NS emit warning and print empty line
6343 . if !\n[doc-display-depth] \
6344 . tm mdoc warning: Empty input line #\n[.c]
6354 .\" load local modifications