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] < 117) \
61 . ab You need GNU troff version 1.17 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 someting 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 . ie "\*[doc-display-type-stack\n[doc-display-depth]]"ragged" \
2703 . sp \n[doc-display-vertical]u
2705 ' sp \n[doc-display-vertical]u
2711 . if !"\*[doc-display-file]"" \
2712 . so \*[doc-display-file]
2714 . nr doc-is-compact 0
2715 . ds doc-display-file
2719 .\" NS doc-do-Bd-args macro
2720 .\" NS resolve remaining .Bd arguments
2723 .\" NS doc-display-file
2724 .\" NS doc-display-indent-stackXXX
2725 .\" NS doc-is-compact
2727 .\" NS local variables:
2729 .\" NS doc-reg-ddBa1
2730 .\" NS doc-reg-ddBa2
2731 .\" NS doc-reg-ddBa3
2732 .\" NS doc-reg-ddBa4
2738 . ie "\$1"-offset" \{\
2742 . nr doc-display-indent-stack\n[doc-display-depth] 0
2743 . el \{ .ie "\$2"right" \
2744 . nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
2745 . el \{ .ie "\$2"center" \
2746 . nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
2747 . el \{ .ie "\$2"indent" \
2748 . nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
2749 . el \{ .ie "\$2"indent-two" \
2750 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
2755 . \" not a known keyword
2756 . if (\n[doc-reg-ddBa] == 1) \{\
2759 . nr doc-reg-ddBa1 0
2760 . if \B
\a(\$2)
\a \{\
2761 . \" disable warnings related to scaling indicators (32)
2762 . nr doc-reg-ddBa2 \n[.warn]
2763 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
2765 . \" values without a scaling indicator are taken as strings;
2766 . \" we test whether the parameter string with and without the last
2767 . \" character yields identical numerical results (ignoring the
2768 . \" scaling indicator)
2769 . ds doc-str-ddBa "\$2
2770 . substring doc-str-ddBa 1 -1
2771 . if \B
\a(\*[doc-str-ddBa])
\a \{\
2772 . nr doc-reg-ddBa3 (;(\$2))
2773 . nr doc-reg-ddBa4 (\*[doc-str-ddBa])
2774 . if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
2775 . nr doc-reg-ddBa1 1
2778 . \" enable all warnings again
2779 . warn \n[doc-reg-ddBa2]
2782 . ie \n[doc-reg-ddBa1] \
2783 . nr doc-display-indent-stack\n[doc-display-depth] \$2
2785 . doc-get-width "\$2"
2786 . ie (\n[doc-width] <= 3) \{\
2787 . \" if the offset parameter is a macro, use the macro's
2788 . \" width as specified in doc-common
2789 . doc-get-arg-type "\$2"
2790 . ie (\n[doc-arg-type] == 1) \
2791 . nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
2793 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2796 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2799 . el \{ .ie "\$1"-compact" \
2800 . nr doc-is-compact 1
2801 . el \{ .ie "\$1"-file" \{\
2803 . ds doc-display-file "\$2
2807 . tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
2810 . tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
2813 . if (\n[doc-reg-ddBa] < \n[.$]) \{\
2814 . shift \n[doc-reg-ddBa]
2815 . doc-do-Bd-args \$@
2820 .\" NS Ed user macro
2824 .\" NS doc-display-depth
2825 .\" NS doc-display-indent-stackXXX
2826 .\" NS doc-display-type-stackXXX
2827 .\" NS doc-macro-name
2829 .\" NS width register `Ed' set in doc-common
2832 . ds doc-macro-name Ed
2836 . if !\n[doc-display-depth] \{\
2837 . tm mdoc warning: Extraneous .Ed (#\n[.c])
2838 . nr doc-display-depth 1
2841 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
2842 . ft \n[doc-display-ft-stack\n[doc-display-depth]]
2843 . ps \n[doc-display-ps-stack\n[doc-display-depth]]u
2846 . in -\n[doc-display-indent-stack\n[doc-display-depth]]u
2848 . \" restore saved adjustment and fill modes
2849 . ie \n[doc-display-fi-stack\n[doc-display-depth]] \
2853 . ad \n[doc-display-ad-stack\n[doc-display-depth]]
2855 . nr doc-display-indent-stack\n[doc-display-depth] 0
2856 . ds doc-display-type-stack\n[doc-display-depth]
2857 . nr doc-display-depth -1
2861 .\" NS doc-list-type-stackXXX global string
2862 .\" NS stack of list types
2865 .\" NS doc-list-depth
2867 .ds doc-list-type-stack1
2870 .\" NS doc-list-indent-stackXXX global register
2871 .\" NS stack of list indentation values
2874 .\" NS doc-list-depth
2876 .nr doc-list-indent-stack1 0
2879 .\" NS doc-list-have-indent-stackXXX global register (bool)
2880 .\" NS an indentation value is active
2883 .\" NS doc-list-depth
2885 .nr doc-list-have-indent-stack1 0
2888 .\" NS Bl user macro
2891 .\" NS width register `Bl' set in doc-common
2896 .\" NS doc-list-depth
2897 .\" NS doc-list-have-indent-stackXXX
2898 .\" NS doc-list-indent-stackXXX
2899 .\" NS doc-list-type-stackXXX
2900 .\" NS doc-macro-name
2902 .\" NS doc-num-columns
2904 .\" NS local variables:
2913 . ds doc-macro-name Bl
2914 . nr doc-list-depth +1
2917 . ie "\$1"-hang" \{\
2918 . ds doc-list-type-stack\n[doc-list-depth] hang-list
2919 . nr doc-list-indent-stack\n[doc-list-depth] 6n
2920 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2922 . el \{ .ie "\$1"-tag" \{\
2923 . ds doc-list-type-stack\n[doc-list-depth] tag-list
2924 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2926 . el \{ .ie "\$1"-item" \{\
2927 . ds doc-list-type-stack\n[doc-list-depth] item-list
2928 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2930 . el \{ .ie "\$1"-enum" \{\
2931 . ds doc-list-type-stack\n[doc-list-depth] enum-list
2932 . nr doc-list-indent-stack\n[doc-list-depth] 3n
2933 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2935 . el \{ .ie "\$1"-bullet" \{\
2936 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
2937 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2938 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2940 . el \{ .ie "\$1"-dash" \{\
2941 . ds doc-list-type-stack\n[doc-list-depth] dash-list
2942 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2943 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2945 . el \{ .ie "\$1"-hyphen" \{\
2946 . ds doc-list-type-stack\n[doc-list-depth] dash-list
2947 . nr doc-list-indent-stack\n[doc-list-depth] 2n
2948 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2950 . el \{ .ie "\$1"-inset" \{\
2951 . ds doc-list-type-stack\n[doc-list-depth] inset-list
2952 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2954 . el \{ .ie "\$1"-diag" \{\
2955 . ds doc-list-type-stack\n[doc-list-depth] diag-list
2957 . el \{ .ie "\$1"-ohang" \{\
2958 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
2959 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2961 . el \{ .ie "\$1"-column" \{\
2962 . ds doc-list-type-stack\n[doc-list-depth] column-list
2966 . tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
2967 . tm1 " in .Bl macro
2970 . \}\}\}\}\}\}\}\}\}\}\}
2972 . \" we have seen a list type
2973 . if !\n[doc-arg-ptr] \{\
2976 . nr doc-list-depth -1
2982 . \" fill argument vector
2984 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
2985 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
2986 . \" dummy type and space so that doc-save-global-vars() doesn't warn
2987 . nr doc-type\n[doc-reg-Bl] 0
2988 . ds doc-space\n[doc-reg-Bl]
2992 . doc-increment-list-stack
2995 . nr doc-arg-limit \n[.$]
2999 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
3001 . \" initialize column list
3002 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3003 . doc-set-column-tab \n[doc-num-columns]
3004 ' in -\n[doc-column-indent-width]u
3005 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3006 . sp \n[doc-display-vertical]u
3009 . nr doc-num-columns 0
3016 .\" NS doc-Bl-usage macro
3019 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3020 . tm1 " [-width <string>]
3021 . tm1 " [-offset <string>] [-compact]
3022 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3023 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3024 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3028 .\" NS doc-do-Bl-args macro
3029 .\" NS resolve remaining .Bl arguments
3034 .\" NS doc-compact-list-stackXXX
3035 .\" NS doc-list-indent-stackXXX
3036 .\" NS doc-list-offset-stackXXX
3037 .\" NS doc-num-columns
3038 .\" NS doc-tag-prefix-stackXXX
3039 .\" NS doc-tag-width-stackXXX
3041 .\" NS local variables:
3045 .\" NS doc-reg-dBla1
3046 .\" NS doc-reg-dBla2
3047 .\" NS doc-reg-dBla3
3048 .\" NS doc-reg-dBla4
3050 .\" NS doc-str-dBla1
3055 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
3058 . \" avoid a warning message in case e.g. `-offset' has no parameter
3059 . nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
3060 . if !d doc-arg\n[doc-reg-dBla] \
3061 . ds doc-arg\n[doc-reg-dBla]
3065 . ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
3066 . nr doc-compact-list-stack\n[doc-list-depth] 1
3068 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
3069 . ie (\n[doc-list-depth] > 1) \{\
3070 . nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
3071 . ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
3072 . as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
3073 . length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
3074 . nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
3077 . tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
3080 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
3082 . ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
3084 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3085 . substring doc-str-dBla 1 1
3086 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3087 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3088 . substring doc-str-dBla 2
3089 . doc-first-parameter \*[doc-str-dBla]
3090 . doc-get-width "\*[doc-str-dfp]
3091 . doc-get-arg-type "\*[doc-str-dfp]
3092 . ie (\n[doc-arg-type] == 1) \
3093 . nr doc-reg-dBla1 1
3095 . nr doc-reg-dBla1 0
3098 . nr doc-reg-dBla1 0
3099 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3101 . ie \n[doc-reg-dBla1] \{\
3102 . \" execute string in a box to get the width of the diversion
3103 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3104 . doc-save-global-vars
3111 . nop \*[doc-str-dBla]
3115 . doc-restore-global-vars
3116 . doc-get-width \h'\n[dl]u'
3117 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3120 . \" test whether argument is a valid numeric expression
3121 . nr doc-reg-dBla1 0
3122 . if \B
\a(\*[doc-str-dBla])
\a \{\
3123 . \" disable warnings related to scaling indicators (32)
3124 . nr doc-reg-dBla2 \n[.warn]
3125 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3127 . \" values without a scaling indicator are taken as strings;
3128 . \" we test whether the parameter string with and without the last
3129 . \" character yields identical numerical results (ignoring the
3130 . \" scaling indicator)
3131 . ds doc-str-dBla1 "\*[doc-str-dBla]
3132 . substring doc-str-dBla1 1 -1
3133 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3134 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3135 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3136 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3137 . nr doc-reg-dBla1 1
3140 . \" enable all warnings again
3141 . warn \n[doc-reg-dBla2]
3144 . ie \n[doc-reg-dBla1] \
3145 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3147 . doc-get-arg-width \n[doc-arg-ptr]
3148 . ie (\n[doc-width] == 2) \{\
3149 . \" if the width parameter is a macro, use the macro's
3150 . \" width as specified in doc-common
3151 . doc-get-arg-type \*[doc-str-dBla]
3152 . ie (\n[doc-arg-type] == 1) \
3153 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3155 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3158 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3161 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3164 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3165 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3167 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3168 . nr doc-reg-dBla1 0
3169 . if \B
\a(\*[doc-str-dBla])
\a \{\
3170 . nr doc-reg-dBla2 \n[.warn]
3171 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3173 . ds doc-str-dBla1 "\*[doc-str-dBla]
3174 . substring doc-str-dBla1 1 -1
3175 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3176 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3177 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3178 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3179 . nr doc-reg-dBla1 1
3182 . warn \n[doc-reg-dBla2]
3185 . ie \n[doc-reg-dBla1] \
3186 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3188 . doc-get-arg-width \n[doc-arg-ptr]
3189 . ie (\n[doc-width] <= 3) \{\
3190 . \" if the offset parameter is a macro, use the macro's
3191 . \" width as specified in doc-common
3192 . doc-get-arg-type \*[doc-str-dBla]
3193 . ie (\n[doc-arg-type] == 1) \
3194 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3196 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3199 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3205 . \" not a known keyword, so it specifies the width of the next column
3206 . \" (if it is a column list)
3207 . if !\n[doc-reg-dBla] \{\
3208 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3209 . nr doc-num-columns +1
3210 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3211 . substring doc-str-dBla 1 1
3212 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3213 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3214 . substring doc-str-dBla 2
3215 . doc-first-parameter \*[doc-str-dBla]
3216 . doc-get-width "\*[doc-str-dfp]
3217 . doc-get-arg-type "\*[doc-str-dfp]
3218 . ie (\n[doc-arg-type] == 1) \
3219 . nr doc-reg-dBla1 1
3221 . nr doc-reg-dBla1 0
3224 . nr doc-reg-dBla1 0
3225 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3227 . ie \n[doc-reg-dBla1] \{\
3228 . \" execute string in a box to get the width of the diversion
3229 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3230 . doc-save-global-vars
3237 . nop \*[doc-str-dBla]
3241 . doc-restore-global-vars
3242 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3245 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3248 . tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
3249 . tm1 " in .Bl macro (#\n[.c])
3252 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3257 .\" NS doc-save-global-vars macro
3258 .\" NS save all global variables
3260 .\" NS local variables:
3263 .de doc-save-global-vars
3264 . ds doc-macro-name-saved "\*[doc-macro-name]
3265 . nr doc-arg-limit-saved \n[doc-arg-limit]
3266 . nr doc-num-args-saved \n[doc-num-args]
3267 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3270 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3271 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3272 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3273 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3274 . nr doc-reg-dsgv +1
3277 . nr doc-curr-font-saved \n[doc-curr-font]
3278 . nr doc-curr-size-saved \n[doc-curr-size]
3279 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3280 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3281 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3282 . nr doc-have-decl-saved \n[doc-have-decl]
3283 . nr doc-have-var-saved \n[doc-have-var]
3284 . ds doc-command-name-saved "\*[doc-command-name]
3285 . ds doc-quote-left-saved "\*[doc-quote-left]
3286 . ds doc-quote-right-saved "\*[doc-quote-right]
3287 . nr doc-nesting-level-saved \n[doc-nesting-level]
3288 . nr doc-in-list-saved \n[doc-in-list]
3289 . ds doc-space-saved "\*[doc-space]
3290 . ds doc-saved-space-saved "\*[doc-saved-space]
3291 . nr doc-space-mode-saved \n[doc-space-mode]
3292 . nr doc-have-space-saved \n[doc-have-space]
3293 . nr doc-have-slot-saved \n[doc-have-slot]
3294 . nr doc-keep-type-saved \n[doc-keep-type]
3295 . nr doc-display-depth-saved \n[doc-display-depth]
3296 . nr doc-is-compact-saved \n[doc-is-compact]
3299 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3300 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3301 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3302 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3303 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3304 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3305 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3306 . nr doc-reg-dsgv +1
3309 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3312 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3313 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3314 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3315 . nr doc-reg-dsgv +1
3318 . nr doc-list-depth-saved \n[doc-list-depth]
3321 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3322 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3323 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3324 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3325 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3326 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3327 . ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
3328 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3329 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3330 . nr doc-reg-dsgv +1
3333 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3334 . nr doc-curr-type-saved \n[doc-curr-type]
3335 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3336 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3337 . nr doc-num-columns-saved \n[doc-num-columns]
3338 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3339 . nr doc-is-func-saved \n[doc-is-func]
3340 . nr doc-have-old-func-saved \n[doc-have-old-func]
3341 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3342 . ds doc-func-arg-saved "\*[doc-func-arg]
3343 . nr doc-num-func-args-saved \n[doc-num-func-args]
3344 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3345 . nr doc-have-func-saved \n[doc-have-func]
3346 . nr doc-is-reference-saved \n[doc-is-reference]
3347 . nr doc-reference-count-saved \n[doc-reference-count]
3348 . nr doc-author-count-saved \n[doc-author-count]
3351 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3352 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3353 . nr doc-reg-dsgv +1
3356 . nr doc-book-count-saved \n[doc-book-count]
3357 . ds doc-book-name-saved "\*[doc-book-name]
3358 . nr doc-date-count-saved \n[doc-date-count]
3359 . ds doc-date-saved "\*[doc-date]
3360 . nr doc-publisher-count-saved \n[doc-publisher-count]
3361 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3362 . nr doc-journal-count-saved \n[doc-journal-count]
3363 . ds doc-journal-name-saved "\*[doc-journal-name]
3364 . nr doc-issue-count-saved \n[doc-issue-count]
3365 . ds doc-issue-name-saved "\*[doc-issue-name]
3366 . nr doc-optional-count-saved \n[doc-optional-count]
3367 . ds doc-optional-string-saved "\*[doc-optional-string]
3368 . nr doc-page-number-count-saved \n[doc-page-number-count]
3369 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3370 . nr doc-corporate-count-saved \n[doc-corporate-count]
3371 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3372 . nr doc-report-count-saved \n[doc-report-count]
3373 . ds doc-report-name-saved "\*[doc-report-name]
3374 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3375 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3376 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3377 . nr doc-volume-count-saved \n[doc-volume-count]
3378 . ds doc-volume-name-saved "\*[doc-volume-name]
3379 . nr doc-have-author-saved \n[doc-have-author]
3381 . ds doc-document-title-saved "\*[doc-document-title]
3382 . ds doc-volume-saved "\*[doc-volume]
3383 . ds doc-section-saved "\*[doc-section]
3384 . ds doc-operating-system-saved "\*[doc-operating-system]
3385 . ds doc-date-string-saved "\*[doc-date-string]
3386 . nr doc-header-space-saved \n[doc-header-space]
3387 . nr doc-footer-space-saved \n[doc-footer-space]
3388 . nr doc-display-vertical-saved \n[doc-display-vertical]
3389 . ds doc-header-string-saved "\*[doc-header-string]
3390 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3391 . nr doc-in-files-section-saved \n[doc-in-files-section]
3392 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3396 .\" NS doc-restore-global-vars macro
3397 .\" NS restore all global variables
3399 .\" NS local variables:
3402 .de doc-restore-global-vars
3403 . ds doc-macro-name "\*[doc-macro-name-saved]
3404 . nr doc-arg-limit \n[doc-arg-limit-saved]
3405 . nr doc-num-args \n[doc-num-args-saved]
3406 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3409 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3410 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3411 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3412 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3413 . nr doc-reg-drgv +1
3416 . nr doc-curr-font \n[doc-curr-font-saved]
3417 . nr doc-curr-size \n[doc-curr-size-saved]
3418 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3419 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3420 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3421 . nr doc-have-decl \n[doc-have-decl-saved]
3422 . nr doc-have-var \n[doc-have-var-saved]
3423 . ds doc-command-name "\*[doc-command-name-saved]
3424 . ds doc-quote-left "\*[doc-quote-left-saved]
3425 . ds doc-quote-right "\*[doc-quote-right-saved]
3426 . nr doc-nesting-level \n[doc-nesting-level-saved]
3427 . nr doc-in-list \n[doc-in-list-saved]
3428 . ds doc-space "\*[doc-space-saved]
3429 . ds doc-saved-space "\*[doc-saved-space-saved]
3430 . nr doc-space-mode \n[doc-space-mode-saved]
3431 . nr doc-have-space \n[doc-have-space-saved]
3432 . nr doc-have-slot \n[doc-have-slot-saved]
3433 . nr doc-keep-type \n[doc-keep-type-saved]
3434 . nr doc-display-depth \n[doc-display-depth-saved]
3435 . nr doc-is-compact \n[doc-is-compact-saved]
3438 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3439 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3440 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3441 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3442 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3443 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3444 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3445 . nr doc-reg-drgv +1
3448 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3451 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3452 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3453 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3454 . nr doc-reg-drgv +1
3457 . nr doc-list-depth \n[doc-list-depth-saved]
3460 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3461 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3462 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3463 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3464 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3465 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3466 . ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
3467 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3468 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3469 . nr doc-reg-drgv +1
3472 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3473 . nr doc-curr-type \n[doc-curr-type-saved]
3474 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3475 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3476 . nr doc-num-columns \n[doc-num-columns-saved]
3477 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3478 . nr doc-is-func \n[doc-is-func-saved]
3479 . nr doc-have-old-func \n[doc-have-old-func-saved]
3480 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3481 . ds doc-func-arg "\*[doc-func-arg-saved]
3482 . nr doc-num-func-args \n[doc-num-func-args-saved]
3483 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3484 . nr doc-have-func \n[doc-have-func-saved]
3485 . nr doc-is-reference \n[doc-is-reference-saved]
3486 . nr doc-reference-count \n[doc-reference-count-saved]
3487 . nr doc-author-count \n[doc-author-count-saved]
3490 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3491 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3492 . nr doc-reg-drgv +1
3495 . nr doc-book-count \n[doc-book-count-saved]
3496 . ds doc-book-name "\*[doc-book-name-saved]
3497 . nr doc-date-count \n[doc-date-count-saved]
3498 . ds doc-date "\*[doc-date-saved]
3499 . nr doc-publisher-count \n[doc-publisher-count-saved]
3500 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3501 . nr doc-journal-count \n[doc-journal-count-saved]
3502 . ds doc-journal-name "\*[doc-journal-name-saved]
3503 . nr doc-issue-count \n[doc-issue-count-saved]
3504 . ds doc-issue-name "\*[doc-issue-name-saved]
3505 . nr doc-optional-count \n[doc-optional-count-saved]
3506 . ds doc-optional-string "\*[doc-optional-string-saved]
3507 . nr doc-page-number-count \n[doc-page-number-count-saved]
3508 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3509 . nr doc-corporate-count \n[doc-corporate-count-saved]
3510 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3511 . nr doc-report-count \n[doc-report-count-saved]
3512 . ds doc-report-name "\*[doc-report-name-saved]
3513 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3514 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3515 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3516 . nr doc-volume-count \n[doc-volume-count-saved]
3517 . ds doc-volume-name "\*[doc-volume-name-saved]
3518 . nr doc-have-author \n[doc-have-author-saved]
3520 . ds doc-document-title "\*[doc-document-title-saved]
3521 . ds doc-volume "\*[doc-volume-saved]
3522 . ds doc-section "\*[doc-section-saved]
3523 . ds doc-operating-system "\*[doc-operating-system-saved]
3524 . ds doc-date-string "\*[doc-date-string-saved]
3525 . nr doc-header-space \n[doc-header-space-saved]
3526 . nr doc-footer-space \n[doc-footer-space-saved]
3527 . nr doc-display-vertical \n[doc-display-vertical-saved]
3528 . ds doc-header-string "\*[doc-header-string-saved]
3529 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3530 . nr doc-in-files-section \n[doc-in-files-section-saved]
3531 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3535 .\" NS El user macro
3539 .\" NS doc-list-depth
3540 .\" NS doc-macro-name
3542 .\" NS local variables:
3545 .\" NS width register `El' set in doc-common
3549 . tm Usage: .El (does not take arguments) (#\n[.c])
3553 . ds doc-macro-name El
3554 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3556 . ie "\*[doc-str-El]"diag-list" \
3558 . el \{ .ie "\*[doc-str-El]"column-list" \
3559 . doc-end-column-list
3560 . el \{ .ie "\*[doc-str-El]"item-list" \
3562 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3564 . el \{ .ie "\*[doc-str-El]"inset-list" \
3574 .\" NS doc-saved-Pa-font global string
3575 .\" NS saved doc-Pa-font string for section FILES (no underline if
3578 .ds doc-saved-Pa-font
3581 .\" NS doc-curr-type global register
3582 .\" NS current argument type
3587 .\" NS doc-curr-arg global string
3588 .\" NS current argument
3593 .\" NS doc-item-boxXXX global box
3594 .\" NS item boxes associated list depth
3597 .\" NS doc-list-depth
3600 .\" NS It user macro
3607 .\" NS doc-curr-type
3609 .\" NS doc-macro-name
3611 .\" NS doc-saved-Pa-font
3613 .\" NS local variables:
3616 .\" NS doc-XXX-list-type
3618 .\" NS width register `It' set in doc-common
3620 .nr doc-bullet-list-type 1
3621 .nr doc-column-list-type 0
3622 .nr doc-dash-list-type 1
3623 .nr doc-diag-list-type 0
3624 .nr doc-enum-list-type 1
3625 .nr doc-hang-list-type 2
3626 .nr doc-inset-list-type 2
3627 .nr doc-item-list-type 1
3628 .nr doc-ohang-list-type 2
3629 .nr doc-tag-list-type 2
3632 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3634 . if "\*[doc-str-It]"" \
3635 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3637 . if \n[doc-nesting-level] \{\
3638 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3647 . ds doc-macro-name It
3649 . \" fill argument vector
3651 . while (\n[doc-reg-It] <= \n[.$]) \{\
3652 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3656 . nr doc-num-args \n[.$]
3660 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3662 . if \n[doc-reg-It] \{\
3664 . box doc-item-box\n[doc-list-depth]
3665 . ev doc-item-env\n[doc-list-depth]
3671 . ie (\n[doc-reg-It] == 1) \{\
3673 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3674 . tm1 " don't take arguments (#\n[.c])
3678 . if (\n[doc-reg-It] == 2) \{\
3679 . \" handle list types with arguments
3680 . doc-parse-arg-vector
3684 . nr doc-curr-type \n[doc-type1]
3685 . ds doc-curr-arg "\*[doc-arg1]
3687 . if \n[doc-in-files-section] \{\
3688 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3690 . ds doc-Pa-font "\*[doc-No-font]
3693 . ie (\n[doc-type1] == 1) \
3697 . doc-print-recursive
3700 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3701 . tm1 " require arguments (#\n[.c])
3705 . \" the previous call of `.doc-print-recursive' can contain calls to
3706 . \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
3707 . if !\n[doc-nesting-level] \
3708 . doc-\*[doc-str-It]
3712 .\" NS doc-inset-list macro
3713 .\" NS .It item of list-type inset
3719 . \" finish item box
3723 . unformat doc-item-box\n[doc-list-depth]
3725 . doc-set-vertical-and-indent 0
3729 . doc-item-box\n[doc-list-depth]
3731 . if \n[doc-in-files-section] \
3733 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3740 .\" NS doc-hang-list macro
3741 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3744 .\" NS doc-have-space
3747 .\" NS local variables:
3752 . \" finish item box
3756 . unformat doc-item-box\n[doc-list-depth]
3758 . doc-set-vertical-and-indent 1
3759 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3760 . ti -\n[doc-reg-dhl]u
3763 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3764 . doc-item-box\n[doc-list-depth]
3766 . chop doc-item-box\n[doc-list-depth]
3767 . nr doc-reg-dhl1 \n[.k]u
3768 . nop \*[doc-item-box\n[doc-list-depth]]\c
3769 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3770 . nr doc-have-space 1
3773 . if \n[doc-in-files-section] \
3775 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3782 .\" NS doc-ohang-list macro
3783 .\" NS .It item of list-type overhanging tag
3789 . \" finish item box
3793 . unformat doc-item-box\n[doc-list-depth]
3795 . doc-set-vertical-and-indent 0
3797 . doc-item-box\n[doc-list-depth]
3800 . if \n[doc-in-files-section] \
3802 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3809 .\" NS doc-item-list macro
3810 .\" NS .It item of list-type [empty tag]
3813 . \" finish (dummy) item box
3818 . doc-set-vertical-and-indent 0
3825 .\" NS doc-enum-list-count-stackXXX global register
3826 .\" NS stack of current enum count values
3829 .\" NS doc-list-depth
3831 .nr doc-enum-list-count-stack1 0
3834 .\" NS doc-enum-list macro
3835 .\" NS enumerated list
3838 .\" NS doc-enum-list-count-stackXXX
3843 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3845 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3847 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3848 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3853 .\" NS doc-bullet-list macro
3854 .\" NS bullet paragraph list
3861 . nop \)\*[doc-Sy-font]\[bu]\f[]
3866 .\" NS doc-dash-list macro
3867 .\" NS hyphen paragraph list (sub bullet list)
3874 . nop \)\*[doc-Sy-font]\-\f[]
3879 .\" NS doc-do-list macro
3880 .\" NS .It item of list-type enum/bullet/hyphen
3882 .als doc-do-list doc-hang-list
3885 .\" NS doc-diag-list-input-line-count global register
3886 .\" NS saved line number to be checked in next diag-list item
3888 .nr doc-diag-list-input-line-count 0
3891 .\" NS doc-diag-list macro
3892 .\" NS .It item of list-type diagnostic-message
3895 .\" NS doc-curr-font
3896 .\" NS doc-curr-size
3897 .\" NS doc-diag-list-input-line-count
3900 . nr doc-curr-font \n[.f]
3901 . nr doc-curr-size \n[.ps]
3903 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3904 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3911 . nr doc-diag-list-input-line-count \n[.c]
3914 . nop \*[doc-Sy-font]\c
3915 . if \n[doc-num-args] \
3916 . doc-remaining-args
3917 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
3919 . doc-print-and-reset
3923 .\" NS doc-tag-list macro
3924 .\" NS .It item of list-type `tag'
3927 .\" NS doc-have-space
3930 .\" NS local variables:
3936 . \" finish item box
3940 . unformat doc-item-box\n[doc-list-depth]
3942 . \" we use a box without `.nf' to compute the tag width (via `dl' register)
3949 . doc-item-box\n[doc-list-depth]
3954 . if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
3955 . if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
3956 . in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3957 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3961 . doc-set-vertical-and-indent 1
3962 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3963 . ti -\n[doc-reg-dtl]u
3966 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \{\
3967 . doc-item-box\n[doc-list-depth]
3971 . chop doc-item-box\n[doc-list-depth]
3972 . \" Using \Z prevents stretching of the spaces in the tag
3973 . nop \Z'\*[doc-item-box\n[doc-list-depth]]'\c
3974 . nop \h'\n[doc-reg-dtl]u'\c
3975 . nr doc-have-space 1
3978 . if \n[doc-in-files-section] \
3980 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3987 .\" NS doc-get-tag-width macro
3988 .\" NS resolve unknown tag width (`tag' list-type only)
3991 .\" NS doc-list-indent-stackXXX
3992 .\" NS doc-tag-width-stackXXX
3996 .\" NS doc-curr-type
3998 .de doc-get-tag-width
3999 . ie (\n[doc-curr-type] == 1) \{\
4000 . ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
4001 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
4004 . ds doc-tag-width-stack\n[doc-list-depth] No
4005 . nr doc-list-indent-stack\n[doc-list-depth] \n[No]
4010 .\" NS doc-set-vertical-and-indent macro
4011 .\" NS set up vertical spacing (if not compact) and indentation (with
4012 .\" NS offset if argument is non-zero)
4015 .\" NS doc-list-have-indent-stackXXX
4017 .de doc-set-vertical-and-indent
4018 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4019 . sp \n[doc-display-vertical]u
4021 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4022 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4024 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4032 .\" NS doc-list-depth global register
4033 .\" NS list type stack counter
4035 .nr doc-list-depth 0
4038 .\" NS doc-num-columns global register
4039 .\" NS number of columns
4041 .nr doc-num-columns 0
4044 .\" NS doc-compact-list-stackXXX global register (bool)
4045 .\" NS stack of flags to indicate whether a particular list is compact
4048 .\" NS doc-list-depth
4050 .nr doc-compact-list-stack1 0
4053 .\" NS doc-tag-prefix-stackXXX global string
4054 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4057 .\" NS doc-list-depth
4059 .ds doc-tag-prefix-stack1
4062 .\" NS doc-tag-width-stackXXX global string
4063 .\" NS stack of strings indicating how to set up current element of
4064 .\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
4065 .\" NS directly; if it is a macro name, use the macro's width value;
4066 .\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
4069 .\" NS doc-list-depth
4071 .ds doc-tag-width-stack0
4072 .ds doc-tag-width-stack1
4075 .\" NS doc-list-offset-stackXXX global register
4076 .\" NS stack of list offsets
4079 .\" NS doc-list-depth
4081 .nr doc-list-offset-stack1 0
4084 .\" NS doc-end-list macro
4085 .\" NS list end function; resets indentation (and offset if argument is
4089 .\" NS doc-list-depth
4090 .\" NS doc-list-offset-stackXXX
4094 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4096 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4098 . if (\n[doc-list-depth] <= 0) \
4099 . tm mdoc warning: extraneous .El call (#\n[.c])
4101 . doc-decrement-list-stack
4102 . nr doc-list-depth -1
4106 .\" NS doc-increment-list-stack macro
4107 .\" NS set up next block for list
4110 .\" NS doc-compact-list-stackXXX
4111 .\" NS doc-list-have-indent-stackXXX
4112 .\" NS doc-list-indent-stackXXX
4113 .\" NS doc-list-offset-stackXXX
4114 .\" NS doc-list-type-stackXXX
4115 .\" NS doc-tag-prefix-stackXXX
4116 .\" NS doc-tag-width-stackXXX
4117 .\" NS doc-enum-list-count-stackXXX
4119 .\" NS local variables:
4122 .de doc-increment-list-stack
4123 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4124 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4125 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4126 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4127 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4128 . ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
4129 . ds doc-list-type-stack\n[doc-reg-dils]
4130 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4131 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4135 .\" NS doc-decrement-list-stack macro
4136 .\" NS decrement stack
4139 .\" NS doc-compact-list-stackXXX
4140 .\" NS doc-list-have-indent-stackXXX
4141 .\" NS doc-list-indent-stackXXX
4142 .\" NS doc-list-offset-stackXXX
4143 .\" NS doc-list-type-stackXXX
4144 .\" NS doc-tag-prefix-stackXXX
4145 .\" NS doc-tag-width-stackXXX
4146 .\" NS doc-enum-list-count-stackXXX
4148 .de doc-decrement-list-stack
4149 . ds doc-list-type-stack\n[doc-list-depth]
4150 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4151 . nr doc-list-indent-stack\n[doc-list-depth] 0
4152 . nr doc-list-offset-stack\n[doc-list-depth] 0
4153 . ds doc-tag-prefix-stack\n[doc-list-depth]
4154 . ds doc-tag-width-stack\n[doc-list-depth]
4155 . nr doc-compact-list-stack\n[doc-list-depth] 0
4156 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4160 .\" NS Xr user macro
4161 .\" NS cross reference (for man pages only)
4165 .\" NS doc-macro-name
4167 .\" NS local variables:
4170 .\" NS width register `Xr' set in doc-common
4173 . if !\n[doc-arg-limit] \{\
4175 . ds doc-macro-name Xr
4176 . doc-parse-args \$@
4182 . if !\n[doc-arg-limit] \
4186 . doc-print-prefixes
4187 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4188 . \" first argument must be a string
4189 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4190 . nr doc-curr-font \n[.f]
4191 . nr doc-curr-size \n[.ps]
4192 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4194 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4195 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4196 . \" modify second argument if it is a string and
4197 . \" remove space inbetween
4198 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4199 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4200 . ds doc-space\n[doc-arg-ptr]
4203 . doc-print-recursive
4213 .\" NS doc-Xr-usage macro
4216 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4221 .\" NS Sx user macro
4222 .\" NS cross section reference
4224 .\" NS width register `Sx' set in doc-common
4226 .als Sx doc-generic-macro
4227 .ds doc-Sx-usage section_header
4230 .\" NS doc-end-column-list macro
4231 .\" NS column-list end-list
4234 .\" NS doc-list-depth
4236 .de doc-end-column-list
4238 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4241 . doc-decrement-list-stack
4242 . nr doc-list-depth -1
4246 .\" NS doc-column-indent-width global register
4247 .\" NS holds the indent width for a column list
4249 .nr doc-column-indent-width 0
4252 .\" NS doc-set-column-tab macro
4253 .\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
4256 .\" NS doc-column-indent-width
4258 .\" NS local variables:
4261 .\" NS doc-str-dsct1
4263 .de doc-set-column-tab
4266 . nr doc-column-indent-width 0
4269 . ds doc-str-dsct1 " \"
4272 . ds doc-str-dsct1 " \"
4274 . \" XXX: this is packed abnormally close -- intercolumn width
4275 . \" should be configurable
4276 . ds doc-str-dsct1 " \"
4279 . while (\n[doc-reg-dsct] <= \$1) \{\
4280 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4281 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4282 . nr doc-reg-dsct +1
4285 . ta \*[doc-str-dsct]
4286 ' in +\n[doc-column-indent-width]u
4290 .\" NS doc-column-list macro
4295 .\" NS doc-list-indent-stackXXX
4298 .\" NS local variables:
4302 . if \n[doc-num-args] \
4303 . doc-parse-arg-vector
4306 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4307 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4311 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4312 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4313 . ds doc-space\n[doc-reg-dcl]
4316 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4317 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4320 ' in +\n[doc-column-indent-width]u
4322 . ti -\n[doc-column-indent-width]u
4324 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4328 .\" NS Ta user macro
4329 .\" NS append tab (\t)
4334 .\" NS width register `Ta' set in doc-common
4337 . ie \n[doc-arg-limit] \{\
4340 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4341 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4346 . tm1 "Usage: Ta must follow column entry: e.g.
4347 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4352 .\" NS Dl user macro
4353 .\" NS display (one line) literal
4355 .\" NS this function uses the `Li' font
4359 .\" NS doc-curr-font
4360 .\" NS doc-curr-size
4361 .\" NS doc-macro-name
4363 .\" NS width register `Dl' set in doc-common
4367 . in +\n[doc-display-indent]u
4369 . ie \n[doc-arg-limit] \{\
4370 . tm Usage: .Dl not callable by other macros (#\n[.c])
4375 . ds doc-macro-name Dl
4376 . doc-parse-args \$@
4378 . nr doc-curr-font \n[.f]
4379 . nr doc-curr-size \n[.ps]
4380 . nop \*[doc-Li-font]\c
4381 . doc-print-recursive
4384 . tm Usage: .Dl argument ... (#\n[.c])
4387 . in -\n[doc-display-indent]u
4391 .\" NS D1 user macro
4392 .\" NS display (one line)
4396 .\" NS doc-macro-name
4398 .\" NS width register `D1' set in doc-common
4402 . in +\n[doc-display-indent]u
4404 . ie \n[doc-arg-limit] \{\
4405 . tm Usage: .D1 not callable by other macros (#\n[.c])
4410 . ds doc-macro-name D1
4411 . doc-parse-args \$@
4413 . doc-print-recursive
4416 . tm Usage: .D1 argument ... (#\n[.c])
4419 . in -\n[doc-display-indent]u
4423 .\" NS Vt user macro
4424 .\" NS variable type (for forcing old style variable declarations);
4425 .\" NS this is not done in the same manner as .Ot for fortrash --
4426 .\" NS clean up later
4429 .\" NS doc-curr-font
4430 .\" NS doc-curr-size
4431 .\" NS doc-have-decl
4433 .\" NS doc-macro-name
4435 .\" NS width register `Vt' set in doc-common
4438 . if !\n[doc-arg-limit] \{\
4440 . ds doc-macro-name Vt
4441 . doc-parse-args \$@
4444 . tm Usage: .Vt variable_type ... (#\n[.c])
4447 . if !\n[doc-arg-limit] \
4451 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4452 . tm Usage: .Vt variable_type ... (#\n[.c])
4457 . if \n[doc-in-synopsis-section] \{\
4458 . \" if a function declaration was the last thing given,
4459 . \" want vertical space
4460 . if \n[doc-have-decl] \{\
4462 . nr doc-have-decl 0
4465 . \" if a subroutine was the last thing given, want vertical space
4466 . if \n[doc-have-func] \{\
4467 . ie \n[doc-have-var] \
4476 . nr doc-curr-font \n[.f]
4477 . nr doc-curr-size \n[.ps]
4478 . nop \*[doc-Ft-font]\c
4479 . doc-print-recursive
4481 . if \n[doc-in-synopsis-section] \{\
4482 . ie \n[doc-have-old-func] \
4483 . nop \*[doc-soft-space]\c
4490 .\" NS doc-is-func global register (bool)
4491 .\" NS set if subroutine (in synopsis only) (fortran only)
4496 .\" NS Ft user macro
4497 .\" NS function type
4500 .\" NS doc-curr-font
4501 .\" NS doc-curr-size
4502 .\" NS doc-have-decl
4505 .\" NS doc-macro-name
4507 .\" NS width register `Ft' set in doc-common
4510 . if !\n[doc-arg-limit] \{\
4512 . ds doc-macro-name Ft
4513 . doc-parse-args \$@
4516 . tm Usage: .Ft function_type ... (#\n[.c])
4519 . if !\n[doc-arg-limit] \
4523 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4524 . tm Usage: .Ft function_type ... (#\n[.c])
4529 . if \n[doc-in-synopsis-section] \{\
4530 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4532 . nr doc-have-decl 0
4536 . if \n[doc-have-var] \{\
4544 . nr doc-curr-font \n[.f]
4545 . nr doc-curr-size \n[.ps]
4546 . nop \*[doc-Ft-font]\c
4547 . doc-print-recursive
4551 .\" NS doc-have-old-func global register (bool)
4552 .\" NS set if `Ot' has been called
4554 .nr doc-have-old-func 0
4557 .\" NS Ot user macro
4558 .\" NS old function type (fortran -- no newline)
4561 .\" NS doc-have-decl
4562 .\" NS doc-have-old-func
4566 .\" NS width register `Ot' set in doc-common
4569 . nr doc-have-old-func 1
4571 . if \n[doc-in-synopsis-section] \{\
4572 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4574 . nr doc-have-decl 0
4578 . if \n[doc-have-var] \{\
4587 . nop \*[doc-Ft-font]\$*\c
4592 .\" NS Fa user macro
4593 .\" NS function arguments
4597 .\" NS doc-curr-font
4598 .\" NS doc-curr-size
4599 .\" NS doc-macro-name
4601 .\" NS width register `Fa' set in doc-common
4604 . if !\n[doc-arg-limit] \{\
4606 . ds doc-macro-name Fa
4607 . doc-parse-args \$@
4610 . tm Usage: .Fa function_arguments ... (#\n[.c])
4613 . ie \n[doc-func-arg-count] \
4617 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4618 . nr doc-curr-font \n[.f]
4619 . nr doc-curr-size \n[.ps]
4620 . nop \*[doc-Fa-font]\c
4621 . doc-print-recursive
4623 . if \n[doc-in-synopsis-section] \
4624 . if \n[doc-have-func] \
4630 .\" NS doc-func-arg-count global register
4631 .\" NS how many function arguments have been processed so far
4633 .nr doc-func-arg-count 0
4636 .\" NS doc-func-arg global string
4637 .\" NS work buffer for function name strings
4642 .\" NS doc-num-func-args global register
4643 .\" NS number of function arguments
4645 .nr doc-num-func-args 0
4648 .\" NS doc-func-args-processed global register
4649 .\" NS function arguments processed so far
4651 .nr doc-func-args-processed 0
4654 .\" NS doc-do-func macro
4655 .\" NS internal .Fa for .Fc
4661 .\" NS doc-func-arg-count
4662 .\" NS doc-func-args-processed
4663 .\" NS doc-num-func-args
4666 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4674 . nr doc-num-func-args 0
4675 . nr doc-func-args-processed 0
4677 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4678 . if (\n[doc-num-func-args] > 1) \
4679 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4681 . if (\n[doc-func-arg-count] > 1) \{\
4682 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|,\)\c
4683 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4684 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4687 . if (\n[doc-func-arg-count] == 1) \{\
4688 . nop \|\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4691 . nr doc-func-arg-count +1
4696 .\" NS doc-have-func global register (bool)
4697 .\" NS whether we have more than one function in synopsis
4702 .\" NS Fn user macro
4707 .\" NS doc-curr-font
4708 .\" NS doc-curr-size
4709 .\" NS doc-have-decl
4710 .\" NS doc-have-func
4712 .\" NS doc-indent-synopsis
4714 .\" NS doc-macro-name
4716 .\" NS width register `Fn' set in doc-common
4719 . if !\n[doc-arg-limit] \{\
4721 . ds doc-macro-name Fn
4722 . doc-parse-args \$@
4725 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4728 . if !\n[doc-arg-limit] \
4731 . if \n[doc-in-synopsis-section] \{\
4732 . \" if there is/has been more than one subroutine declaration
4733 . ie \n[doc-is-func] \{\
4736 . nr doc-have-decl 0
4740 . if \n[doc-have-func] \{\
4743 . nr doc-have-decl 0
4746 . if \n[doc-have-decl] \{\
4751 . if \n[doc-have-var] \{\
4753 . nr doc-have-decl 0
4756 . nr doc-have-func 1
4760 . if !\n[doc-indent-synopsis] \
4761 . nr doc-indent-synopsis (8u * \n[doc-fixed-width]u)
4762 . if !\n[doc-indent-synopsis-active] \
4763 . in +\n[doc-indent-synopsis]u
4764 . ti -\n[doc-indent-synopsis]u
4768 . doc-print-prefixes
4769 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4770 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4775 . nr doc-curr-font \n[.f]
4776 . nr doc-curr-size \n[.ps]
4777 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4778 . nop \f[]\s[0]\*[lp]\)\c
4781 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4782 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4783 . nop \*[doc-Fa-font]\c
4785 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4789 . if \n[doc-in-synopsis-section] \
4792 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4793 . \" output the space (if needed)
4795 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4798 . doc-print-recursive
4801 . doc-print-and-reset
4803 . if \n[doc-in-synopsis-section] \
4804 . if !\n[doc-indent-synopsis-active] \
4805 . in -\n[doc-indent-synopsis]u
4809 .\" NS doc-do-func-args macro
4810 .\" NS handle function arguments
4816 .\" NS doc-func-args-processed
4817 .\" NS doc-num-func-args
4819 .\" NS local variables:
4822 .de doc-do-func-args
4823 . if \n[doc-in-synopsis-section] \{\
4825 . nr doc-num-func-args 0
4826 . nr doc-func-args-processed 0
4828 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4829 . if (\n[doc-num-func-args] > 1) \
4830 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4833 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4836 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4837 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4838 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4839 . nop \|\f[\n[doc-curr-font]]\s[\n[doc-curr-size]u],\)\c
4840 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4846 .\" NS doc-saved-nesting-level global register
4848 .nr doc-saved-nesting-level 0
4851 .\" NS doc-in-func-enclosure global register (bool)
4853 .nr doc-in-func-enclosure 0
4856 .\" NS Fo user macro
4857 .\" NS function open
4861 .\" NS doc-curr-font
4862 .\" NS doc-curr-size
4863 .\" NS doc-func-arg-count
4864 .\" NS doc-have-decl
4865 .\" NS doc-have-func
4867 .\" NS doc-in-func-enclosure
4868 .\" NS doc-indent-synopsis
4870 .\" NS doc-macro-name
4871 .\" NS doc-saved-nesting-level
4873 .\" NS width register `Fo' set in doc-common
4876 . if (\n[doc-in-func-enclosure]) \{\
4877 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4881 . nr doc-saved-nesting-level \n[doc-nesting-level]
4882 . nr doc-in-func-enclosure 1
4884 . if !\n[doc-arg-limit] \{\
4886 . ds doc-macro-name Fo
4887 . doc-parse-args \$@
4890 . tm Usage: .Fo function_name (#\n[.c])
4893 . if \n[doc-in-synopsis-section] \{\
4894 . \" if there is/has been more than one subroutine declaration
4895 . ie \n[doc-is-func] \{\
4898 . nr doc-have-decl 0
4902 . if \n[doc-have-func] \{\
4905 . nr doc-have-decl 0
4908 . if \n[doc-have-decl] \{\
4913 . if \n[doc-have-var] \{\
4915 . nr doc-have-decl 0
4918 . nr doc-have-func 1
4922 . if !\n[doc-indent-synopsis] \
4923 . nr doc-indent-synopsis (8u * \n[doc-fixed-width]u)
4926 . \" start function box
4934 . doc-print-prefixes
4935 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4936 . nr doc-func-arg-count 1
4937 . nr doc-curr-font \n[.f]
4938 . nr doc-curr-size \n[.ps]
4940 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4941 . nop \f[]\s[0]\*[lp]\)\c
4947 .\" NS Fc user macro
4948 .\" NS function close
4952 .\" NS doc-func-arg-count
4953 .\" NS doc-in-func-enclosure
4954 .\" NS doc-saved-nesting-level
4955 .\" NS doc-macro-name
4957 .\" NS width register `Fc' set in doc-common
4960 . if !\n[doc-in-func-enclosure] \{\
4961 . tm mdoc warning: Extraneous .Fc (#\n[.c])
4966 . ds doc-macro-name Fc
4967 . \" the first (dummy) argument is used to get the correct spacing
4968 . doc-parse-args \) \$@
4971 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
4972 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
4974 . nr doc-func-arg-count 0
4975 . nr doc-in-func-enclosure 0
4977 . ie \n[doc-in-synopsis-section] \
4982 . \" finish function box
4987 . unformat doc-func-box
4989 . if \n[doc-in-synopsis-section] \{\
4990 . if !\n[doc-indent-synopsis-active] \
4991 . in +\n[doc-indent-synopsis]u
4992 . ti -\n[doc-indent-synopsis]u
4996 . nop \*[doc-func-box]\c
4999 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5000 . nr doc-curr-font \n[.f]
5001 . nr doc-curr-size \n[.ps]
5002 . doc-print-recursive
5005 . doc-print-and-reset
5007 . if \n[doc-in-synopsis-section] \
5008 . if !\n[doc-indent-synopsis-active] \
5009 . in -\n[doc-indent-synopsis]u
5013 .\" NS doc-build-func-string macro
5014 .\" NS collect function arguments and set hard spaces inbetween
5018 .\" NS doc-func-args-processed
5019 .\" NS doc-num-func-args
5021 .de doc-build-func-string
5022 . if !\n[doc-num-func-args] \{\
5023 . nr doc-num-func-args \n[.$]
5024 . nr doc-func-args-processed 0
5028 . nr doc-func-args-processed +1
5029 . as doc-func-arg "\$1
5031 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5032 . as doc-func-arg "\*[doc-hard-space]
5035 . doc-build-func-string \$@
5040 .\" Very crude references: Stash all reference info into boxes, print out
5041 .\" reference on .Re macro and clean up. Ordering very limited, no fancy
5042 .\" citations, but can do articles, journals, and books -- need to add
5043 .\" several missing options (like city etc). Should be able to grab a refer
5044 .\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
5048 .\" NS doc-is-reference global register (bool)
5049 .\" NS set if in reference
5051 .nr doc-is-reference 0
5054 .\" NS doc-reference-count global register
5055 .\" NS reference element counter
5057 .nr doc-reference-count 0
5060 .\" NS Rs user macro
5061 .\" NS reference start
5064 .\" NS doc-is-reference
5065 .\" NS doc-reference-count
5067 .\" NS width register `Rs' set in doc-common
5071 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5073 . nr doc-is-reference 1
5074 . doc-reset-reference
5075 . if \n[doc-in-see-also-section] \
5077 . nr doc-reference-count 0
5082 .\" NS Re user macro
5083 .\" NS reference end
5086 .\" NS doc-is-reference
5088 .\" NS width register `Re' set in doc-common
5092 . tm Usage: .Re (does not take arguments) (#\n[.c])
5094 . doc-print-reference
5095 . doc-reset-reference
5096 . nr doc-is-reference 0
5101 .\" NS doc-reset-reference macro
5102 .\" NS reference cleanup
5105 .\" NS doc-author-count
5106 .\" NS doc-author-nameXXX
5107 .\" NS doc-book-count
5108 .\" NS doc-book-name
5109 .\" NS doc-corporate-count
5110 .\" NS doc-corporate-name
5112 .\" NS doc-date-count
5113 .\" NS doc-issue-count
5114 .\" NS doc-issue-name
5115 .\" NS doc-journal-count
5116 .\" NS doc-journam-name
5117 .\" NS doc-optional-count
5118 .\" NS doc-optional-string
5119 .\" NS doc-page-number-count
5120 .\" NS doc-page-number-string
5121 .\" NS doc-reference-title-count
5122 .\" NS doc-reference-title-name
5123 .\" NS doc-reference-title-name-for-book
5124 .\" NS doc-report-count
5125 .\" NS doc-report-name
5126 .\" NS doc-volume-count
5127 .\" NS doc-volume-name
5129 .de doc-reset-reference
5130 . while (\n[doc-author-count]) \{\
5131 . ds doc-author-name\n[doc-author-count]
5132 . nr doc-author-count -1
5134 . nr doc-journal-count 0
5135 . nr doc-issue-count 0
5136 . nr doc-optional-count 0
5137 . nr doc-corporate-count 0
5138 . nr doc-report-count 0
5139 . nr doc-reference-title-count 0
5140 . nr doc-volume-count 0
5141 . nr doc-date-count 0
5142 . nr doc-page-number-count 0
5143 . nr doc-book-count 0
5145 . ds doc-journal-name
5147 . ds doc-optional-string
5148 . ds doc-corporate-name
5149 . ds doc-report-name
5150 . ds doc-reference-title-name
5151 . ds doc-reference-title-name-for-book
5152 . ds doc-volume-name
5154 . ds doc-page-number-string
5159 .\" NS doc-finish-reference macro
5160 .\" NS auxiliary macro for doc-print-reference
5163 .\" NS doc-reference-count
5165 .de doc-finish-reference
5166 . nr doc-reference-count -1
5167 . ie \n[doc-reference-count] \
5174 .\" NS doc-print-reference macro
5175 .\" NS reference print
5178 .\" NS doc-reference-count
5180 .de doc-print-reference
5184 . if \n[doc-author-count] \{\
5185 . doc-print-reference-authors
5186 . nr doc-reference-count -\n[doc-author-count]
5189 . if \n[doc-reference-title-count] \{\
5190 . unformat doc-reference-title-name
5191 . chop doc-reference-title-name
5192 . unformat doc-reference-title-name-for-book
5193 . chop doc-reference-title-name-for-book
5194 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5195 . nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
5196 . doc-finish-reference
5199 . nop \*[doc-reference-title-name]\c
5200 . doc-finish-reference
5203 . if \n[doc-book-count] \{\
5204 . unformat doc-book-name
5205 . chop doc-book-name
5206 . nop \*[doc-book-name]\c
5207 . doc-finish-reference
5210 . if \n[doc-publisher-count] \{\
5211 . unformat doc-publisher-name
5212 . chop doc-publisher-name
5213 . nop \*[doc-publisher-name]\c
5214 . doc-finish-reference
5217 . if \n[doc-journal-count] \{\
5218 . unformat doc-journal-name
5219 . chop doc-journal-name
5220 . nop \*[doc-journal-name]\c
5221 . doc-finish-reference
5224 . if \n[doc-report-count] \{\
5225 . unformat doc-report-name
5226 . chop doc-report-name
5227 . nop \*[doc-report-name]\c
5228 . doc-finish-reference
5231 . if \n[doc-issue-count] \{\
5232 . unformat doc-issue-name
5233 . chop doc-issue-name
5234 . nop \*[doc-issue-name]\c
5235 . doc-finish-reference
5238 . if \n[doc-volume-count] \{\
5239 . unformat doc-volume-name
5240 . chop doc-volume-name
5241 . nop \*[doc-volume-name]\c
5242 . doc-finish-reference
5245 . if \n[doc-page-number-count] \{\
5246 . unformat doc-page-number-string
5247 . chop doc-page-number-string
5248 . nop \*[doc-page-number-string]\c
5249 . doc-finish-reference
5252 . if \n[doc-corporate-count] \{\
5253 . unformat doc-corporate-name
5254 . chop doc-corporate-name
5255 . nop \*[doc-corporate-name]\c
5256 . doc-finish-reference
5259 . if \n[doc-date-count] \{\
5262 . nop \*[doc-date]\c
5263 . doc-finish-reference
5266 . if \n[doc-optional-count] \{\
5267 . unformat doc-optional-string
5268 . chop doc-optional-string
5269 . nop \*[doc-optional-string]\c
5270 . doc-finish-reference
5273 . if \n[doc-reference-count] \
5274 . tm mdoc warning: unresolved reference problem
5276 . hy \n[doc-hyphen-flags]
5280 .\" NS doc-print-reference-authors macro
5281 .\" NS print out reference authors
5283 .\" NS local variables:
5287 .ds doc-str-dpra "and
5289 .de doc-print-reference-authors
5292 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5293 . unformat doc-author-name\n[doc-reg-dpra]
5294 . chop doc-author-name\n[doc-reg-dpra]
5295 . ie (\n[doc-author-count] > 2) \
5296 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5298 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5299 . nr doc-reg-dpra +1
5302 . unformat doc-author-name\n[doc-reg-dpra]
5303 . chop doc-author-name\n[doc-reg-dpra]
5304 . if (\n[doc-author-count] > 1) \
5305 . nop \)\*[doc-str-dpra]
5306 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5310 .\" NS doc-author-count global register
5311 .\" NS counter of author references
5313 .nr doc-author-count 0
5316 .\" NS doc-author-nameXXX global box
5317 .\" NS array of author names
5320 .\" NS doc-author-count
5322 .ds doc-author-name0
5325 .\" NS %A user macro
5326 .\" NS reference author(s)
5330 .\" NS doc-author-count
5331 .\" NS doc-curr-font
5332 .\" NS doc-curr-size
5333 .\" NS doc-macro-name
5334 .\" NS doc-reference-count
5336 .\" NS local variables:
5339 .\" NS width register `%A' set in doc-common
5342 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5343 . tm Usage: .%A author_name ... (#\n[.c])
5347 . nr doc-author-count +1
5348 . nr doc-reference-count +1
5350 . ds doc-macro-name %A
5351 . doc-parse-args \$@
5354 . nr doc-curr-font \n[.f]
5355 . nr doc-curr-size \n[.ps]
5357 . \" save to reference box
5358 . box doc-author-name\n[doc-author-count]
5367 .\" NS doc-book-count global register
5368 .\" NS counter of book references
5370 .nr doc-book-count 0
5373 .\" NS doc-book-name global box
5374 .\" NS string of collected book references
5379 .\" NS %B user macro
5380 .\" NS [reference] book name
5384 .\" NS doc-book-count
5385 .\" NS doc-curr-font
5386 .\" NS doc-curr-size
5387 .\" NS doc-macro-name
5388 .\" NS doc-reference-count
5390 .\" NS local variables:
5393 .\" NS width register `%B' set in doc-common
5396 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5397 . tm Usage: .%B book_name ... (#\n[.c])
5401 . if \n[doc-is-reference] \{\
5402 . nr doc-book-count +1
5403 . nr doc-reference-count +1
5406 . ds doc-macro-name %B
5407 . doc-parse-args \$@
5410 . nr doc-curr-font \n[.f]
5411 . nr doc-curr-size \n[.ps]
5413 . ie \n[doc-is-reference] \{\
5414 . \" append to reference box
5415 . boxa doc-book-name
5420 . nop \*[doc-Em-font]\c
5424 . nop \*[doc-Em-font]\c
5425 . doc-print-recursive
5430 .\" NS doc-date-count global register
5431 .\" NS counter of date references
5433 .nr doc-date-count 0
5436 .\" NS doc-date global box
5437 .\" NS string of collected date references
5442 .\" NS %D user macro
5443 .\" NS [reference] date
5447 .\" NS doc-curr-font
5448 .\" NS doc-curr-size
5449 .\" NS doc-date-count
5450 .\" NS doc-macro-name
5451 .\" NS doc-reference-count
5453 .\" NS local variables:
5456 .\" NS width register `%D' set in doc-common
5459 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5460 . tm Usage: .%D date ... (#\n[.c])
5464 . nr doc-date-count +1
5465 . nr doc-reference-count +1
5467 . ds doc-macro-name %D
5468 . doc-parse-args \$@
5471 . nr doc-curr-font \n[.f]
5472 . nr doc-curr-size \n[.ps]
5474 . \" append to reference box
5484 .\" NS doc-publisher-count global register
5485 .\" NS counter of publisher references
5487 .nr doc-publisher-count 0
5490 .\" NS doc-publisher-name global box
5491 .\" NS string of collected publisher references
5493 .ds doc-publisher-name
5496 .\" NS %I user macro
5497 .\" NS [reference] issuer/publisher name
5501 .\" NS doc-curr-font
5502 .\" NS doc-curr-size
5503 .\" NS doc-macro-name
5504 .\" NS doc-publisher-count
5505 .\" NS doc-reference-count
5507 .\" NS local variables:
5510 .\" NS width register `%I' set in doc-common
5513 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5514 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5518 . nr doc-publisher-count +1
5519 . nr doc-reference-count +1
5521 . ds doc-macro-name %I
5522 . doc-parse-args \$@
5525 . nr doc-curr-font \n[.f]
5526 . nr doc-curr-size \n[.ps]
5528 . \" append to reference box
5529 . boxa doc-publisher-name
5534 . nop \*[doc-Em-font]\c
5539 .\" NS doc-journal-count global register
5540 .\" NS counter of journal references
5542 .nr doc-journal-count 0
5545 .\" NS doc-journal-name global box
5546 .\" NS string of collected journal references
5548 .ds doc-journal-name
5551 .\" NS %J user macro
5552 .\" NS [reference] Journal Name
5556 .\" NS doc-curr-font
5557 .\" NS doc-curr-size
5558 .\" NS doc-journal-count
5559 .\" NS doc-macro-name
5560 .\" NS doc-reference-count
5562 .\" NS local variables:
5565 .\" NS width register `%J' set in doc-common
5568 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5569 . tm Usage: .%J journal_name ... (#\n[.c])
5573 . nr doc-journal-count +1
5574 . nr doc-reference-count +1
5576 . ds doc-macro-name %J
5577 . doc-parse-args \$@
5580 . nr doc-curr-font \n[.f]
5581 . nr doc-curr-size \n[.ps]
5583 . \" append to reference box
5584 . boxa doc-journal-name
5589 . nop \*[doc-Em-font]\c
5594 .\" NS doc-issue-count global register
5595 .\" NS counter of issue number references
5597 .nr doc-issue-count 0
5600 .\" NS doc-issue-name global box
5601 .\" NS string of collected issue number references
5606 .\" NS %N user macro
5607 .\" NS [reference] issue number
5611 .\" NS doc-curr-font
5612 .\" NS doc-curr-size
5613 .\" NS doc-issue-count
5614 .\" NS doc-macro-name
5615 .\" NS doc-reference-count
5617 .\" NS local variables:
5620 .\" NS width register `%N' set in doc-common
5623 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5624 . tm Usage: .%N issue_number ... (#\n[.c])
5628 . nr doc-issue-count +1
5629 . nr doc-reference-count +1
5631 . ds doc-macro-name %N
5632 . doc-parse-args \$@
5635 . nr doc-curr-font \n[.f]
5636 . nr doc-curr-size \n[.ps]
5638 . \" append to reference box
5639 . boxa doc-issue-name
5648 .\" NS doc-optional-count global register
5649 .\" NS counter of optional information references
5651 .nr doc-optional-count 0
5654 .\" NS doc-optional-string global box
5655 .\" NS string of collected optional information references
5657 .ds doc-optional-string
5660 .\" NS %O user macro
5661 .\" NS [reference] optional information
5665 .\" NS doc-curr-font
5666 .\" NS doc-curr-size
5667 .\" NS doc-macro-name
5668 .\" NS doc-optional-count
5669 .\" NS doc-reference-count
5671 .\" NS local variables:
5674 .\" NS width register `%O' set in doc-common
5677 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5678 . tm Usage: .%O optional_information ... (#\n[.c])
5682 . nr doc-optional-count +1
5683 . nr doc-reference-count +1
5685 . ds doc-macro-name %O
5686 . doc-parse-args \$@
5689 . nr doc-curr-font \n[.f]
5690 . nr doc-curr-size \n[.ps]
5692 . \" append to reference box
5693 . boxa doc-optional-string
5702 .\" NS doc-page-number-count global register
5703 .\" NS counter of page number references
5705 .nr doc-page-number-count 0
5708 .\" NS doc-page-number-string global box
5709 .\" NS string of collected page number references
5711 .ds doc-page-number-string
5714 .\" NS %P user macro
5715 .\" NS [reference] page numbers
5719 .\" NS doc-curr-font
5720 .\" NS doc-curr-size
5721 .\" NS doc-macro-name
5722 .\" NS doc-page-number-count
5723 .\" NS doc-reference-count
5725 .\" NS local variables:
5728 .\" NS width register `%P' set in doc-common
5731 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5732 . tm Usage: .%P page_number ... (#\n[.c])
5736 . nr doc-page-number-count +1
5737 . nr doc-reference-count +1
5739 . ds doc-macro-name %P
5740 . doc-parse-args \$@
5743 . nr doc-curr-font \n[.f]
5744 . nr doc-curr-size \n[.ps]
5746 . \" append to reference box
5747 . boxa doc-page-number-string
5756 .\" NS doc-corporate-count global register
5757 .\" NS counter of corporate references
5759 .nr doc-corporate-count 0
5762 .\" NS doc-corporate-name global box
5763 .\" NS string of collected corporate references
5765 .ds doc-corporate-name
5768 .\" NS %Q user macro
5769 .\" NS corporate or foreign author
5773 .\" NS doc-corporate-count
5774 .\" NS doc-curr-font
5775 .\" NS doc-curr-size
5776 .\" NS doc-macro-name
5777 .\" NS doc-reference-count
5779 .\" NS local variables:
5782 .\" NS width register `%Q' set in doc-common
5785 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5786 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5790 . nr doc-corporate-count +1
5791 . nr doc-reference-count +1
5793 . ds doc-macro-name %Q
5794 . doc-parse-args \$@
5797 . nr doc-curr-font \n[.f]
5798 . nr doc-curr-size \n[.ps]
5800 . \" append to reference box
5801 . boxa doc-corporate-name
5810 .\" NS doc-report-count global register
5811 .\" NS counter of report references
5813 .nr doc-report-count 0
5816 .\" NS doc-report-name global box
5817 .\" NS string of collected report references
5822 .\" NS %R user macro
5823 .\" NS [reference] report name
5827 .\" NS doc-curr-font
5828 .\" NS doc-curr-size
5829 .\" NS doc-macro-name
5830 .\" NS doc-reference-count
5831 .\" NS doc-report-count
5833 .\" NS local variables:
5836 .\" NS width register `%R' set in doc-common
5839 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5840 . tm Usage: .%R reference_report ... (#\n[.c])
5844 . nr doc-report-count +1
5845 . nr doc-reference-count +1
5847 . ds doc-macro-name %R
5848 . doc-parse-args \$@
5851 . nr doc-curr-font \n[.f]
5852 . nr doc-curr-size \n[.ps]
5854 . \" append to reference box
5855 . boxa doc-report-name
5864 .\" NS doc-reference-title-count global register
5865 .\" NS counter of reference title references
5867 .nr doc-reference-title-count 0
5870 .\" NS doc-reference-title-name global box
5871 .\" NS string of collected reference title references
5873 .ds doc-reference-title-name
5876 .\" NS doc-reference-title-name-for-book global box
5877 .\" NS string of collected reference title references
5878 .\" NS (saved with another font; this is a shortcoming of groff)
5880 .ds doc-reference-title-name-for-book
5883 .\" NS %T user macro
5884 .\" NS reference title
5888 .\" NS doc-curr-font
5889 .\" NS doc-curr-size
5890 .\" NS doc-macro-name
5891 .\" NS doc-reference-title-count
5892 .\" NS doc-report-count
5894 .\" NS local variables:
5897 .\" NS width register `%T' set in doc-common
5900 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5901 . tm Usage: .%T reference_title ... (#\n[.c])
5905 . if \n[doc-is-reference] \{\
5906 . nr doc-reference-title-count +1
5907 . nr doc-reference-count +1
5910 . ds doc-macro-name %T
5911 . doc-parse-args \$@
5914 . nr doc-curr-font \n[.f]
5915 . nr doc-curr-size \n[.ps]
5916 . ie \n[doc-is-reference] \{\
5917 . \" append to reference box
5918 . boxa doc-reference-title-name-for-book
5923 . nop \*[doc-No-font]\c
5926 . \" do it a second time with another font
5927 . ds doc-macro-name %T
5928 . doc-parse-args \$@
5931 . nr doc-curr-font \n[.f]
5932 . nr doc-curr-size \n[.ps]
5933 . boxa doc-reference-title-name
5938 . nop \*[doc-Em-font]\c
5942 . nop \*[doc-Em-font]\c
5943 . doc-print-recursive
5948 .\" NS doc-volume-count global register
5949 .\" NS counter of reference title references
5951 .nr doc-volume-count 0
5954 .\" NS doc-volume-name global box
5955 .\" NS string of collected volume references
5960 .\" NS %V user macro
5961 .\" NS reference volume
5965 .\" NS doc-curr-font
5966 .\" NS doc-curr-size
5967 .\" NS doc-macro-name
5968 .\" NS doc-reference-title-count
5969 .\" NS doc-volume-count
5971 .\" NS local variables:
5974 .\" NS width register `%V' set in doc-common
5977 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5978 . tm Usage: .%V volume ... (#\n[.c])
5982 . nr doc-volume-count +1
5983 . nr doc-reference-count +1
5985 . ds doc-macro-name %V
5986 . doc-parse-args \$@
5989 . nr doc-curr-font \n[.f]
5990 . nr doc-curr-size \n[.ps]
5992 . \" append to reference box
5993 . boxa doc-volume-name
6002 .\" NS doc-do-references macro
6003 .\" NS reference recursion routine
6008 .\" NS local variables:
6012 .de doc-do-references
6013 . if !\n[doc-is-reference] \
6014 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6016 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6018 . ie (\n[doc-reg-ddr1] == 1) \{\
6019 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6020 . doc-append-arg \c 3
6021 . \*[doc-arg\n[doc-arg-ptr]]
6024 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6026 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6027 . \" finish reference box
6035 . nr doc-reg-ddr \n[doc-arg-ptr]
6037 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6043 .\" NS Hf user macro
6044 .\" NS source include header files.
6047 .\" NS doc-curr-font
6048 .\" NS doc-curr-size
6050 .\" NS width register `Hf' set in doc-common
6053 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6065 . Usage: .Hf file (#\n[.c])
6069 .\" NS doc-have-author global register (bool)
6072 .nr doc-have-author 0
6075 .\" NS An user macro
6080 .\" NS doc-curr-font
6081 .\" NS doc-curr-size
6082 .\" NS doc-have-author
6083 .\" NS doc-macro-name
6085 .\" NS width register `An' set in doc-common
6088 . if !\n[doc-arg-limit] \{\
6090 . ie "\$1"-nosplit" \
6091 . nr doc-in-authors-section 0
6092 . el \{ .ie "\$1"-split" \
6093 . nr doc-in-authors-section 1
6095 . ds doc-macro-name An
6096 . doc-parse-args \$@
6099 . tm1 "Usage: .An {-nosplit | -split}
6100 . tm1 .An author_name ... (#\n[.c])
6103 . if \n[doc-in-authors-section] \{\
6104 . ie \n[doc-have-author] \
6107 . nr doc-have-author 1
6110 . if \n[doc-arg-limit] \{\
6112 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6113 . nr doc-curr-font \n[.f]
6114 . nr doc-curr-size \n[.ps]
6115 . doc-print-recursive
6118 . tm Usage: .An author_name ... (#\n[.c])
6124 .\" NS Rv user macro
6125 .\" NS return values
6127 .\" NS width register `Rv' set in doc-common
6129 .\" NS local variables:
6130 .\" NS doc-str-Rv-std-prefix
6131 .\" NS doc-str-Rv-std-suffix
6132 .\" NS doc-str-Rv-stds-prefix
6133 .\" NS doc-str-Rv-stds-and
6134 .\" NS doc-str-Rv-stds-suffix
6135 .\" NS doc-str-Rv-std0
6137 .ds doc-str-Rv-std-prefix "The
6138 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6139 .as doc-str-Rv-std-suffix " otherwise the value\~-1 is returned and
6140 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6141 .as doc-str-Rv-std-suffix " is set to indicate the error.
6143 .ds doc-str-Rv-stds-prefix "The
6144 .ds doc-str-Rv-stds-and "and
6145 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6146 .as doc-str-Rv-stds-suffix " otherwise the value\~-1 is returned and
6147 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6148 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6150 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6151 .as doc-str-Rv-std0 " otherwise the value\~-1 is returned and
6152 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6153 .as doc-str-Rv-std0 " is set to indicate the error.
6157 .\" XXX: what does this function without `-std'?
6159 . if \n[doc-arg-limit] \{\
6160 . tm Usage: .Rv not callable by other macros (#\n[.c])
6166 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6171 . nr doc-reg-Rv \*[doc-section]
6172 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6173 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6176 . ie (\n[.$] > 1) \{\
6177 . nop \)\*[doc-str-Rv-stds-prefix]
6179 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6181 . Fn \$\n[doc-reg-Rv] ,
6183 . Fn \$\n[doc-reg-Rv]
6186 . nop \)\*[doc-str-Rv-stds-and]
6188 . nop \)\*[doc-str-Rv-stds-suffix]
6190 . el \{ .ie (\n[.$] == 1) \{\
6191 . nop \)\*[doc-str-Rv-std-prefix]
6193 . nop \)\*[doc-str-Rv-std-suffix]
6196 . nop \)\*[doc-str-Rv-std0]
6201 .\" NS Ex user macro
6204 .\" NS width register `Ex' set in doc-common
6206 .\" NS local variables:
6207 .\" NS doc-str-Ex-std-prefix
6208 .\" NS doc-str-Ex-std-suffix
6210 .ds doc-str-Ex-std-prefix "The
6211 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6212 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6214 .ds doc-str-Ex-stds-prefix "The
6215 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6216 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6217 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6221 .\" XXX: what does this function without `-std'?
6223 . if \n[doc-arg-limit] \{\
6224 . tm Usage: .Ex not callable by other macros (#\n[.c])
6230 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6235 . nr doc-reg-Ex \*[doc-section]
6236 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6237 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6240 . ie (\n[.$] > 1) \{\
6241 . nop \)\*[doc-str-Ex-stds-prefix]
6243 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6245 . Nm \$\n[doc-reg-Ex] ,
6247 . Nm \$\n[doc-reg-Ex]
6250 . nop \)\*[doc-str-Ex-stds-and]
6252 . nop \)\*[doc-str-Ex-stds-suffix]
6255 . nop \)\*[doc-str-Ex-std-prefix]
6257 . nop \)\*[doc-str-Ex-std-suffix]
6262 .\" NS Mt user macro
6263 .\" NS mailto (for conversion to HTML)
6266 . \" XXX: error handling missing
6271 .\" NS Lk user macro
6272 .\" NS link (for conversion to HTML)
6274 .\" NS local variables:
6279 . ds doc-str-Lk Sy \$@
6281 . ie (\n[.$] > 1) \{\
6282 . doc-get-arg-type \$2
6283 . ie (\n[doc-arg-type] < 3) \{\
6285 . ds doc-str-Lk Sy "\$1"
6286 . doc-get-width "\$1"
6289 . as doc-str-Lk " \$@
6292 . doc-get-width "\$1"
6295 . doc-get-width "\$1"
6301 . ie (\n[doc-width] >= \n[doc-reg-Lk]) \
6308 .\" NS doc-defunct-macro macro
6309 .\" NS this is the skeleton for defunct macros
6312 .de doc-defunct-macro
6313 . tmc mdoc error: .\$0 defunct
6314 . if d doc-\$0-usage \
6315 . tmc , \*[doc-\$0-usage]
6322 .als Db doc-defunct-macro
6324 .als Ds doc-defunct-macro
6326 .als Or doc-defunct-macro
6327 .ds doc-Or-usage use `|'
6329 .als Sf doc-defunct-macro
6330 .ds doc-Sf-usage use .Pf or .Ns
6336 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6337 . tm1 " Should this have been `.Em ...'?
6342 .\" NS doc-empty-line macro
6343 .\" NS emit warning and print empty line
6346 . if !\n[doc-display-depth] \
6347 . tm mdoc warning: Empty input line #\n[.c]
6357 .\" load local modifications