2 .\"@ Main file for the mdoc semantic markup language.
4 .\" Copyright (c) 1991, 1993
5 .\" The Regents of the University of California. All rights reserved.
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\" notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice, this list of conditions and the following disclaimer in the
14 .\" documentation and/or other materials provided with the distribution.
16 .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
17 .\" 4. Neither the name of the University nor the names of its contributors
18 .\" may be used to endorse or promote products derived from this software
19 .\" without specific prior written permission.
21 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 .\" @(#)doc 8.1 (Berkeley) 06/08/93
35 .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
36 .\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
37 .\" `tmac.doc-common' would be too long); when using groff, the doc-* files
38 .\" are loaded using the `mso' request.
42 .\" Werner LEMBERG <wl@gnu.org> and
43 .\" Ruslan Ermilov <ru@freebsd.org>
45 .\" to make it more readable: using long names and many groff features,
46 .\" updating and extending documentation, etc.
48 .\" Adapted to S-roff by Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
54 . ab This version of mdoc can only be run with groff / compatible!
63 .if (\n[.x]\n[.y] < 118) \
64 . ab You need a newer troff version (v1.18 or higher) for this version of mdoc!
67 .\" Load start-up files
80 .\" NS doc-macro-name global string
81 .\" NS name of calling request (set in each user-requestable macro)
84 .als doc-arg0 doc-macro-name
87 .\" NS doc-arg-limit global register
88 .\" NS total number of arguments
93 .\" NS doc-num-args global register
94 .\" NS number of arguments to handle (must be set to \n[.$] prior to
95 .\" NS `doc-parse-arg-vector' request)
100 .\" NS doc-arg-ptr global register
101 .\" NS argument pointer
106 .\" NS doc-argXXX global string
107 .\" NS argument vector
115 .\" NS doc-typeXXX global register
116 .\" NS argument type vector (macro=1, string=2, punctuation suffix=3,
117 .\" NS punctuation prefix=4)
125 .\" NS doc-spaceXXX global string
134 .\" NS doc-parse-args macro
135 .\" NS parse arguments (recursively) (`.doc-parse-args arg ...')
144 .\" NS doc-have-space
146 .\" NS local variables:
152 . if !\n[doc-arg-limit] \
155 . nr doc-have-space 0
160 . nr doc-arg-limit +1
162 . \" handle `|' and `...' specially
164 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
165 . el \{ .ie "\$1"..." \
166 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
168 . ds doc-arg\n[doc-arg-limit] "\$1
171 . \" get argument type and set spacing
172 . doc-get-arg-type* \n[doc-arg-limit]
173 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
174 . doc-set-spacing-\n[doc-arg-type]
176 . \" check whether we have processed the last parameter
188 .\" NS doc-parse-arg-vector macro
189 .\" NS parse argument vector (recursive)
191 .\" NS cf. comments in doc-parse-args
201 .\" NS local variables:
206 .de doc-parse-arg-vector
207 . if !\n[doc-arg-limit] \
210 . nr doc-arg-limit +1
212 . ie "\*[doc-arg\n[doc-arg-limit]]"|" \
213 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
214 . el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
215 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
218 . doc-get-arg-type* \n[doc-arg-limit]
219 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
220 . doc-set-spacing-\n[doc-arg-type]
222 . ie (\n[doc-num-args] == 1) \{\
228 . doc-parse-arg-vector
235 .\" NS doc-parse-space-vector macro
236 .\" NS parse space vector (recursive)
243 .de doc-parse-space-vector
244 . nr doc-arg-limit +1
246 . doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
248 . ie (\n[doc-num-args] == 1) \
252 . doc-parse-space-vector
257 .\" NS doc-remaining-args macro
258 .\" NS output remaining arguments as-is, separated by spaces (until
259 .\" NS `doc-num-args' is exhausted)
265 .de doc-remaining-args
267 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
269 . ie (\n[doc-num-args] == 1) \{\
274 . nop \)\*[doc-space]\c
281 .\" NS doc-append-arg macro
282 .\" NS append one argument to argument vector:
283 .\" NS `.doc-append-arg [arg] [type]'
291 . nr doc-arg-limit +1
292 . ds doc-arg\n[doc-arg-limit] "\$1
293 . nr doc-type\n[doc-arg-limit] \$2
294 . doc-set-spacing-\$2
298 .\" NS doc-print-and-reset macro
299 .\" NS finish input line and clean up argument vectors
301 .de doc-print-and-reset
302 . if \n[doc-space-mode] \
308 .\" NS doc-reset-args macro
309 .\" NS reset argument counters
321 . hy \n[doc-hyphen-flags]
327 .\" NS doc-curr-font global register
328 .\" NS saved current font
330 .nr doc-curr-font \n[.f]
333 .\" NS doc-curr-size global register
334 .\" NS saved current font size
336 .nr doc-curr-size \n[.ps]
342 .\" NS handle flags (appends `-' and prints flags): `.Fl [arg ...]'
348 .\" NS doc-macro-name
350 .\" NS local variables:
351 .\" NS doc-reg-Fl (for communication with doc-flag-recursion)
353 .\" NS width register `Fl' set in doc-common
356 . nr doc-curr-font \n[.f]
357 . nr doc-curr-size \n[.ps]
358 . nop \*[doc-Fl-font]\c
360 . if !\n[doc-arg-limit] \{\
361 . ds doc-macro-name Fl
366 . nop \|\-\|\f[]\s[0]
369 . if !\n[doc-arg-limit] \
373 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
375 . nop \|\-\f[]\s[0]\c
376 . doc-print-and-reset
379 . ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
380 . nop \|\-\f[]\s[0]\c
381 . \*[doc-arg\n[doc-arg-ptr]]
384 . if (\n[doc-type\n[doc-arg-ptr]] == 3) \
393 .\" NS doc-flag-recursion macro
394 .\" NS `Fl' flag recursion routine (special handling)
399 .\" NS local variables:
404 .de doc-flag-recursion
405 . nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
406 . ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
408 . ie (\n[doc-reg-dfr1] == 1) \{\
413 . nr doc-reg-dfr \n[doc-arg-ptr]
415 . ie (\n[doc-reg-dfr1] == 2) \{\
416 . \" handle vertical bar -- doc-reg-Fl is set for the first call of
417 . \" doc-flag-recursion only; we need this to make `.Fl | ...' work
419 . ie "\*[doc-str-dfr]"\*[Ba]" \{\
420 . if \n[doc-reg-Fl] \
421 . nop \|\-\*[doc-space]\c
425 . ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
426 . if \n[doc-reg-Fl] \
427 . nop \|\-\*[doc-space]\c
431 . \" two consecutive hyphen characters?
432 . ie "\*[doc-str-dfr]"-" \
435 . nop \|\%\-\*[doc-str-dfr]\&\c
438 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
439 . nop \)\*[doc-str-dfr]\f[]\s[0]\c
442 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
444 . if (\n[doc-reg-dfr1] == 4) \
446 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
447 . doc-print-and-reset
451 . ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
452 . ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
455 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
458 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
462 . doc-flag-recursion \$@
467 .\" NS doc-print-recursive macro
468 .\" NS general name recursion routine (print remaining arguments)
473 .\" NS local variables:
478 .de doc-print-recursive
479 . nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
480 . ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
482 . ie (\n[doc-reg-dpr1] == 1) \{\
483 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
487 . nr doc-reg-dpr \n[doc-arg-ptr]
489 . \" the `\%' prevents hyphenation on a dash (`-')
490 . ie (\n[doc-reg-dpr1] == 2) \
491 . nop \%\*[doc-str-dpr]\&\c
493 . \" punctuation character
494 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
495 . nop \)\*[doc-str-dpr]\f[]\s[0]\c
499 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
501 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
502 . doc-print-and-reset
505 . nop \)\*[doc-space\n[doc-reg-dpr]]\c
506 . doc-print-recursive
511 .\" NS doc-print-prefixes macro
512 .\" NS print leading prefixes
517 .de doc-print-prefixes
518 . while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
519 . if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
521 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
522 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
528 .\" NS doc-generic-macro macro
529 .\" NS this is the skeleton for most simple macros
535 .\" NS doc-macro-name
537 .de doc-generic-macro
538 . if !\n[doc-arg-limit] \{\
540 . ds doc-macro-name \$0
544 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
547 . if !\n[doc-arg-limit] \
551 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
552 . if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
553 . tmc mdoc warning: Using a macro as first argument
554 . tm1 " cancels effect of .\$0 (#\n[.c])
556 . \" the right action here would be to reset the argument counters
557 . \" and bail out -- unfortunately, a small number of manual pages
558 . \" (less than 2% for FreeBSD which has been used for testing)
559 . \" relied on the old behaviour (silently ignore this error),
560 . \" so it is commented out
565 . nr doc-curr-font \n[.f]
566 . nr doc-curr-size \n[.ps]
567 . nop \*[doc-\$0-font]\c
568 . doc-print-recursive
572 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
579 .\" NS command line `argument' macro: `.Ar [args ...]'
585 .\" NS doc-macro-name
587 .\" NS local variable:
588 .\" NS doc-str-Ar-default
590 .\" NS width register `Ar' set in doc-common
592 .ds doc-str-Ar-default "file\ .\|.\|.
595 . nr doc-curr-font \n[.f]
596 . nr doc-curr-size \n[.ps]
597 . nop \*[doc-Ar-font]\c
599 . if !\n[doc-arg-limit] \{\
600 . ds doc-macro-name Ar
605 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
608 . if !\n[doc-arg-limit] \
613 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
614 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
615 . doc-print-and-reset
618 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
619 . \" replace previous argument (Ar) with default value
621 . ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
622 . nr doc-type\n[doc-arg-ptr] 2
623 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
625 . \" recompute space vector for remaining arguments
626 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
627 . nr doc-arg-limit \n[doc-arg-ptr]
628 . doc-parse-space-vector
630 . doc-print-recursive
638 .\" NS width register `Ad' set in doc-common
640 .als Ad doc-generic-macro
641 .ds doc-Ad-usage address
644 .\" NS doc-indent-synopsis global register
645 .\" NS indentation in synopsis
647 .nr doc-indent-synopsis 0
650 .\" NS doc-indent-synopsis-active global register (bool)
651 .\" NS indentation in synopsis active
653 .nr doc-indent-synopsis-active 0
657 .\" NS config declaration (for section 4 SYNOPSIS)
659 .\" NS this function causes a break; it uses the `Nm' font
665 .\" NS doc-indent-synopsis
666 .\" NS doc-macro-name
668 .\" NS width register `Cd' set in doc-common
671 . if !\n[doc-arg-limit] \{\
673 . ds doc-macro-name Cd
677 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
680 . if !\n[doc-arg-limit] \
684 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
685 . nr doc-curr-font \n[.f]
686 . nr doc-curr-size \n[.ps]
688 . ie \n[doc-in-synopsis-section] \{\
689 . ie "\*[doc-macro-name]"Cd" \{\
691 . if !\n[doc-indent-synopsis] \
692 . nr doc-indent-synopsis \n[doc-display-indent]u
693 . if !\n[doc-indent-synopsis-active] \
694 . in +\n[doc-indent-synopsis]u
695 . ti -\n[doc-indent-synopsis]u
696 . nop \*[doc-Nm-font]\c
697 . doc-print-recursive
698 . if !\n[doc-indent-synopsis-active] \
699 . in -\n[doc-indent-synopsis]u
702 . nop \*[doc-Nm-font]\c
703 . doc-print-recursive
706 . nop \*[doc-Nm-font]\c
707 . doc-print-recursive
710 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
717 .\" NS interactive command modifier (flag)
719 .\" NS width register `Cm' set in doc-common
721 .als Cm doc-generic-macro
722 .ds doc-Cm-usage interactive_command_modifier
726 .\" NS defined variable
728 .\" NS this function uses the `Er' font
730 .\" NS width register `Dv' set in doc-common
732 .als Dv doc-generic-macro
733 .ds doc-Dv-usage defined_variable
734 .als doc-Dv-font doc-Er-font
740 .\" NS width register `Em' set in doc-common
742 .als Em doc-generic-macro
743 .ds doc-Em-usage text
749 .\" NS width register `Er' set in doc-common
751 .als Er doc-generic-macro
752 .ds doc-Er-usage text
756 .\" NS environment variable
758 .\" NS width register `Ev' set in doc-common
760 .als Ev doc-generic-macro
761 .ds doc-Ev-usage text
764 .\" NS doc-have-decl global register (bool)
765 .\" NS subroutine test (in synopsis only)
770 .\" NS doc-have-var global register (bool)
771 .\" NS whether last type is a variable type
776 .\" NS doc-do-func-decl macro
777 .\" NS do something special while in SYNOPSIS
786 . if \n[doc-in-synopsis-section] \{\
787 . \" if a variable type was the last thing given, want vertical space
788 . if \n[doc-have-var] \{\
792 . \" if a subroutine was the last thing given, want vertical space
793 . if \n[doc-have-func] \{\
794 . ie \n[doc-have-decl] \
802 . nr doc-curr-font \n[.f]
803 . nr doc-curr-size \n[.ps]
808 .\" NS function declaration -- not callable
810 .\" NS this function causes a break
812 .\" NS width register `Fd' set in doc-common
815 . ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
817 . nop \*[doc-Fd-font]\$*
819 . ft \n[doc-curr-font]
820 . ps \n[doc-curr-size]u
823 . tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
830 .\" NS #include statement in SYNOPSIS
831 .\" NS <header.h> if not in SYNOPSIS
833 .\" NS this function causes a break; it uses the `Fd' font
839 .\" NS doc-indent-synopsis
840 .\" NS doc-macro-name
842 .\" NS width register `In' set in doc-common
845 . if !\n[doc-arg-limit] \{\
847 . ds doc-macro-name In
851 . tm Usage: .In include_file ... (#\n[.c])
854 . if !\n[doc-arg-limit] \
859 . ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
860 . nr doc-curr-font \n[.f]
861 . nr doc-curr-size \n[.ps]
863 . ie \n[doc-in-synopsis-section] \{\
864 . ie "\*[doc-macro-name]"In" \{\
866 . nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
867 . ft \n[doc-curr-font]
868 . ps \n[doc-curr-size]u
871 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
872 . doc-print-recursive
877 . ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
878 . as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
879 . doc-print-recursive
882 . ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
883 . as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
884 . doc-print-recursive
887 . tm Usage: .In include_file ... (#\n[.c])
894 .\" NS function return value
896 .\" NS this function uses the `Ar' font
898 .\" NS width register `Fr' set in doc-common
900 .als Fr doc-generic-macro
901 .ds doc-Fr-usage function_return_value
902 .als doc-Fr-font doc-Ar-font
906 .\" NS interactive command
908 .\" NS width register `Ic' set in doc-common
910 .als Ic doc-generic-macro
911 .ds doc-Ic-usage interactive_command
917 .\" NS width register `Li' set in doc-common
919 .als Li doc-generic-macro
920 .ds doc-Li-usage argument
926 .\" NS this function uses the `Sy' font
928 .\" NS width register `Ms' set in doc-common
930 .als Ms doc-generic-macro
931 .ds doc-Ms-usage math_symbol
932 .als doc-Ms-font doc-Sy-font
935 .\" NS doc-command-name global string
936 .\" NS save first invocation of .Nm
942 .\" NS name of command or page topic
946 .\" NS doc-command-name
949 .\" NS doc-indent-synopsis
950 .\" NS doc-indent-synopsis-active
951 .\" NS doc-macro-name
953 .\" NS width register `Nm' set in doc-common
956 . if !\n[doc-arg-limit] \{\
957 . ds doc-macro-name Nm
961 . ie "\*[doc-command-name]"" \
962 . tm Usage: .Nm name ... (#\n[.c])
964 . doc-parse-args \*[doc-command-name]
967 . if !\n[doc-arg-limit] \
972 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
974 . ie "\*[doc-command-name]"" \{\
975 . tm Usage: .Nm name ... (#\n[.c])
979 . nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
980 . doc-print-and-reset
983 . nr doc-curr-font \n[.f]
984 . nr doc-curr-size \n[.ps]
986 . ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
987 . ie "\*[doc-command-name]"" \
988 . tm Usage: .Nm name ... (#\n[.c])
990 . \" replace previous argument (Nm) with default value
992 . ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
993 . nr doc-type\n[doc-arg-ptr] 2
994 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
996 . \" recompute space vector for remaining arguments
997 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
998 . nr doc-arg-limit \n[doc-arg-ptr]
999 . doc-parse-space-vector
1002 . \" handle `.Nm ...' in SYNOPSIS
1003 . if \n[doc-in-synopsis-section] \{\
1004 . if "\*[doc-macro-name]"Nm" \{\
1006 . if !\n[doc-indent-synopsis] \{\
1007 . doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
1008 . nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
1010 . if !\n[doc-indent-synopsis-active] \{\
1011 . in +\n[doc-indent-synopsis]u
1012 . nr doc-indent-synopsis-active 1
1014 . ti -\n[doc-indent-synopsis]u
1016 . if "\*[doc-command-name]"" \
1017 . ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
1019 . nop \*[doc-Nm-font]\c
1021 . doc-print-recursive
1026 .\" NS Pa user macro
1027 .\" NS pathname: `.Pa [arg ...]'
1031 .\" NS doc-curr-font
1032 .\" NS doc-curr-size
1033 .\" NS doc-macro-name
1035 .\" NS width register `Pa' set in doc-common
1038 . if !\n[doc-arg-limit] \{\
1039 . ds doc-macro-name Pa
1040 . doc-parse-args \$@
1044 . nop \*[doc-Pa-font]~\f[]\s[0]
1047 . if !\n[doc-arg-limit] \
1051 . doc-print-prefixes
1052 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1053 . nr doc-curr-font \n[.f]
1054 . nr doc-curr-size \n[.ps]
1055 . nop \*[doc-Pa-font]\c
1056 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
1057 . \" replace previous argument (Pa) with default value
1059 . ds doc-arg\n[doc-arg-ptr] ~
1060 . nr doc-type\n[doc-arg-ptr] 2
1061 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
1063 . \" recompute space vector for remaining arguments
1064 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
1065 . nr doc-arg-limit \n[doc-arg-ptr]
1066 . doc-parse-space-vector
1068 . doc-print-recursive
1071 . nop \*[doc-Pa-font]~\f[]\s[0]\c
1072 . doc-print-and-reset
1077 .\" NS Sy user macro
1080 .\" NS width register `Sy' set in doc-common
1082 .als Sy doc-generic-macro
1083 .ds doc-Sy-usage symbolic_text
1086 .\" NS Me user macro
1089 .\" NS width register `Me' set in doc-common
1091 .als Me doc-generic-macro
1092 .ds doc-Me-usage menu_entry
1095 .\" NS Tn user macro
1100 .\" NS doc-curr-font
1101 .\" NS doc-curr-size
1102 .\" NS doc-macro-name
1104 .\" NS width register `Tn' set in doc-common
1107 . if !\n[doc-arg-limit] \{\
1109 . ds doc-macro-name Tn
1110 . doc-parse-args \$@
1113 . tm Usage: .Tn trade_name ... (#\n[.c])
1116 . if !\n[doc-arg-limit] \
1120 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1121 . nr doc-curr-font \n[.f]
1122 . nr doc-curr-size \n[.ps]
1123 . nop \)\*[doc-Tn-font-size]\c
1124 . ie !\n[doc-is-reference] \{\
1125 . nop \)\*[doc-Tn-font-shape]\c
1126 . doc-print-recursive
1132 . tm Usage: .Tn trade_name ... (#\n[.c])
1138 .\" NS Va user macro
1139 .\" NS variable name
1141 .\" NS width register `Va' set in doc-common
1143 .als Va doc-generic-macro
1144 .ds doc-Va-usage variable_name
1147 .\" NS No user macro
1148 .\" NS normal text macro (default text style if mess up)
1150 .\" NS width register `No' set in doc-common
1152 .als No doc-generic-macro
1153 .ds doc-No-usage normal_text
1156 .\" NS doc-quote-left global string
1157 .\" NS left quotation character for `doc-enclose-string' and
1158 .\" NS `doc-enclose-open'
1163 .\" NS doc-quote-right global string
1164 .\" NS right quotation character for `doc-enclose-string' and
1165 .\" NS `doc-enclose-close'
1170 .\" NS Op user macro
1171 .\" NS option expression (i.e., enclose string in square brackets)
1174 .\" NS doc-macro-name
1175 .\" NS doc-quote-left
1176 .\" NS doc-quote-right
1178 .\" NS width register `Op' set in doc-common
1181 . if !\n[doc-arg-limit] \
1182 . ds doc-macro-name Op
1184 . ds doc-quote-left "\*[doc-left-bracket]
1185 . ds doc-quote-right "\*[doc-right-bracket]
1187 . doc-enclose-string \$@
1191 .\" NS Aq user macro
1192 .\" NS enclose string in angle brackets
1195 .\" NS doc-macro-name
1196 .\" NS doc-quote-left
1197 .\" NS doc-quote-right
1199 .\" NS width register `Aq' set in doc-common
1202 . if !\n[doc-arg-limit] \
1203 . ds doc-macro-name Aq
1205 . ie "\*[doc-macro-name]"An" \{\
1206 . ds doc-quote-left <
1207 . ds doc-quote-right >
1210 . ds doc-quote-left \[la]
1211 . ds doc-quote-right \[ra]
1214 . doc-enclose-string \$@
1218 .\" NS Bq user macro
1219 .\" NS enclose string in square brackets
1222 .\" NS doc-macro-name
1223 .\" NS doc-quote-left
1224 .\" NS doc-quote-right
1226 .\" NS width register `Bq' set in doc-common
1229 . if !\n[doc-arg-limit] \
1230 . ds doc-macro-name Bq
1232 . ds doc-quote-left "\*[doc-left-bracket]
1233 . ds doc-quote-right "\*[doc-right-bracket]
1235 . doc-enclose-string \$@
1239 .\" NS Brq user macro
1240 .\" NS enclose string in braces
1243 .\" NS doc-macro-name
1244 .\" NS doc-quote-left
1245 .\" NS doc-quote-right
1247 .\" NS width register `Brq' set in doc-common
1250 . if !\n[doc-arg-limit] \
1251 . ds doc-macro-name Brq
1253 . ds doc-quote-left {
1254 . ds doc-quote-right }
1256 . doc-enclose-string \$@
1260 .\" NS Dq user macro
1261 .\" NS enclose string in double quotes
1264 .\" NS doc-macro-name
1265 .\" NS doc-quote-left
1266 .\" NS doc-quote-right
1268 .\" NS width register `Dq' set in doc-common
1271 . if !\n[doc-arg-limit] \
1272 . ds doc-macro-name Dq
1274 . ds doc-quote-left "\*[Lq]
1275 . ds doc-quote-right "\*[Rq]
1277 . doc-enclose-string \$@
1281 .\" NS Eq user macro
1282 .\" NS enclose string in user-defined quotes (args 1 and 2)
1285 .\" NS doc-macro-name
1286 .\" NS doc-quote-left
1287 .\" NS doc-quote-right
1289 .\" NS width register `Eq' set in doc-common
1292 . if !\n[doc-arg-limit] \
1293 . ds doc-macro-name Eq
1295 . ds doc-quote-left "\$1
1296 . ds doc-quote-right "\$2
1299 . doc-enclose-string \$@
1303 .\" NS Pq user macro
1304 .\" NS enclose string in parentheses
1307 .\" NS doc-macro-name
1308 .\" NS doc-quote-left
1309 .\" NS doc-quote-right
1311 .\" NS width register `Pq' set in doc-common
1314 . if !\n[doc-arg-limit] \
1315 . ds doc-macro-name Pq
1317 . ds doc-quote-left "\*[doc-left-parenthesis]
1318 . ds doc-quote-right "\*[doc-right-parenthesis]
1320 . doc-enclose-string \$@
1324 .\" NS Ql user macro
1325 .\" NS quoted literal
1327 .\" is in file doc-[dit|n]roff
1330 .\" NS Qq user macro
1331 .\" NS enclose string in straight double quotes
1334 .\" NS doc-macro-name
1335 .\" NS doc-quote-left
1336 .\" NS doc-quote-right
1338 .\" NS width register `Qq' set in doc-common
1341 . if !\n[doc-arg-limit] \
1342 . ds doc-macro-name Qq
1344 . ds doc-quote-left "\*[q]
1345 . ds doc-quote-right "\*[q]
1347 . doc-enclose-string \$@
1351 .\" NS Sq user macro
1352 .\" NS enclose string in single quotes
1355 .\" NS doc-macro-name
1356 .\" NS doc-quote-left
1357 .\" NS doc-quote-right
1359 .\" NS width register `Sq' set in doc-common
1362 . if !\n[doc-arg-limit] \
1363 . ds doc-macro-name Sq
1365 . ds doc-quote-left "\*[doc-left-singlequote]
1366 . ds doc-quote-right "\*[doc-right-singlequote]
1368 . doc-enclose-string \$@
1372 .\" NS Es user macro
1373 .\" NS set up arguments (i.e., the left and right quotation character as
1374 .\" NS first and second argument) for .En call
1378 .\" NS doc-macro-name
1379 .\" NS doc-quote-left
1380 .\" NS doc-quote-right
1383 . if !\n[doc-arg-limit] \{\
1384 . ie (\n[.$] > 2) \{\
1385 . ds doc-macro-name Es
1386 . doc-parse-args \$@
1389 . ds doc-quote-left "\$1
1390 . ds doc-quote-right "\$2
1393 . if !\n[doc-arg-limit] \
1397 . ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
1399 . ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
1401 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1402 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1404 . doc-print-and-reset
1408 .\" NS doc-have-slot global register (bool)
1409 .\" NS set if `doc-enclose-string' has created a slot for closing
1415 .\" NS doc-enclose-string macro
1416 .\" NS enclose string with given args (e.g. [ and ])
1421 .\" NS doc-have-slot
1423 .\" NS local variables:
1429 .\" NS doc-quote-left
1430 .\" NS doc-quote-right
1432 .de doc-enclose-string
1433 . if \n[doc-in-synopsis-section] \
1434 . doc-set-hard-space
1436 . if !\n[doc-arg-limit] \{\
1438 . doc-parse-args \$@
1440 . nop \)\*[doc-quote-left]\*[doc-quote-right]
1443 . if !\n[doc-arg-limit] \
1446 . nr doc-curr-font \n[.f]
1447 . nr doc-curr-size \n[.ps]
1450 . doc-print-prefixes
1451 . \" the final `\)' prevents hyphenation in case the next character is `\%'
1452 . nop \)\*[doc-quote-left]\)\c
1453 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
1455 . nop \)\*[doc-quote-right]\)\c
1456 . doc-print-and-reset
1459 . \" test whether last arguments are of type closing punctuation
1461 . ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
1462 . nr doc-reg-des (\n[doc-arg-limit] - 1)
1463 . while (\n[doc-type\n[doc-reg-des]] == 3) \
1466 . \" prepend closing delimiter
1468 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1471 . \" test whether last arguments are macros which continue the line
1473 . nr doc-reg-des \n[doc-arg-limit]
1474 . while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
1475 . if !\A
\a\*[doc-arg\n[doc-reg-des]]
\a \
1477 . if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
1482 . \" if there are no trailing macros to be skipped, append argument
1483 . ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
1484 . doc-append-arg "\)\*[doc-quote-right]\)" 3
1486 . \" if a previous call to `doc-enclose-string' has already created
1487 . \" a slot, prepend argument
1488 . ie \n[doc-have-slot] \
1489 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1491 . \" we have to shift all arguments to the right
1493 . nr doc-reg-des1 \n[doc-arg-limit]
1494 . nr doc-reg-des2 (\n[doc-arg-limit] + 1)
1495 . while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
1496 . rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
1497 . rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
1498 . rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
1499 . nr doc-reg-des1 -1
1500 . nr doc-reg-des2 -1
1502 . nr doc-arg-limit +1
1504 . \" finally, insert closing delimiter into the freed slot and
1505 . \" recompute spacing vector
1506 . ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
1507 . nr doc-type\n[doc-reg-des] 3
1508 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
1509 . nr doc-arg-limit (\n[doc-reg-des] - 1)
1510 . doc-parse-space-vector
1511 . nr doc-have-slot 1
1514 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1517 . if \n[doc-in-synopsis-section] \
1518 . doc-set-soft-space
1522 .\" NS En user macro
1523 .\" NS enclose arguments with quotation characters set up with `.Es'
1525 .als En doc-enclose-string
1528 .\" NS Ao user macro
1532 .\" NS doc-macro-name
1533 .\" NS doc-quote-left
1535 .\" NS width register `Ao' set in doc-common
1538 . if !\n[doc-arg-limit] \
1539 . ds doc-macro-name Ao
1541 . ie "\*[doc-macro-name]"An" \
1542 . ds doc-quote-left <
1544 . ds doc-quote-left \[la]
1546 . doc-enclose-open \$@
1550 .\" NS Ac user macro
1554 .\" NS doc-macro-name
1555 .\" NS doc-quote-right
1557 .\" NS width register `Ac' set in doc-common
1560 . if !\n[doc-arg-limit] \
1561 . ds doc-macro-name Ac
1563 . ie "\*[doc-macro-name]"An" \
1564 . ds doc-quote-right >
1566 . ds doc-quote-right \[ra]
1568 . doc-enclose-close \$@
1572 .\" NS Bo user macro
1576 .\" NS doc-macro-name
1577 .\" NS doc-quote-left
1579 .\" NS width register `Bo' set in doc-common
1582 . if !\n[doc-arg-limit] \
1583 . ds doc-macro-name Bo
1585 . ds doc-quote-left "\*[doc-left-bracket]
1587 . doc-enclose-open \$@
1591 .\" NS Bc user macro
1592 .\" NS bracket close
1595 .\" NS doc-macro-name
1596 .\" NS doc-quote-right
1598 .\" NS width register `Bc' set in doc-common
1601 . if !\n[doc-arg-limit] \
1602 . ds doc-macro-name Bc
1604 . ds doc-quote-right "\*[doc-right-bracket]
1606 . doc-enclose-close \$@
1610 .\" NS Bro user macro
1614 .\" NS doc-macro-name
1615 .\" NS doc-quote-left
1617 .\" NS width register `Bro' set in doc-common
1620 . if !\n[doc-arg-limit] \
1621 . ds doc-macro-name Bo
1623 . ds doc-quote-left {
1625 . doc-enclose-open \$@
1629 .\" NS Brc user macro
1633 .\" NS doc-macro-name
1634 .\" NS doc-quote-right
1636 .\" NS width register `Brc' set in doc-common
1639 . if !\n[doc-arg-limit] \
1640 . ds doc-macro-name Bc
1642 . ds doc-quote-right }
1644 . doc-enclose-close \$@
1648 .\" NS Do user macro
1649 .\" NS double quote open
1652 .\" NS doc-macro-name
1653 .\" NS doc-quote-left
1655 .\" NS width register `Do' set in doc-common
1658 . if !\n[doc-arg-limit] \
1659 . ds doc-macro-name Do
1661 . ds doc-quote-left "\*[Lq]
1663 . doc-enclose-open \$@
1667 .\" NS Dc user macro
1668 .\" NS double quote close
1671 .\" NS doc-macro-name
1672 .\" NS doc-quote-right
1674 .\" NS width register `Dc' set in doc-common
1677 . if !\n[doc-arg-limit] \
1678 . ds doc-macro-name Dc
1680 . ds doc-quote-right "\*[Rq]
1682 . doc-enclose-close \$@
1686 .\" NS Eo user macro
1687 .\" NS enclose open (using first argument as beginning of enclosure)
1690 .\" NS doc-macro-name
1691 .\" NS doc-quote-left
1693 .\" NS width register `Eo' set in doc-common
1696 . if !\n[doc-arg-limit] \
1697 . ds doc-macro-name Eo
1699 . ds doc-quote-left "\$1
1702 . doc-enclose-open \$@
1706 .\" NS Ec user macro
1707 .\" NS enclose close (using first argument as end of enclosure)
1710 .\" NS doc-macro-name
1711 .\" NS doc-quote-right
1713 .\" NS width register `Ec' set in doc-common
1716 . if !\n[doc-arg-limit] \
1717 . ds doc-macro-name Ec
1719 . ds doc-quote-right "\$1
1722 . doc-enclose-close \$@
1726 .\" NS Oo user macro
1730 .\" NS doc-macro-name
1731 .\" NS doc-quote-left
1733 .\" NS width register `Oo' set in doc-common
1736 . if !\n[doc-arg-limit] \
1737 . ds doc-macro-name Oo
1739 . ds doc-quote-left [
1741 . doc-enclose-open \$@
1745 .\" NS Oc user macro
1749 .\" NS doc-macro-name
1750 .\" NS doc-quote-right
1752 .\" NS width register `Oc' set in doc-common
1755 . if !\n[doc-arg-limit] \
1756 . ds doc-macro-name Oc
1758 . ds doc-quote-right ]
1760 . doc-enclose-close \$@
1764 .\" NS Po user macro
1765 .\" NS parenthesis open
1768 .\" NS doc-macro-name
1769 .\" NS doc-quote-left
1771 .\" NS width register `Po' set in doc-common
1774 . if !\n[doc-arg-limit] \
1775 . ds doc-macro-name Po
1777 . ds doc-quote-left "\*[doc-left-parenthesis]
1779 . doc-enclose-open \$@
1783 .\" NS Pc user macro
1784 .\" NS parenthesis close
1787 .\" NS doc-macro-name
1788 .\" NS doc-quote-right
1790 .\" NS width register `Pc' set in doc-common
1793 . if !\n[doc-arg-limit] \
1794 . ds doc-macro-name Pc
1796 . ds doc-quote-right "\*[doc-right-parenthesis]
1798 . doc-enclose-close \$@
1802 .\" NS Qo user macro
1803 .\" NS straight double quote open
1806 .\" NS doc-macro-name
1807 .\" NS doc-quote-left
1809 .\" NS width register `Qo' set in doc-common
1812 . if !\n[doc-arg-limit] \
1813 . ds doc-macro-name Qo
1815 . ds doc-quote-left "\*[q]
1817 . doc-enclose-open \$@
1821 .\" NS Qc user macro
1822 .\" NS straight double quote close
1825 .\" NS doc-macro-name
1826 .\" NS doc-quote-right
1828 .\" NS width register `Qc' set in doc-common
1831 . if !\n[doc-arg-limit] \
1832 . ds doc-macro-name Qc
1834 . ds doc-quote-right "\*[q]
1836 . doc-enclose-close \$@
1840 .\" NS So user macro
1841 .\" NS single quote open
1844 .\" NS doc-macro-name
1845 .\" NS doc-quote-left
1847 .\" NS width register `So' set in doc-common
1850 . if !\n[doc-arg-limit] \
1851 . ds doc-macro-name So
1853 . ds doc-quote-left "\*[doc-left-singlequote]
1855 . doc-enclose-open \$@
1859 .\" NS Sc user macro
1860 .\" NS single quote close
1863 .\" NS doc-macro-name
1864 .\" NS doc-quote-right
1866 .\" NS width register `Sc' set in doc-common
1869 . if !\n[doc-arg-limit] \
1870 . ds doc-macro-name Sc
1872 . ds doc-quote-right "\*[doc-right-singlequote]
1874 . doc-enclose-close \$@
1878 .\" NS Xo user macro
1882 .\" NS doc-macro-name
1883 .\" NS doc-quote-left
1885 .\" NS width register `Xo' set in doc-common
1888 . if !\n[doc-arg-limit] \
1889 . ds doc-macro-name Xo
1893 . doc-enclose-open \$@
1897 .\" NS Xc user macro
1901 .\" NS doc-macro-name
1902 .\" NS doc-quote-right
1904 .\" NS width register `Xc' set in doc-common
1907 . if !\n[doc-arg-limit] \
1908 . ds doc-macro-name Xc
1910 . ds doc-quote-right
1912 . doc-enclose-close \$@
1916 .\" NS doc-nesting-level global register
1917 .\" NS used by `doc-enclose-open' and `doc-enclose-close'
1919 .nr doc-nesting-level 0
1922 .\" NS doc-in-list global register (bool)
1923 .\" NS whether we are in (logical) .It
1928 .\" NS doc-enclose-open macro
1929 .\" NS enclose string open
1933 .\" NS doc-nesting-level
1935 .de doc-enclose-open
1936 . if !\n[doc-arg-limit] \
1937 . doc-parse-args \$@
1940 . doc-print-prefixes
1943 . nop \)\*[doc-quote-left]\)\c
1945 . \" start enclosure box
1946 . box doc-enclosure-box\n[doc-nesting-level]
1947 . ev doc-enclosure-env\n[doc-nesting-level]
1951 . \" we insert something to make .chop always work
1954 . \" increase nesting level *after* parsing of arguments
1955 . nr doc-nesting-level +1
1957 . if \n[doc-arg-limit] \{\
1959 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1960 . doc-print-recursive
1967 .\" NS doc-enclose-close macro
1968 .\" NS enclose string close
1971 .\" NS doc-nesting-level
1973 .de doc-enclose-close
1974 . nr doc-nesting-level -1
1976 . \" finish enclosure box
1980 . chop doc-enclosure-box\n[doc-nesting-level]
1981 . unformat doc-enclosure-box\n[doc-nesting-level]
1984 . nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
1985 . nop \)\*[doc-quote-right]\)\c
1987 . if !\n[doc-arg-limit] \{\
1988 . doc-parse-args \$@
1991 . doc-print-and-reset
1994 . if \n[doc-arg-limit] \{\
1995 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
1996 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
1998 . doc-print-recursive
2001 . doc-print-and-reset
2004 . \" shall we finish .It macro?
2005 . if !"\*[doc-macro-name]"It" \
2006 . if \n[doc-in-list] \
2007 . if !\n[doc-nesting-level] \
2008 . doc-\*[doc-list-type-stack\n[doc-list-depth]]
2012 .\" NS Pf user macro
2013 .\" NS prefix: `.Pf prefix arg ...'
2017 .\" NS doc-macro-name
2018 .\" NS doc-quote-left
2020 .\" NS width register `Pf' set in doc-common
2023 . if !\n[doc-arg-limit] \
2024 . ds doc-macro-name Pf
2026 . ie \n[doc-arg-limit] \{\
2027 . ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
2029 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
2032 . tm mdoc warning: .Pf: trailing prefix (#\n[.c])
2038 . doc-parse-args \$@
2040 . tm mdoc warning: .Pf: missing arguments (#\n[.c])
2044 . if \n[doc-arg-limit] \{\
2046 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
2047 . doc-print-and-reset
2049 . doc-do-\n[doc-type\n[doc-arg-ptr]]
2054 .\" NS Ns user macro
2055 .\" NS remove space (space removal done by `doc-parse-args')
2059 .\" NS doc-macro-name
2061 .\" NS width register `Ns' set in doc-common
2064 . if !\n[doc-arg-limit] \{\
2066 . ds doc-macro-name Ns
2067 . doc-parse-args \$@
2070 . tm Usage: .Ns must be called with arguments (#\n[.c])
2073 . if \n[doc-arg-limit] \{\
2075 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2076 . doc-print-recursive
2083 .\" NS Ap user macro
2084 .\" NS append an apostrophe
2086 .\" NS width register `Ap' set in doc-common
2089 . ie !\n[doc-arg-limit] \
2090 . tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
2094 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2095 . doc-print-recursive
2102 .\" NS doc-space global string
2103 .\" NS current inter-argument space
2105 .ds doc-space "\*[doc-soft-space]
2108 .\" NS doc-soft-space constant string
2109 .\" NS soft (stretchable) space (defined in doc-common)
2112 .\" NS doc-hard-space constant string
2113 .\" NS hard (unpaddable) space (defined in doc-common)
2116 .\" NS doc-set-hard-space macro
2117 .\" NS set current space string to hard (unpaddable) space.
2120 .\" NS doc-saved-space
2123 .de doc-set-hard-space
2124 . ie "\*[doc-space]"" \
2125 . ds doc-saved-space "\*[doc-hard-space]
2127 . ds doc-space "\*[doc-hard-space]
2131 .\" NS doc-set-soft-space macro
2132 .\" NS set current space string to soft space
2135 .\" NS doc-saved-space
2138 .de doc-set-soft-space
2139 . ie "\*[doc-space]"" \
2140 . ds doc-saved-space "\*[doc-soft-space]
2142 . ds doc-space "\*[doc-soft-space]
2146 .\" NS doc-space-mode global register (bool)
2147 .\" NS default is one (space mode on)
2149 .nr doc-space-mode 1
2152 .\" NS doc-saved-space global string
2153 .\" NS saved value of `doc-space'
2155 .ds doc-saved-space "\*[doc-space]
2158 .\" NS doc-have-space global register (bool)
2159 .\" NS set if last command was horizontal space
2161 .nr doc-have-space 0
2164 .\" NS Sm user macro
2165 .\" NS space mode (`.Sm'/`.Sm on'/`.Sm off')
2167 .\" NS without argument, toggle space mode
2170 .\" NS doc-arg-limit
2173 .\" NS doc-macro-name
2175 .\" NS doc-saved-space
2177 .\" NS doc-space-mode
2180 .\" NS local variables:
2183 .\" NS width register `Sm' set in doc-common
2186 . ie \n[doc-have-space] \
2191 . if !\n[doc-arg-limit] \{\
2193 . ds doc-macro-name Sm
2194 . doc-parse-args \$@
2197 . ie \n[doc-space-mode] \{\
2198 . ds doc-saved-space "\*[doc-space]
2200 . nr doc-space-mode 0
2203 . ds doc-space "\*[doc-saved-space]
2204 . nr doc-space-mode 1
2206 . \" finish line only if it is interrupted and `doc-have-space'
2208 . if \n[doc-reg-Sm] \
2214 . if !\n[doc-arg-limit] \
2219 . \" avoid a warning message in case `Sm' is the last parameter
2220 . if !d doc-arg\n[doc-arg-ptr] \
2221 . ds doc-arg\n[doc-arg-ptr]
2223 . ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
2224 . ds doc-space "\*[doc-saved-space]
2225 . nr doc-space-mode 1
2228 . ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
2229 . ds doc-saved-space "\*[doc-space]
2231 . nr doc-space-mode 0
2234 . \" no argument for Sm
2236 . ie \n[doc-space-mode] \{\
2237 . ds doc-saved-space "\*[doc-space]
2239 . nr doc-space-mode 0
2242 . ds doc-space "\*[doc-saved-space]
2243 . nr doc-space-mode 1
2247 . ie \n[doc-space-mode] \{\
2248 . \" recompute space vector for remaining arguments
2249 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
2250 . nr doc-arg-limit \n[doc-arg-ptr]
2251 . if \n[doc-num-args] \
2252 . doc-parse-space-vector
2254 . \" finish line only if it is interrupted and `doc-have-space'
2256 . if \n[doc-reg-Sm] \
2261 . \" reset remaining space vector elements
2262 . nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
2263 . while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
2264 . ds doc-space\n[doc-reg-Sm]
2266 . \" the body of a `while' request must end with the fitting `\}'!
2270 . \" do we have parameters to print?
2271 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
2272 . \" skip `Sm' argument
2274 . doc-print-recursive
2281 .\" NS doc-arg-type immediate register
2282 .\" NS argument type (macro=1, string=2, punctuation suffix=3,
2283 .\" NS punctuation prefix=4)
2288 .\" NS doc-get-arg-type macro
2289 .\" NS get argument type
2291 .\" NS this macro expects the width of the argument in `doc-width'
2296 .de doc-get-arg-type
2299 . if ((\n[doc-width] < 4) & \A
\a\$1
\a) \{\
2300 . ie (\n[doc-width] == 1) \{\
2301 . if r doc-punct\$1 \
2302 . nr doc-arg-type \n[doc-punct\$1]
2312 .\" NS doc-get-arg-type* macro
2313 .\" NS similar to as `doc-get-arg-type' but uses doc-argXXX strings
2315 .\" NS this macro sets the `doc-width' register using the `length' request
2316 .\" NS to get the number of characters in a string literally
2322 .de doc-get-arg-type*
2324 . length doc-width "\*[doc-arg\$1]
2326 . if ((\n[doc-width] < 4) & \A
\a\*[doc-arg\$1]
\a) \{\
2327 . ie (\n[doc-width] == 1) \{\
2328 . if r doc-punct\*[doc-arg\$1] \
2329 . nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
2332 . if r \*[doc-arg\$1] \
2333 . if d \*[doc-arg\$1] \
2339 .\" NS doc-set-spacing-1 macro
2340 .\" NS set spacing for macros
2345 .\" NS local variables:
2346 .\" NS doc-reg-dssfm
2347 .\" NS doc-reg-dssfm1
2349 .de doc-set-spacing-1
2350 . nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
2352 . \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
2354 . ie (\n[doc-reg-dssfm1] == 3) \{\
2355 . if \n[doc-arg-limit] \{\
2356 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2357 . ds doc-space\n[doc-reg-dssfm]
2359 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2362 . \" macros like .Ap and .Ns have value 2 (remove space before and after
2364 . ie (\n[doc-reg-dssfm1] == 2) \{\
2365 . if \n[doc-arg-limit] \{\
2366 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2367 . ds doc-space\n[doc-reg-dssfm]
2369 . ds doc-space\n[doc-arg-limit]
2372 . ds doc-space\n[doc-arg-limit]
2377 .\" NS doc-set-spacing-2 macro
2378 .\" NS set spacing for strings
2383 .de doc-set-spacing-2
2384 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2388 .\" NS doc-set-spacing-3 macro
2389 .\" NS set spacing for punctuation suffixes
2394 .\" NS local variables:
2395 .\" NS doc-reg-dssfps
2397 .de doc-set-spacing-3
2398 . if \n[doc-arg-limit] \{\
2399 . nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
2400 . ds doc-space\n[doc-reg-dssfps]
2403 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2407 .\" NS doc-set-spacing-4 macro
2408 .\" NS set spacing for punctuation prefixes
2413 .de doc-set-spacing-4
2414 . ds doc-space\n[doc-arg-limit]
2418 .\" type switches (on current argument doc-arg-ptr)
2421 .\" NS doc-do-1 macro
2422 .\" NS call request if macro
2425 . \*[doc-arg\n[doc-arg-ptr]]
2429 .\" NS doc-do-2 macro
2430 .\" NS call .doc-print-recursive if string
2432 .als doc-do-2 doc-print-recursive
2435 .\" NS doc-do-3 macro
2436 .\" NS call .doc-print-recursive if punctuation suffix
2438 .als doc-do-3 doc-print-recursive
2441 .\" NS doc-do-4 macro
2442 .\" NS call .doc-print-recursive if punctuation prefix
2444 .als doc-do-4 doc-print-recursive
2447 .\" NS doc-fontmode-depth global register
2448 .\" NS font mode level
2450 .nr doc-fontmode-depth 0
2453 .\" NS doc-fontmode-font-stackXXX global register
2454 .\" NS stack of saved current font values from `Bf' macro
2457 .\" NS doc-fontmode-depth
2459 .nr doc-fontmode-font-stack0 0
2462 .\" NS doc-fontmode-size-stackXXX global register
2463 .\" NS stack of saved current size values from `Bf' macro
2466 .\" NS doc-fontmode-depth
2468 .nr doc-fontmode-size-stack0 0
2471 .\" NS Bf user macro
2472 .\" NS begin font mode (will be begin-mode/end-mode in groff & TeX)
2475 .\" NS doc-fontmode-depth
2476 .\" NS doc-fontmode-font-stackXXX
2477 .\" NS doc-fontmode-size-stackXXX
2478 .\" NS doc-macro-name
2480 .\" NS width register `Bf' set in doc-common
2483 . ds doc-macro-name Bf
2486 . nr doc-fontmode-depth +1
2488 . \" save current font and size
2489 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
2490 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
2493 . nop \*[doc-Em-font]\c
2494 . el \{ .ie "\$1"Li" \
2495 . nop \*[doc-Li-font]\c
2496 . el \{ .ie "\$1"Sy" \
2497 . nop \*[doc-Sy-font]\c
2498 . el \{ .ie "\$1"-emphasis" \
2499 . nop \*[doc-Em-font]\c
2500 . el \{ .ie "\$1"-literal" \
2501 . nop \*[doc-Li-font]\c
2502 . el \{ .ie "\$1"-symbolic" \
2503 . nop \*[doc-Sy-font]\c
2505 . tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
2509 . tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
2513 .\" NS Ef user macro
2514 .\" NS end font mode
2517 .\" NS doc-macro-name
2519 .\" NS width register `Ef' set in doc-common
2522 . ds doc-macro-name Ef
2524 . ie \n[doc-fontmode-depth] \{\
2525 . \" restore saved font and size
2526 . nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
2527 . nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
2529 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
2530 . nr doc-curr-font \n[.f]
2531 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
2532 . nr doc-curr-size \n[.ps]
2533 . nr doc-fontmode-depth -1
2536 . tm mdoc warning: Extraneous .Ef (#\n[.c])
2540 .\" NS doc-keep-type global register
2541 .\" NS current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
2546 .\" NS Bk user macro
2550 .\" NS doc-keep-type
2551 .\" NS doc-macro-name
2553 .\" NS width register `Bk' set in doc-common
2556 . ds doc-macro-name Bk
2558 . if \n[doc-keep-type] \
2559 . tm .Bk: nesting keeps not implemented yet. (#\n[.c])
2561 . ie "\$1"-lines" \{\
2562 . nr doc-keep-type 2
2563 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2565 . el \{ .ie "\$1"-words" \{\
2566 . nr doc-keep-type 1
2567 . doc-set-hard-space
2569 . el \{ .ie "\$1"" \{\
2571 . nr doc-keep-type 1
2572 . doc-set-hard-space
2575 . tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
2576 . nr doc-keep-type 3
2579 \#. nr doc-nesting-level +1
2583 .\" NS Ek user macro
2587 .\" NS doc-keep-type
2588 .\" NS doc-macro-name
2590 .\" NS width register `Ek' set in doc-common
2593 . ds doc-macro-name Ek
2595 \#. nr doc-nesting-level -1
2598 . tm Usage: .Ek (does not take arguments) (#\n[.c])
2600 . if !\n[doc-keep-type] \
2601 . tm mdoc warning: .Ek found without .Bk before (#\n[.c])
2603 . ie (\n[doc-keep-type] == 1) \
2604 . doc-set-soft-space
2605 . el \{ .if (\n[doc-keep-type] == 2) \
2606 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2609 . nr doc-keep-type 0
2611 \#. if !"\*[doc-out-string]"" \
2612 \#. doc-print-out-string
2616 .\" NS doc-display-depth global register
2617 .\" NS display level
2619 .nr doc-display-depth 0
2622 .\" NS doc-is-compact global register (bool)
2623 .\" NS set if the `compact' keyword is given
2625 .nr doc-is-compact 0
2628 .\" NS doc-display-type-stackXXX global string
2629 .\" NS the display type stack
2632 .\" NS doc-display-depth
2634 .ds doc-display-type-stack0
2637 .\" NS doc-display-indent-stackXXX global register
2638 .\" NS stack of display indentation values
2641 .\" NS doc-display-depth
2643 .nr doc-display-indent-stack0 0
2646 .\" NS doc-display-ad-stackXXX global register
2647 .\" NS stack of saved adjustment modes
2650 .\" NS doc-display-depth
2652 .nr doc-display-ad-stack0 0
2655 .\" NS doc-display-fi-stackXXX global register
2656 .\" NS stack of saved fill modes
2659 .\" NS doc-display-depth
2661 .nr doc-display-fi-stack0 0
2664 .\" NS doc-display-ft-stackXXX global register
2665 .\" NS stack of saved fonts
2668 .\" NS doc-display-depth
2670 .nr doc-display-ft-stack0 0
2673 .\" NS doc-display-ps-stackXXX global register
2674 .\" NS stack of saved font sizes
2677 .\" NS doc-display-depth
2679 .nr doc-display-ps-stack0 0
2682 .\" NS Bd user macro
2683 .\" NS begin display
2685 .\" NS width register `Bd' set in doc-common
2688 .\" NS doc-curr-font
2689 .\" NS doc-curr-size
2690 .\" NS doc-display-depth
2691 .\" NS doc-display-ad-stackXXX
2692 .\" NS doc-display-fi-stackXXX
2693 .\" NS doc-display-ft-stackXXX
2694 .\" NS doc-display-ps-stackXXX
2695 .\" NS doc-display-file
2696 .\" NS doc-display-indent-stackXXX
2697 .\" NS doc-display-type-stackXXX
2698 .\" NS doc-is-compact
2699 .\" NS doc-macro-name
2701 .\" NS local variables:
2705 . ds doc-macro-name Bd
2708 . tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
2709 . tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c])
2713 . nr doc-is-compact 0
2714 . ds doc-display-file
2716 . nr doc-display-depth +1
2718 . \" save current adjustment and fill modes
2719 . nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
2720 . nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
2722 . ie "\$1"-literal" \{\
2723 . ds doc-display-type-stack\n[doc-display-depth] literal
2724 . nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
2725 . nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
2733 . el \{ .ie "\$1"-filled" \{\
2734 . ds doc-display-type-stack\n[doc-display-depth] filled
2738 . el \{ .ie "\$1"-ragged" \{\
2739 . ds doc-display-type-stack\n[doc-display-depth] ragged
2743 . el \{ .ie "\$1"-centered" \{\
2744 . ds doc-display-type-stack\n[doc-display-depth] centered
2748 . el \{ .ie "\$1"-unfilled" \{\
2749 . ds doc-display-type-stack\n[doc-display-depth] unfilled
2753 . tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
2754 . tm1 " in .Bd macro (#\n[.c])
2758 . \" have we seen an argument?
2759 . if \n[doc-reg-Bd] \{\
2761 . \" check other arguments
2763 . doc-do-Bd-args \$@
2766 . \" avoid warning about non-existent register
2767 . if !r doc-display-indent-stack\n[doc-display-depth] \
2768 . nr doc-display-indent-stack\n[doc-display-depth] 0
2770 . if \n[doc-display-indent-stack\n[doc-display-depth]] \
2771 . in +\n[doc-display-indent-stack\n[doc-display-depth]]u
2773 . if !\n[doc-is-compact] \
2774 . sp \n[doc-display-vertical]u
2776 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
2778 . nop \*[doc-Li-font]\c
2783 . if !"\*[doc-display-file]"" \
2784 . so \*[doc-display-file]
2786 . nr doc-is-compact 0
2787 . ds doc-display-file
2791 .\" NS doc-do-Bd-args macro
2792 .\" NS resolve remaining .Bd arguments
2795 .\" NS doc-display-file
2796 .\" NS doc-display-indent-stackXXX
2797 .\" NS doc-is-compact
2799 .\" NS local variables:
2801 .\" NS doc-reg-ddBa1
2802 .\" NS doc-reg-ddBa2
2803 .\" NS doc-reg-ddBa3
2804 .\" NS doc-reg-ddBa4
2810 . ie "\$1"-offset" \{\
2814 . nr doc-display-indent-stack\n[doc-display-depth] 0
2815 . el \{ .ie "\$2"right" \
2816 . nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
2817 . el \{ .ie "\$2"center" \
2818 . nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
2819 . el \{ .ie "\$2"indent" \
2820 . nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
2821 . el \{ .ie "\$2"indent-two" \
2822 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
2827 . \" not a known keyword
2828 . if (\n[doc-reg-ddBa] == 1) \{\
2831 . nr doc-reg-ddBa1 0
2832 . if \B
\a(\$2)
\a \{\
2833 . \" disable warnings related to scaling indicators (32)
2834 . nr doc-reg-ddBa2 \n[.warn]
2835 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
2837 . \" values without a scaling indicator are taken as strings;
2838 . \" we test whether the parameter string with and without the last
2839 . \" character yields identical numerical results (ignoring the
2840 . \" scaling indicator)
2841 . ds doc-str-ddBa "\$2
2842 . substring doc-str-ddBa 0 -2
2843 . if \B
\a(\*[doc-str-ddBa])
\a \{\
2844 . nr doc-reg-ddBa3 (;(\$2))
2845 . nr doc-reg-ddBa4 (\*[doc-str-ddBa])
2846 . if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
2847 . nr doc-reg-ddBa1 1
2850 . \" enable all warnings again
2851 . warn \n[doc-reg-ddBa2]
2854 . ie \n[doc-reg-ddBa1] \
2855 . nr doc-display-indent-stack\n[doc-display-depth] \$2
2857 . doc-get-width "\$2"
2858 . ie (\n[doc-width] <= 3) \{\
2859 . \" if the offset parameter is a macro, use the macro's
2860 . \" width as specified in doc-common
2861 . doc-get-arg-type "\$2"
2862 . ie (\n[doc-arg-type] == 1) \
2863 . nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
2865 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2868 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2871 . el \{ .ie "\$1"-compact" \
2872 . nr doc-is-compact 1
2873 . el \{ .ie "\$1"-file" \{\
2875 . ds doc-display-file "\$2
2879 . tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
2882 . tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
2885 . if (\n[doc-reg-ddBa] < \n[.$]) \{\
2886 . shift \n[doc-reg-ddBa]
2887 . doc-do-Bd-args \$@
2892 .\" NS Ed user macro
2896 .\" NS doc-display-depth
2897 .\" NS doc-display-indent-stackXXX
2898 .\" NS doc-display-type-stackXXX
2899 .\" NS doc-macro-name
2901 .\" NS width register `Ed' set in doc-common
2904 . ds doc-macro-name Ed
2908 . if !\n[doc-display-depth] \{\
2909 . tm mdoc warning: Extraneous .Ed (#\n[.c])
2910 . nr doc-display-depth 1
2913 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
2914 . ft \n[doc-display-ft-stack\n[doc-display-depth]]
2915 . ps \n[doc-display-ps-stack\n[doc-display-depth]]u
2918 . in -\n[doc-display-indent-stack\n[doc-display-depth]]u
2920 . \" restore saved adjustment and fill modes
2921 . ie \n[doc-display-fi-stack\n[doc-display-depth]] \
2925 . ad \n[doc-display-ad-stack\n[doc-display-depth]]
2927 . nr doc-display-indent-stack\n[doc-display-depth] 0
2928 . ds doc-display-type-stack\n[doc-display-depth]
2929 . nr doc-display-depth -1
2933 .\" NS doc-list-type-stackXXX global string
2934 .\" NS stack of list types
2937 .\" NS doc-list-depth
2939 .ds doc-list-type-stack1
2942 .\" NS doc-list-indent-stackXXX global register
2943 .\" NS stack of list indentation values
2946 .\" NS doc-list-depth
2948 .nr doc-list-indent-stack1 0
2951 .\" NS doc-list-have-indent-stackXXX global register (bool)
2952 .\" NS an indentation value is active
2955 .\" NS doc-list-depth
2957 .nr doc-list-have-indent-stack1 0
2960 .\" NS Bl user macro
2963 .\" NS width register `Bl' set in doc-common
2968 .\" NS doc-list-depth
2969 .\" NS doc-list-have-indent-stackXXX
2970 .\" NS doc-list-indent-stackXXX
2971 .\" NS doc-list-type-stackXXX
2972 .\" NS doc-macro-name
2974 .\" NS doc-num-columns
2976 .\" NS local variables:
2985 . ds doc-macro-name Bl
2986 . nr doc-list-depth +1
2989 . ie "\$1"-hang" \{\
2990 . ds doc-list-type-stack\n[doc-list-depth] hang-list
2991 . nr doc-list-indent-stack\n[doc-list-depth] 6n
2992 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2994 . el \{ .ie "\$1"-tag" \{\
2995 . ds doc-list-type-stack\n[doc-list-depth] tag-list
2996 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2998 . el \{ .ie "\$1"-item" \{\
2999 . ds doc-list-type-stack\n[doc-list-depth] item-list
3000 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3002 . el \{ .ie "\$1"-enum" \{\
3003 . ds doc-list-type-stack\n[doc-list-depth] enum-list
3004 . nr doc-list-indent-stack\n[doc-list-depth] 3n
3005 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3007 . el \{ .ie "\$1"-bullet" \{\
3008 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
3009 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3010 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3012 . el \{ .ie "\$1"-dash" \{\
3013 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3014 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3015 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3017 . el \{ .ie "\$1"-hyphen" \{\
3018 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3019 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3020 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3022 . el \{ .ie "\$1"-inset" \{\
3023 . ds doc-list-type-stack\n[doc-list-depth] inset-list
3024 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3026 . el \{ .ie "\$1"-diag" \{\
3027 . ds doc-list-type-stack\n[doc-list-depth] diag-list
3029 . el \{ .ie "\$1"-ohang" \{\
3030 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
3031 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3033 . el \{ .ie "\$1"-column" \{\
3034 . ds doc-list-type-stack\n[doc-list-depth] column-list
3038 . tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
3039 . tm1 " in .Bl macro
3042 . \}\}\}\}\}\}\}\}\}\}\}
3044 . \" we have seen a list type
3045 . if !\n[doc-arg-ptr] \{\
3048 . nr doc-list-depth -1
3054 . \" fill argument vector
3056 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
3057 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
3058 . \" dummy type and space so that doc-save-global-vars() doesn't warn
3059 . nr doc-type\n[doc-reg-Bl] 0
3060 . ds doc-space\n[doc-reg-Bl]
3064 . doc-increment-list-stack
3067 . nr doc-arg-limit \n[.$]
3071 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
3073 . \" initialize column list
3074 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3075 . doc-set-column-tab \n[doc-num-columns]
3076 ' in -\n[doc-column-indent-width]u
3077 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3078 . sp \n[doc-display-vertical]u
3081 . nr doc-num-columns 0
3088 .\" NS doc-Bl-usage macro
3091 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3092 . tm1 " [-width <string>]
3093 . tm1 " [-offset <string>] [-compact]
3094 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3095 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3096 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3100 .\" NS doc-do-Bl-args macro
3101 .\" NS resolve remaining .Bl arguments
3106 .\" NS doc-compact-list-stackXXX
3107 .\" NS doc-list-indent-stackXXX
3108 .\" NS doc-list-offset-stackXXX
3109 .\" NS doc-num-columns
3110 .\" NS doc-tag-prefix-stackXXX
3111 .\" NS doc-tag-width-stackXXX
3113 .\" NS local variables:
3117 .\" NS doc-reg-dBla1
3118 .\" NS doc-reg-dBla2
3119 .\" NS doc-reg-dBla3
3120 .\" NS doc-reg-dBla4
3122 .\" NS doc-str-dBla1
3127 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
3130 . \" avoid a warning message in case e.g. `-offset' has no parameter
3131 . nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
3132 . if (\n[doc-arg-limit] < \n[doc-reg-dBla]) \
3133 . ds doc-arg\n[doc-reg-dBla]
3137 . ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
3138 . nr doc-compact-list-stack\n[doc-list-depth] 1
3140 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
3141 . ie (\n[doc-list-depth] > 1) \{\
3142 . nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
3143 . ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
3144 . as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
3145 . length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
3146 . nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
3149 . tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
3152 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
3154 . ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
3156 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3157 . substring doc-str-dBla 0 0
3158 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3159 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3160 . substring doc-str-dBla 1
3161 . doc-first-parameter \*[doc-str-dBla]
3162 . doc-get-width "\*[doc-str-dfp]
3163 . doc-get-arg-type "\*[doc-str-dfp]
3164 . ie (\n[doc-arg-type] == 1) \
3165 . nr doc-reg-dBla1 1
3167 . nr doc-reg-dBla1 0
3170 . nr doc-reg-dBla1 0
3171 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3173 . ie \n[doc-reg-dBla1] \{\
3174 . \" execute string in a box to get the width of the diversion
3175 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3176 . doc-save-global-vars
3183 . nop \*[doc-str-dBla]
3187 . doc-restore-global-vars
3188 . doc-get-width \h'\n[dl]u'
3189 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3192 . \" test whether argument is a valid numeric expression
3193 . nr doc-reg-dBla1 0
3194 . if \B
\a(\*[doc-str-dBla])
\a \{\
3195 . \" disable warnings related to scaling indicators (32)
3196 . nr doc-reg-dBla2 \n[.warn]
3197 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3199 . \" values without a scaling indicator are taken as strings;
3200 . \" we test whether the parameter string with and without the last
3201 . \" character yields identical numerical results (ignoring the
3202 . \" scaling indicator)
3203 . ds doc-str-dBla1 "\*[doc-str-dBla]
3204 . substring doc-str-dBla1 0 -2
3205 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3206 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3207 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3208 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3209 . nr doc-reg-dBla1 1
3212 . \" enable all warnings again
3213 . warn \n[doc-reg-dBla2]
3216 . ie \n[doc-reg-dBla1] \
3217 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3219 . doc-get-arg-width \n[doc-arg-ptr]
3220 . ie (\n[doc-width] == 2) \{\
3221 . \" if the width parameter is a macro, use the macro's
3222 . \" width as specified in doc-common
3223 . doc-get-arg-type \*[doc-str-dBla]
3224 . ie (\n[doc-arg-type] == 1) \
3225 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3227 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3230 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3233 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3236 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3237 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3239 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3240 . nr doc-reg-dBla1 0
3241 . if \B
\a(\*[doc-str-dBla])
\a \{\
3242 . nr doc-reg-dBla2 \n[.warn]
3243 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3245 . ds doc-str-dBla1 "\*[doc-str-dBla]
3246 . substring doc-str-dBla1 0 -2
3247 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3248 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3249 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3250 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3251 . nr doc-reg-dBla1 1
3254 . warn \n[doc-reg-dBla2]
3257 . ie \n[doc-reg-dBla1] \
3258 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3260 . doc-get-arg-width \n[doc-arg-ptr]
3261 . ie (\n[doc-width] <= 3) \{\
3262 . \" if the offset parameter is a macro, use the macro's
3263 . \" width as specified in doc-common
3264 . doc-get-arg-type \*[doc-str-dBla]
3265 . ie (\n[doc-arg-type] == 1) \
3266 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3268 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3271 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3277 . \" not a known keyword, so it specifies the width of the next column
3278 . \" (if it is a column list)
3279 . if !\n[doc-reg-dBla] \{\
3280 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3281 . nr doc-num-columns +1
3282 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3283 . substring doc-str-dBla 0 0
3284 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3285 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3286 . substring doc-str-dBla 1
3287 . doc-first-parameter \*[doc-str-dBla]
3288 . doc-get-width "\*[doc-str-dfp]
3289 . doc-get-arg-type "\*[doc-str-dfp]
3290 . ie (\n[doc-arg-type] == 1) \
3291 . nr doc-reg-dBla1 1
3293 . nr doc-reg-dBla1 0
3296 . nr doc-reg-dBla1 0
3297 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3299 . ie \n[doc-reg-dBla1] \{\
3300 . \" execute string in a box to get the width of the diversion
3301 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3302 . doc-save-global-vars
3309 . nop \*[doc-str-dBla]
3313 . doc-restore-global-vars
3314 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3317 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3320 . tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
3321 . tm1 " in .Bl macro (#\n[.c])
3324 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3329 .\" NS doc-save-global-vars macro
3330 .\" NS save all global variables
3332 .\" NS local variables:
3335 .de doc-save-global-vars
3336 . ds doc-macro-name-saved "\*[doc-macro-name]
3337 . nr doc-arg-limit-saved \n[doc-arg-limit]
3338 . nr doc-num-args-saved \n[doc-num-args]
3339 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3342 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3343 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3344 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3345 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3346 . nr doc-reg-dsgv +1
3349 . nr doc-curr-font-saved \n[doc-curr-font]
3350 . nr doc-curr-size-saved \n[doc-curr-size]
3351 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3352 . nr doc-in-library-section-saved \n[doc-in-library-section]
3353 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3354 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3355 . nr doc-have-decl-saved \n[doc-have-decl]
3356 . nr doc-have-var-saved \n[doc-have-var]
3357 . ds doc-command-name-saved "\*[doc-command-name]
3358 . ds doc-quote-left-saved "\*[doc-quote-left]
3359 . ds doc-quote-right-saved "\*[doc-quote-right]
3360 . nr doc-nesting-level-saved \n[doc-nesting-level]
3361 . nr doc-in-list-saved \n[doc-in-list]
3362 . ds doc-space-saved "\*[doc-space]
3363 . ds doc-saved-space-saved "\*[doc-saved-space]
3364 . nr doc-space-mode-saved \n[doc-space-mode]
3365 . nr doc-have-space-saved \n[doc-have-space]
3366 . nr doc-have-slot-saved \n[doc-have-slot]
3367 . nr doc-keep-type-saved \n[doc-keep-type]
3368 . nr doc-display-depth-saved \n[doc-display-depth]
3369 . nr doc-is-compact-saved \n[doc-is-compact]
3372 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3373 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3374 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3375 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3376 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3377 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3378 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3379 . nr doc-reg-dsgv +1
3382 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3385 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3386 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3387 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3388 . nr doc-reg-dsgv +1
3391 . nr doc-list-depth-saved \n[doc-list-depth]
3394 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3395 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3396 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3397 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3398 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3399 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3400 . ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
3401 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3402 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3403 . nr doc-reg-dsgv +1
3406 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3407 . nr doc-curr-type-saved \n[doc-curr-type]
3408 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3409 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3410 . nr doc-num-columns-saved \n[doc-num-columns]
3411 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3412 . nr doc-is-func-saved \n[doc-is-func]
3413 . nr doc-have-old-func-saved \n[doc-have-old-func]
3414 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3415 . ds doc-func-arg-saved "\*[doc-func-arg]
3416 . nr doc-num-func-args-saved \n[doc-num-func-args]
3417 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3418 . nr doc-have-func-saved \n[doc-have-func]
3419 . nr doc-is-reference-saved \n[doc-is-reference]
3420 . nr doc-reference-count-saved \n[doc-reference-count]
3421 . nr doc-author-count-saved \n[doc-author-count]
3424 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3425 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3426 . nr doc-reg-dsgv +1
3429 . nr doc-book-count-saved \n[doc-book-count]
3430 . ds doc-book-name-saved "\*[doc-book-name]
3431 . nr doc-city-count-saved \n[doc-city-count]
3432 . ds doc-city-name-saved "\*[doc-city-name]
3433 . nr doc-date-count-saved \n[doc-date-count]
3434 . ds doc-date-saved "\*[doc-date]
3435 . nr doc-publisher-count-saved \n[doc-publisher-count]
3436 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3437 . nr doc-journal-count-saved \n[doc-journal-count]
3438 . ds doc-journal-name-saved "\*[doc-journal-name]
3439 . nr doc-issue-count-saved \n[doc-issue-count]
3440 . ds doc-issue-name-saved "\*[doc-issue-name]
3441 . nr doc-optional-count-saved \n[doc-optional-count]
3442 . ds doc-optional-string-saved "\*[doc-optional-string]
3443 . nr doc-page-number-count-saved \n[doc-page-number-count]
3444 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3445 . nr doc-corporate-count-saved \n[doc-corporate-count]
3446 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3447 . nr doc-report-count-saved \n[doc-report-count]
3448 . ds doc-report-name-saved "\*[doc-report-name]
3449 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3450 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3451 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3452 . nr doc-url-count-saved \n[doc-url-count]
3453 . ds doc-url-name-saved "\*[doc-url-name]
3454 . nr doc-volume-count-saved \n[doc-volume-count]
3455 . ds doc-volume-name-saved "\*[doc-volume-name]
3456 . nr doc-have-author-saved \n[doc-have-author]
3458 . ds doc-document-title-saved "\*[doc-document-title]
3459 . ds doc-volume-saved "\*[doc-volume]
3460 . ds doc-section-saved "\*[doc-section]
3461 . ds doc-operating-system-saved "\*[doc-operating-system]
3462 . ds doc-date-string-saved "\*[doc-date-string]
3463 . nr doc-header-space-saved \n[doc-header-space]
3464 . nr doc-footer-space-saved \n[doc-footer-space]
3465 . nr doc-display-vertical-saved \n[doc-display-vertical]
3466 . ds doc-header-string-saved "\*[doc-header-string]
3467 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3468 . nr doc-in-files-section-saved \n[doc-in-files-section]
3469 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3473 .\" NS doc-restore-global-vars macro
3474 .\" NS restore all global variables
3476 .\" NS local variables:
3479 .de doc-restore-global-vars
3480 . ds doc-macro-name "\*[doc-macro-name-saved]
3481 . nr doc-arg-limit \n[doc-arg-limit-saved]
3482 . nr doc-num-args \n[doc-num-args-saved]
3483 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3486 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3487 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3488 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3489 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3490 . nr doc-reg-drgv +1
3493 . nr doc-curr-font \n[doc-curr-font-saved]
3494 . nr doc-curr-size \n[doc-curr-size-saved]
3495 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3496 . nr doc-in-library-section \n[doc-in-library-section-saved]
3497 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3498 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3499 . nr doc-have-decl \n[doc-have-decl-saved]
3500 . nr doc-have-var \n[doc-have-var-saved]
3501 . ds doc-command-name "\*[doc-command-name-saved]
3502 . ds doc-quote-left "\*[doc-quote-left-saved]
3503 . ds doc-quote-right "\*[doc-quote-right-saved]
3504 . nr doc-nesting-level \n[doc-nesting-level-saved]
3505 . nr doc-in-list \n[doc-in-list-saved]
3506 . ds doc-space "\*[doc-space-saved]
3507 . ds doc-saved-space "\*[doc-saved-space-saved]
3508 . nr doc-space-mode \n[doc-space-mode-saved]
3509 . nr doc-have-space \n[doc-have-space-saved]
3510 . nr doc-have-slot \n[doc-have-slot-saved]
3511 . nr doc-keep-type \n[doc-keep-type-saved]
3512 . nr doc-display-depth \n[doc-display-depth-saved]
3513 . nr doc-is-compact \n[doc-is-compact-saved]
3516 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3517 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3518 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3519 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3520 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3521 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3522 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3523 . nr doc-reg-drgv +1
3526 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3529 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3530 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3531 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3532 . nr doc-reg-drgv +1
3535 . nr doc-list-depth \n[doc-list-depth-saved]
3538 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3539 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3540 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3541 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3542 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3543 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3544 . ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
3545 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3546 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3547 . nr doc-reg-drgv +1
3550 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3551 . nr doc-curr-type \n[doc-curr-type-saved]
3552 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3553 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3554 . nr doc-num-columns \n[doc-num-columns-saved]
3555 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3556 . nr doc-is-func \n[doc-is-func-saved]
3557 . nr doc-have-old-func \n[doc-have-old-func-saved]
3558 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3559 . ds doc-func-arg "\*[doc-func-arg-saved]
3560 . nr doc-num-func-args \n[doc-num-func-args-saved]
3561 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3562 . nr doc-have-func \n[doc-have-func-saved]
3563 . nr doc-is-reference \n[doc-is-reference-saved]
3564 . nr doc-reference-count \n[doc-reference-count-saved]
3565 . nr doc-author-count \n[doc-author-count-saved]
3568 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3569 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3570 . nr doc-reg-drgv +1
3573 . nr doc-book-count \n[doc-book-count-saved]
3574 . ds doc-book-name "\*[doc-book-name-saved]
3575 . nr doc-city-count \n[doc-city-count-saved]
3576 . ds doc-city-name "\*[doc-city-name-saved]
3577 . nr doc-date-count \n[doc-date-count-saved]
3578 . ds doc-date "\*[doc-date-saved]
3579 . nr doc-publisher-count \n[doc-publisher-count-saved]
3580 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3581 . nr doc-journal-count \n[doc-journal-count-saved]
3582 . ds doc-journal-name "\*[doc-journal-name-saved]
3583 . nr doc-issue-count \n[doc-issue-count-saved]
3584 . ds doc-issue-name "\*[doc-issue-name-saved]
3585 . nr doc-optional-count \n[doc-optional-count-saved]
3586 . ds doc-optional-string "\*[doc-optional-string-saved]
3587 . nr doc-page-number-count \n[doc-page-number-count-saved]
3588 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3589 . nr doc-corporate-count \n[doc-corporate-count-saved]
3590 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3591 . nr doc-report-count \n[doc-report-count-saved]
3592 . ds doc-report-name "\*[doc-report-name-saved]
3593 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3594 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3595 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3596 . nr doc-url-count \n[doc-url-count-saved]
3597 . ds doc-url-name "\*[doc-url-name-saved]
3598 . nr doc-volume-count \n[doc-volume-count-saved]
3599 . ds doc-volume-name "\*[doc-volume-name-saved]
3600 . nr doc-have-author \n[doc-have-author-saved]
3602 . ds doc-document-title "\*[doc-document-title-saved]
3603 . ds doc-volume "\*[doc-volume-saved]
3604 . ds doc-section "\*[doc-section-saved]
3605 . ds doc-operating-system "\*[doc-operating-system-saved]
3606 . ds doc-date-string "\*[doc-date-string-saved]
3607 . nr doc-header-space \n[doc-header-space-saved]
3608 . nr doc-footer-space \n[doc-footer-space-saved]
3609 . nr doc-display-vertical \n[doc-display-vertical-saved]
3610 . ds doc-header-string "\*[doc-header-string-saved]
3611 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3612 . nr doc-in-files-section \n[doc-in-files-section-saved]
3613 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3617 .\" NS El user macro
3621 .\" NS doc-list-depth
3622 .\" NS doc-macro-name
3624 .\" NS local variables:
3627 .\" NS width register `El' set in doc-common
3631 . tm Usage: .El (does not take arguments) (#\n[.c])
3635 . ds doc-macro-name El
3636 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3638 . ie "\*[doc-str-El]"diag-list" \
3640 . el \{ .ie "\*[doc-str-El]"column-list" \
3641 . doc-end-column-list
3642 . el \{ .ie "\*[doc-str-El]"item-list" \
3644 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3646 . el \{ .ie "\*[doc-str-El]"inset-list" \
3656 .\" NS doc-saved-Pa-font global string
3657 .\" NS saved doc-Pa-font string for section FILES (no underline if
3660 .ds doc-saved-Pa-font
3663 .\" NS doc-curr-type global register
3664 .\" NS current argument type
3669 .\" NS doc-curr-arg global string
3670 .\" NS current argument
3675 .\" NS doc-item-boxXXX global box
3676 .\" NS item boxes associated list depth
3679 .\" NS doc-list-depth
3682 .\" NS It user macro
3689 .\" NS doc-curr-type
3691 .\" NS doc-macro-name
3693 .\" NS doc-saved-Pa-font
3695 .\" NS local variables:
3698 .\" NS doc-XXX-list-type
3700 .\" NS width register `It' set in doc-common
3702 .nr doc-bullet-list-type 1
3703 .nr doc-column-list-type 0
3704 .nr doc-dash-list-type 1
3705 .nr doc-diag-list-type 0
3706 .nr doc-enum-list-type 1
3707 .nr doc-hang-list-type 2
3708 .nr doc-inset-list-type 2
3709 .nr doc-item-list-type 1
3710 .nr doc-ohang-list-type 2
3711 .nr doc-tag-list-type 2
3714 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3716 . if "\*[doc-str-It]"" \
3717 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3719 . if \n[doc-nesting-level] \{\
3720 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3729 . ds doc-macro-name It
3731 . \" fill argument vector
3733 . while (\n[doc-reg-It] <= \n[.$]) \{\
3734 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3738 . nr doc-num-args \n[.$]
3742 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3744 . if \n[doc-reg-It] \{\
3746 . box doc-item-box\n[doc-list-depth]
3747 . ev doc-item-env\n[doc-list-depth]
3753 . ie (\n[doc-reg-It] == 1) \{\
3755 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3756 . tm1 " don't take arguments (#\n[.c])
3760 . if (\n[doc-reg-It] == 2) \{\
3761 . \" handle list types with arguments
3762 . doc-parse-arg-vector
3766 . nr doc-curr-type \n[doc-type1]
3767 . ds doc-curr-arg "\*[doc-arg1]
3769 . if \n[doc-in-files-section] \{\
3770 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3772 . ds doc-Pa-font "\*[doc-No-font]
3775 . ie (\n[doc-type1] == 1) \
3779 . doc-print-recursive
3782 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3783 . tm1 " require arguments (#\n[.c])
3787 . \" the previous call of `.doc-print-recursive' can contain calls to
3788 . \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
3789 . if !\n[doc-nesting-level] \
3790 . doc-\*[doc-str-It]
3794 .\" NS doc-inset-list macro
3795 .\" NS .It item of list-type inset
3801 . \" finish item box
3805 . unformat doc-item-box\n[doc-list-depth]
3807 . doc-set-vertical-and-indent 0
3811 . doc-item-box\n[doc-list-depth]
3813 . if \n[doc-in-files-section] \
3815 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3822 .\" NS doc-hang-list macro
3823 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3826 .\" NS doc-have-space
3829 .\" NS local variables:
3834 . \" finish item box
3838 . unformat doc-item-box\n[doc-list-depth]
3840 . doc-set-vertical-and-indent 1
3841 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3842 . ti -\n[doc-reg-dhl]u
3845 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3846 . doc-item-box\n[doc-list-depth]
3848 . chop doc-item-box\n[doc-list-depth]
3849 . nr doc-reg-dhl1 \n[.k]u
3850 . nop \*[doc-item-box\n[doc-list-depth]]\c
3851 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3852 . nr doc-have-space 1
3855 . if \n[doc-in-files-section] \
3857 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3864 .\" NS doc-ohang-list macro
3865 .\" NS .It item of list-type overhanging tag
3871 . \" finish item box
3875 . unformat doc-item-box\n[doc-list-depth]
3877 . doc-set-vertical-and-indent 0
3879 . doc-item-box\n[doc-list-depth]
3882 . if \n[doc-in-files-section] \
3884 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3891 .\" NS doc-item-list macro
3892 .\" NS .It item of list-type [empty tag]
3895 . \" finish (dummy) item box
3900 . doc-set-vertical-and-indent 0
3907 .\" NS doc-enum-list-count-stackXXX global register
3908 .\" NS stack of current enum count values
3911 .\" NS doc-list-depth
3913 .nr doc-enum-list-count-stack1 0
3916 .\" NS doc-enum-list macro
3917 .\" NS enumerated list
3920 .\" NS doc-enum-list-count-stackXXX
3925 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3927 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3929 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3930 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3935 .\" NS doc-bullet-list macro
3936 .\" NS bullet paragraph list
3943 . nop \)\*[doc-Sy-font]\[bu]\f[]
3948 .\" NS doc-dash-list macro
3949 .\" NS hyphen paragraph list (sub bullet list)
3956 . nop \)\*[doc-Sy-font]\-\f[]
3961 .\" NS doc-do-list macro
3962 .\" NS .It item of list-type enum/bullet/hyphen
3964 .als doc-do-list doc-hang-list
3967 .\" NS doc-diag-list-input-line-count global register
3968 .\" NS saved line number to be checked in next diag-list item
3970 .nr doc-diag-list-input-line-count 0
3973 .\" NS doc-diag-list macro
3974 .\" NS .It item of list-type diagnostic-message
3977 .\" NS doc-curr-font
3978 .\" NS doc-curr-size
3979 .\" NS doc-diag-list-input-line-count
3982 . nr doc-curr-font \n[.f]
3983 . nr doc-curr-size \n[.ps]
3985 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3986 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3993 . nr doc-diag-list-input-line-count \n[.c]
3996 . nop \*[doc-Sy-font]\c
3997 . if \n[doc-num-args] \
3998 . doc-remaining-args
3999 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
4001 . doc-print-and-reset
4005 .\" NS doc-tag-list macro
4006 .\" NS .It item of list-type `tag'
4009 .\" NS doc-have-space
4012 .\" NS local variables:
4018 . \" finish item box
4022 . unformat doc-item-box\n[doc-list-depth]
4024 . \" we use a box without `.nf' to compute the tag width (via `dl' register)
4031 . doc-item-box\n[doc-list-depth]
4036 . if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
4037 . if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4038 . in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4039 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
4043 . doc-set-vertical-and-indent 1
4044 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4045 . ti -\n[doc-reg-dtl]u
4048 . doc-item-box\n[doc-list-depth]
4049 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
4052 . \" format the tag separately to prevent stretching of spaces
4058 . nr doc-have-space 1
4061 . if \n[doc-in-files-section] \
4063 . ds doc-Pa-font "\*[doc-saved-Pa-font]
4070 .\" NS doc-get-tag-width macro
4071 .\" NS resolve unknown tag width (`tag' list-type only)
4074 .\" NS doc-list-indent-stackXXX
4075 .\" NS doc-tag-width-stackXXX
4079 .\" NS doc-curr-type
4081 .de doc-get-tag-width
4082 . ie (\n[doc-curr-type] == 1) \{\
4083 . ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
4084 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
4087 . ds doc-tag-width-stack\n[doc-list-depth] No
4088 . nr doc-list-indent-stack\n[doc-list-depth] \n[No]
4093 .\" NS doc-set-vertical-and-indent macro
4094 .\" NS set up vertical spacing (if not compact) and indentation (with
4095 .\" NS offset if argument is non-zero)
4098 .\" NS doc-list-have-indent-stackXXX
4100 .de doc-set-vertical-and-indent
4101 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4102 . sp \n[doc-display-vertical]u
4104 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4105 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4107 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4115 .\" NS doc-list-depth global register
4116 .\" NS list type stack counter
4118 .nr doc-list-depth 0
4121 .\" NS doc-num-columns global register
4122 .\" NS number of columns
4124 .nr doc-num-columns 0
4127 .\" NS doc-compact-list-stackXXX global register (bool)
4128 .\" NS stack of flags to indicate whether a particular list is compact
4131 .\" NS doc-list-depth
4133 .nr doc-compact-list-stack1 0
4136 .\" NS doc-tag-prefix-stackXXX global string
4137 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4140 .\" NS doc-list-depth
4142 .ds doc-tag-prefix-stack1
4145 .\" NS doc-tag-width-stackXXX global string
4146 .\" NS stack of strings indicating how to set up current element of
4147 .\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
4148 .\" NS directly; if it is a macro name, use the macro's width value;
4149 .\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
4152 .\" NS doc-list-depth
4154 .ds doc-tag-width-stack0
4155 .ds doc-tag-width-stack1
4158 .\" NS doc-list-offset-stackXXX global register
4159 .\" NS stack of list offsets
4162 .\" NS doc-list-depth
4164 .nr doc-list-offset-stack1 0
4167 .\" NS doc-end-list macro
4168 .\" NS list end function; resets indentation (and offset if argument is
4172 .\" NS doc-list-depth
4173 .\" NS doc-list-offset-stackXXX
4177 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4179 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4181 . if (\n[doc-list-depth] <= 0) \
4182 . tm mdoc warning: extraneous .El call (#\n[.c])
4184 . doc-decrement-list-stack
4185 . nr doc-list-depth -1
4189 .\" NS doc-increment-list-stack macro
4190 .\" NS set up next block for list
4193 .\" NS doc-compact-list-stackXXX
4194 .\" NS doc-list-have-indent-stackXXX
4195 .\" NS doc-list-indent-stackXXX
4196 .\" NS doc-list-offset-stackXXX
4197 .\" NS doc-list-type-stackXXX
4198 .\" NS doc-tag-prefix-stackXXX
4199 .\" NS doc-tag-width-stackXXX
4200 .\" NS doc-enum-list-count-stackXXX
4202 .\" NS local variables:
4205 .de doc-increment-list-stack
4206 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4207 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4208 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4209 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4210 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4211 . ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
4212 . ds doc-list-type-stack\n[doc-reg-dils]
4213 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4214 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4218 .\" NS doc-decrement-list-stack macro
4219 .\" NS decrement stack
4222 .\" NS doc-compact-list-stackXXX
4223 .\" NS doc-list-have-indent-stackXXX
4224 .\" NS doc-list-indent-stackXXX
4225 .\" NS doc-list-offset-stackXXX
4226 .\" NS doc-list-type-stackXXX
4227 .\" NS doc-tag-prefix-stackXXX
4228 .\" NS doc-tag-width-stackXXX
4229 .\" NS doc-enum-list-count-stackXXX
4231 .de doc-decrement-list-stack
4232 . ds doc-list-type-stack\n[doc-list-depth]
4233 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4234 . nr doc-list-indent-stack\n[doc-list-depth] 0
4235 . nr doc-list-offset-stack\n[doc-list-depth] 0
4236 . ds doc-tag-prefix-stack\n[doc-list-depth]
4237 . ds doc-tag-width-stack\n[doc-list-depth]
4238 . nr doc-compact-list-stack\n[doc-list-depth] 0
4239 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4243 .\" NS Xr user macro
4244 .\" NS cross reference (for man pages only)
4248 .\" NS doc-macro-name
4250 .\" NS local variables:
4253 .\" NS width register `Xr' set in doc-common
4256 . if !\n[doc-arg-limit] \{\
4258 . ds doc-macro-name Xr
4259 . doc-parse-args \$@
4265 . if !\n[doc-arg-limit] \
4269 . doc-print-prefixes
4270 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4271 . \" first argument must be a string
4272 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4273 . nr doc-curr-font \n[.f]
4274 . nr doc-curr-size \n[.ps]
4275 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4277 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4278 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4279 . \" modify second argument if it is a string and
4280 . \" remove space in between
4281 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4282 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4283 . ds doc-space\n[doc-arg-ptr]
4286 . doc-print-recursive
4296 .\" NS doc-Xr-usage macro
4299 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4304 .\" NS Sx user macro
4305 .\" NS cross section reference
4307 .\" NS width register `Sx' set in doc-common
4309 .als Sx doc-generic-macro
4310 .ds doc-Sx-usage section_header
4313 .\" NS doc-end-column-list macro
4314 .\" NS column-list end-list
4317 .\" NS doc-list-depth
4319 .de doc-end-column-list
4321 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4324 . doc-decrement-list-stack
4325 . nr doc-list-depth -1
4329 .\" NS doc-column-indent-width global register
4330 .\" NS holds the indent width for a column list
4332 .nr doc-column-indent-width 0
4335 .\" NS doc-set-column-tab macro
4336 .\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
4339 .\" NS doc-column-indent-width
4341 .\" NS local variables:
4344 .\" NS doc-str-dsct1
4346 .de doc-set-column-tab
4349 . nr doc-column-indent-width 0
4352 . ds doc-str-dsct1 " \"
4355 . ds doc-str-dsct1 " \"
4357 . \" XXX: this is packed abnormally close -- intercolumn width
4358 . \" should be configurable
4359 . ds doc-str-dsct1 " \"
4362 . while (\n[doc-reg-dsct] <= \$1) \{\
4363 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4364 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4365 . nr doc-reg-dsct +1
4368 . ta \*[doc-str-dsct]
4369 ' in +\n[doc-column-indent-width]u
4373 .\" NS doc-column-list macro
4378 .\" NS doc-list-indent-stackXXX
4381 .\" NS local variables:
4385 . if \n[doc-num-args] \
4386 . doc-parse-arg-vector
4389 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4390 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4394 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4395 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4396 . ds doc-space\n[doc-reg-dcl]
4399 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4400 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4403 . in +\n[doc-column-indent-width]u
4405 . ti -\n[doc-column-indent-width]u
4407 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4411 .\" NS Ta user macro
4412 .\" NS append tab (\t)
4417 .\" NS width register `Ta' set in doc-common
4420 . ie \n[doc-arg-limit] \{\
4423 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4424 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4429 . tm1 "Usage: Ta must follow column entry: e.g.
4430 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4435 .\" NS Dl user macro
4436 .\" NS display (one line) literal
4438 .\" NS this function uses the `Li' font
4442 .\" NS doc-curr-font
4443 .\" NS doc-curr-size
4444 .\" NS doc-macro-name
4446 .\" NS width register `Dl' set in doc-common
4450 . in +\n[doc-display-indent]u
4452 . ie \n[doc-arg-limit] \{\
4453 . tm Usage: .Dl not callable by other macros (#\n[.c])
4458 . ds doc-macro-name Dl
4459 . doc-parse-args \$@
4461 . nr doc-curr-font \n[.f]
4462 . nr doc-curr-size \n[.ps]
4463 . nop \*[doc-Li-font]\c
4464 . doc-print-recursive
4467 . tm Usage: .Dl argument ... (#\n[.c])
4470 . in -\n[doc-display-indent]u
4474 .\" NS D1 user macro
4475 .\" NS display (one line)
4479 .\" NS doc-macro-name
4481 .\" NS width register `D1' set in doc-common
4485 . in +\n[doc-display-indent]u
4487 . ie \n[doc-arg-limit] \{\
4488 . tm Usage: .D1 not callable by other macros (#\n[.c])
4493 . ds doc-macro-name D1
4494 . doc-parse-args \$@
4496 . doc-print-recursive
4499 . tm Usage: .D1 argument ... (#\n[.c])
4502 . in -\n[doc-display-indent]u
4506 .\" NS Vt user macro
4507 .\" NS variable type (for forcing old style variable declarations);
4508 .\" NS this is not done in the same manner as .Ot for fortrash --
4509 .\" NS clean up later
4512 .\" NS doc-curr-font
4513 .\" NS doc-curr-size
4514 .\" NS doc-have-decl
4516 .\" NS doc-macro-name
4518 .\" NS width register `Vt' set in doc-common
4521 . if !\n[doc-arg-limit] \{\
4523 . ds doc-macro-name Vt
4524 . doc-parse-args \$@
4527 . tm Usage: .Vt variable_type ... (#\n[.c])
4530 . if !\n[doc-arg-limit] \
4534 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4535 . tm Usage: .Vt variable_type ... (#\n[.c])
4540 . if \n[doc-in-synopsis-section] \{\
4541 . \" if a function declaration was the last thing given,
4542 . \" want vertical space
4543 . if \n[doc-have-decl] \{\
4545 . nr doc-have-decl 0
4548 . \" if a subroutine was the last thing given, want vertical space
4549 . if \n[doc-have-func] \{\
4550 . ie \n[doc-have-var] \
4559 . nr doc-curr-font \n[.f]
4560 . nr doc-curr-size \n[.ps]
4561 . nop \*[doc-Ft-font]\c
4562 . doc-print-recursive
4564 . if \n[doc-in-synopsis-section] \{\
4565 . ie \n[doc-have-old-func] \
4566 . nop \*[doc-soft-space]\c
4573 .\" NS doc-is-func global register (bool)
4574 .\" NS set if subroutine (in synopsis only) (fortran only)
4579 .\" NS Ft user macro
4580 .\" NS function type
4583 .\" NS doc-curr-font
4584 .\" NS doc-curr-size
4585 .\" NS doc-have-decl
4588 .\" NS doc-macro-name
4590 .\" NS width register `Ft' set in doc-common
4593 . if !\n[doc-arg-limit] \{\
4595 . ds doc-macro-name Ft
4596 . doc-parse-args \$@
4599 . tm Usage: .Ft function_type ... (#\n[.c])
4602 . if !\n[doc-arg-limit] \
4606 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4607 . tm Usage: .Ft function_type ... (#\n[.c])
4612 . if \n[doc-in-synopsis-section] \{\
4613 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4615 . nr doc-have-decl 0
4619 . if \n[doc-have-var] \{\
4627 . nr doc-curr-font \n[.f]
4628 . nr doc-curr-size \n[.ps]
4629 . nop \*[doc-Ft-font]\c
4630 . doc-print-recursive
4634 .\" NS doc-have-old-func global register (bool)
4635 .\" NS set if `Ot' has been called
4637 .nr doc-have-old-func 0
4640 .\" NS Ot user macro
4641 .\" NS old function type (fortran -- no newline)
4644 .\" NS doc-have-decl
4645 .\" NS doc-have-old-func
4649 .\" NS width register `Ot' set in doc-common
4652 . nr doc-have-old-func 1
4654 . if \n[doc-in-synopsis-section] \{\
4655 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4657 . nr doc-have-decl 0
4661 . if \n[doc-have-var] \{\
4670 . nop \*[doc-Ft-font]\$*\c
4675 .\" NS Fa user macro
4676 .\" NS function arguments
4680 .\" NS doc-curr-font
4681 .\" NS doc-curr-size
4682 .\" NS doc-macro-name
4684 .\" NS width register `Fa' set in doc-common
4687 . if !\n[doc-arg-limit] \{\
4689 . ds doc-macro-name Fa
4690 . doc-parse-args \$@
4693 . tm Usage: .Fa function_arguments ... (#\n[.c])
4696 . ie \n[doc-func-arg-count] \
4700 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4701 . nr doc-curr-font \n[.f]
4702 . nr doc-curr-size \n[.ps]
4703 . nop \*[doc-Fa-font]\c
4704 . doc-print-recursive
4706 . if \n[doc-in-synopsis-section] \
4707 . if \n[doc-have-func] \
4713 .\" NS doc-func-arg-count global register
4714 .\" NS how many function arguments have been processed so far
4716 .nr doc-func-arg-count 0
4719 .\" NS doc-func-arg global string
4720 .\" NS work buffer for function name strings
4725 .\" NS doc-num-func-args global register
4726 .\" NS number of function arguments
4728 .nr doc-num-func-args 0
4731 .\" NS doc-func-args-processed global register
4732 .\" NS function arguments processed so far
4734 .nr doc-func-args-processed 0
4737 .\" NS doc-do-func macro
4738 .\" NS internal .Fa for .Fc
4744 .\" NS doc-func-arg-count
4745 .\" NS doc-func-args-processed
4746 .\" NS doc-num-func-args
4749 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4757 . nr doc-num-func-args 0
4758 . nr doc-func-args-processed 0
4760 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4761 . if (\n[doc-num-func-args] > 1) \
4762 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4764 . if (\n[doc-func-arg-count] > 1) \{\
4765 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4766 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4767 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4769 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4770 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4773 . if (\n[doc-func-arg-count] == 1) \{\
4774 . nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4777 . nr doc-func-arg-count +1
4782 .\" NS doc-have-func global register (bool)
4783 .\" NS whether we have more than one function in synopsis
4788 .\" NS Fn user macro
4793 .\" NS doc-curr-font
4794 .\" NS doc-curr-size
4795 .\" NS doc-have-decl
4796 .\" NS doc-have-func
4798 .\" NS doc-indent-synopsis
4800 .\" NS doc-macro-name
4802 .\" NS width register `Fn' set in doc-common
4805 . if !\n[doc-arg-limit] \{\
4807 . ds doc-macro-name Fn
4808 . doc-parse-args \$@
4811 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4814 . if !\n[doc-arg-limit] \
4817 . if \n[doc-in-synopsis-section] \{\
4818 . \" if there is/has been more than one subroutine declaration
4819 . ie \n[doc-is-func] \{\
4822 . nr doc-have-decl 0
4826 . if \n[doc-have-func] \{\
4829 . nr doc-have-decl 0
4832 . if \n[doc-have-decl] \{\
4837 . if \n[doc-have-var] \{\
4839 . nr doc-have-decl 0
4842 . nr doc-have-func 1
4846 . if !\n[doc-indent-synopsis] \
4847 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
4848 . if !\n[doc-indent-synopsis-active] \
4849 . in +\n[doc-indent-synopsis]u
4850 . ti -\n[doc-indent-synopsis]u
4854 . doc-print-prefixes
4855 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4856 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4861 . nr doc-curr-font \n[.f]
4862 . nr doc-curr-size \n[.ps]
4863 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4864 . nop \f[]\s[0]\*[lp]\)\c
4867 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4868 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4869 . nop \*[doc-Fa-font]\c
4871 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4875 . if \n[doc-in-synopsis-section] \
4878 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4879 . \" output the space (if needed)
4881 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4884 . doc-print-recursive
4887 . doc-print-and-reset
4889 . if \n[doc-in-synopsis-section] \
4890 . if !\n[doc-indent-synopsis-active] \
4891 . in -\n[doc-indent-synopsis]u
4895 .\" NS doc-do-func-args macro
4896 .\" NS handle function arguments
4902 .\" NS doc-func-args-processed
4903 .\" NS doc-num-func-args
4905 .\" NS local variables:
4908 .de doc-do-func-args
4909 . if \n[doc-in-synopsis-section] \{\
4911 . nr doc-num-func-args 0
4912 . nr doc-func-args-processed 0
4914 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4915 . if (\n[doc-num-func-args] > 1) \
4916 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4919 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4922 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4923 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4924 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4925 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4926 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4927 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4929 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4935 .\" NS doc-saved-nesting-level global register
4937 .nr doc-saved-nesting-level 0
4940 .\" NS doc-in-func-enclosure global register (bool)
4942 .nr doc-in-func-enclosure 0
4945 .\" NS Fo user macro
4946 .\" NS function open
4950 .\" NS doc-curr-font
4951 .\" NS doc-curr-size
4952 .\" NS doc-func-arg-count
4953 .\" NS doc-have-decl
4954 .\" NS doc-have-func
4956 .\" NS doc-in-func-enclosure
4957 .\" NS doc-indent-synopsis
4959 .\" NS doc-macro-name
4960 .\" NS doc-saved-nesting-level
4962 .\" NS width register `Fo' set in doc-common
4965 . if (\n[doc-in-func-enclosure]) \{\
4966 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4970 . nr doc-saved-nesting-level \n[doc-nesting-level]
4971 . nr doc-in-func-enclosure 1
4973 . if !\n[doc-arg-limit] \{\
4975 . ds doc-macro-name Fo
4976 . doc-parse-args \$@
4979 . tm Usage: .Fo function_name (#\n[.c])
4982 . if \n[doc-in-synopsis-section] \{\
4983 . \" if there is/has been more than one subroutine declaration
4984 . ie \n[doc-is-func] \{\
4987 . nr doc-have-decl 0
4991 . if \n[doc-have-func] \{\
4994 . nr doc-have-decl 0
4997 . if \n[doc-have-decl] \{\
5002 . if \n[doc-have-var] \{\
5004 . nr doc-have-decl 0
5007 . nr doc-have-func 1
5011 . if !\n[doc-indent-synopsis] \
5012 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
5015 . \" start function box
5023 . doc-print-prefixes
5024 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5025 . nr doc-func-arg-count 1
5026 . nr doc-curr-font \n[.f]
5027 . nr doc-curr-size \n[.ps]
5029 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
5030 . nop \f[]\s[0]\*[lp]\)\c
5036 .\" NS Fc user macro
5037 .\" NS function close
5041 .\" NS doc-func-arg-count
5042 .\" NS doc-in-func-enclosure
5043 .\" NS doc-saved-nesting-level
5044 .\" NS doc-macro-name
5046 .\" NS width register `Fc' set in doc-common
5049 . if !\n[doc-in-func-enclosure] \{\
5050 . tm mdoc warning: Extraneous .Fc (#\n[.c])
5055 . ds doc-macro-name Fc
5056 . \" the first (dummy) argument is used to get the correct spacing
5057 . doc-parse-args \) \$@
5060 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
5061 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
5063 . nr doc-func-arg-count 0
5064 . nr doc-in-func-enclosure 0
5066 . ie \n[doc-in-synopsis-section] \
5071 . \" finish function box
5076 . unformat doc-func-box
5078 . if \n[doc-in-synopsis-section] \{\
5079 . if !\n[doc-indent-synopsis-active] \
5080 . in +\n[doc-indent-synopsis]u
5081 . ti -\n[doc-indent-synopsis]u
5085 . nop \*[doc-func-box]\c
5088 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5089 . nr doc-curr-font \n[.f]
5090 . nr doc-curr-size \n[.ps]
5091 . doc-print-recursive
5094 . doc-print-and-reset
5096 . if \n[doc-in-synopsis-section] \
5097 . if !\n[doc-indent-synopsis-active] \
5098 . in -\n[doc-indent-synopsis]u
5102 .\" NS doc-build-func-string macro
5103 .\" NS collect function arguments and set hard spaces in between
5107 .\" NS doc-func-args-processed
5108 .\" NS doc-num-func-args
5110 .de doc-build-func-string
5111 . if !\n[doc-num-func-args] \{\
5112 . nr doc-num-func-args \n[.$]
5113 . nr doc-func-args-processed 0
5117 . nr doc-func-args-processed +1
5118 . as doc-func-arg "\$1
5120 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5121 . as doc-func-arg "\*[doc-hard-space]
5124 . doc-build-func-string \$@
5129 .\" Very crude references: Stash all reference info into boxes, print out
5130 .\" reference on .Re macro and clean up. Ordering very limited, no fancy
5131 .\" citations, but can do articles, journals, and books -- need to add
5132 .\" several missing options (like city etc). Should be able to grab a refer
5133 .\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
5137 .\" NS doc-is-reference global register (bool)
5138 .\" NS set if in reference
5140 .nr doc-is-reference 0
5143 .\" NS doc-reference-count global register
5144 .\" NS reference element counter
5146 .nr doc-reference-count 0
5149 .\" NS Rs user macro
5150 .\" NS reference start
5153 .\" NS doc-is-reference
5154 .\" NS doc-reference-count
5156 .\" NS width register `Rs' set in doc-common
5160 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5162 . nr doc-is-reference 1
5163 . doc-reset-reference
5164 . if \n[doc-in-see-also-section] \
5166 . nr doc-reference-count 0
5171 .\" NS Re user macro
5172 .\" NS reference end
5175 .\" NS doc-is-reference
5177 .\" NS width register `Re' set in doc-common
5181 . tm Usage: .Re (does not take arguments) (#\n[.c])
5183 . if !\n[doc-is-reference] \{\
5184 . tm mdoc warning: Extraneous .Re (#\n[.c])
5187 . doc-print-reference
5188 . doc-reset-reference
5189 . nr doc-is-reference 0
5194 .\" NS doc-reset-reference macro
5195 .\" NS reference cleanup
5198 .\" NS doc-author-count
5199 .\" NS doc-author-nameXXX
5200 .\" NS doc-book-count
5201 .\" NS doc-book-name
5202 .\" NS doc-city-count
5203 .\" NS doc-city-name
5204 .\" NS doc-corporate-count
5205 .\" NS doc-corporate-name
5207 .\" NS doc-date-count
5208 .\" NS doc-issue-count
5209 .\" NS doc-issue-name
5210 .\" NS doc-journal-count
5211 .\" NS doc-journal-name
5212 .\" NS doc-optional-count
5213 .\" NS doc-optional-string
5214 .\" NS doc-page-number-count
5215 .\" NS doc-page-number-string
5216 .\" NS doc-publisher-count
5217 .\" NS doc-publisher-name
5218 .\" NS doc-reference-count
5219 .\" NS doc-reference-title-count
5220 .\" NS doc-reference-title-name
5221 .\" NS doc-reference-title-name-for-book
5222 .\" NS doc-report-count
5223 .\" NS doc-report-name
5224 .\" NS doc-url-count
5226 .\" NS doc-volume-count
5227 .\" NS doc-volume-name
5229 .de doc-reset-reference
5230 . while (\n[doc-author-count]) \{\
5231 . ds doc-author-name\n[doc-author-count]
5232 . nr doc-author-count -1
5234 . nr doc-journal-count 0
5235 . nr doc-issue-count 0
5236 . nr doc-optional-count 0
5237 . nr doc-corporate-count 0
5238 . nr doc-report-count 0
5239 . nr doc-reference-title-count 0
5240 . nr doc-url-count 0
5241 . nr doc-volume-count 0
5242 . nr doc-city-count 0
5243 . nr doc-date-count 0
5244 . nr doc-page-number-count 0
5245 . nr doc-book-count 0
5246 . nr doc-publisher-count 0
5247 . nr doc-reference-count 0
5249 . ds doc-journal-name
5251 . ds doc-optional-string
5252 . ds doc-corporate-name
5253 . ds doc-report-name
5254 . ds doc-reference-title-name
5255 . ds doc-reference-title-name-for-book
5257 . ds doc-volume-name
5260 . ds doc-page-number-string
5262 . ds doc-publisher-name
5266 .\" NS doc-finish-reference macro
5267 .\" NS auxiliary macro for doc-print-reference
5270 .\" NS doc-reference-count
5272 .de doc-finish-reference
5273 . nr doc-reference-count -\$1
5274 . ie \n[doc-reference-count] \
5281 .\" NS doc-print-reference macro
5282 .\" NS reference print
5285 .\" NS doc-reference-count
5287 .de doc-print-reference
5291 . if \n[doc-author-count] \{\
5292 . doc-print-reference-authors
5293 . nr doc-reference-count -\n[doc-author-count]
5296 . if \n[doc-reference-title-count] \{\
5297 . unformat doc-reference-title-name
5298 . chop doc-reference-title-name
5299 . unformat doc-reference-title-name-for-book
5300 . chop doc-reference-title-name-for-book
5301 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5302 . nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
5303 . doc-finish-reference \n[doc-reference-title-count]
5306 . nop \*[doc-reference-title-name]\c
5307 . doc-finish-reference \n[doc-reference-title-count]
5310 . if \n[doc-book-count] \{\
5311 . unformat doc-book-name
5312 . chop doc-book-name
5313 . nop \*[doc-book-name]\c
5314 . doc-finish-reference \n[doc-book-count]
5317 . if \n[doc-publisher-count] \{\
5318 . unformat doc-publisher-name
5319 . chop doc-publisher-name
5320 . nop \*[doc-publisher-name]\c
5321 . doc-finish-reference \n[doc-publisher-count]
5324 . if \n[doc-journal-count] \{\
5325 . unformat doc-journal-name
5326 . chop doc-journal-name
5327 . nop \*[doc-journal-name]\c
5328 . doc-finish-reference \n[doc-journal-count]
5331 . if \n[doc-report-count] \{\
5332 . unformat doc-report-name
5333 . chop doc-report-name
5334 . nop \*[doc-report-name]\c
5335 . doc-finish-reference \n[doc-report-count]
5338 . if \n[doc-issue-count] \{\
5339 . unformat doc-issue-name
5340 . chop doc-issue-name
5341 . nop \*[doc-issue-name]\c
5342 . doc-finish-reference \n[doc-issue-count]
5345 . if \n[doc-volume-count] \{\
5346 . unformat doc-volume-name
5347 . chop doc-volume-name
5348 . nop \*[doc-volume-name]\c
5349 . doc-finish-reference \n[doc-volume-count]
5352 . if \n[doc-url-count] \{\
5353 . unformat doc-url-name
5355 . nop \*[doc-url-name]\c
5356 . doc-finish-reference \n[doc-url-count]
5359 . if \n[doc-page-number-count] \{\
5360 . unformat doc-page-number-string
5361 . chop doc-page-number-string
5362 . nop \*[doc-page-number-string]\c
5363 . doc-finish-reference \n[doc-page-number-count]
5366 . if \n[doc-corporate-count] \{\
5367 . unformat doc-corporate-name
5368 . chop doc-corporate-name
5369 . nop \*[doc-corporate-name]\c
5370 . doc-finish-reference \n[doc-corporate-count]
5373 . if \n[doc-city-count] \{\
5374 . unformat doc-city-name
5375 . chop doc-city-name
5376 . nop \*[doc-city-name]\c
5377 . doc-finish-reference \n[doc-city-count]
5380 . if \n[doc-date-count] \{\
5383 . nop \*[doc-date]\c
5384 . doc-finish-reference \n[doc-date-count]
5387 . if \n[doc-optional-count] \{\
5388 . unformat doc-optional-string
5389 . chop doc-optional-string
5390 . nop \*[doc-optional-string]\c
5391 . doc-finish-reference \n[doc-optional-count]
5394 . if \n[doc-reference-count] \
5395 . tm mdoc warning: unresolved reference problem
5397 . hy \n[doc-hyphen-flags]
5401 .\" NS doc-print-reference-authors macro
5402 .\" NS print out reference authors
5404 .\" NS local variables:
5408 .ds doc-str-dpra "and
5410 .de doc-print-reference-authors
5413 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5414 . unformat doc-author-name\n[doc-reg-dpra]
5415 . chop doc-author-name\n[doc-reg-dpra]
5416 . ie (\n[doc-author-count] > 2) \
5417 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5419 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5420 . nr doc-reg-dpra +1
5423 . unformat doc-author-name\n[doc-reg-dpra]
5424 . chop doc-author-name\n[doc-reg-dpra]
5425 . if (\n[doc-author-count] > 1) \
5426 . nop \)\*[doc-str-dpra]
5427 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5431 .\" NS doc-author-count global register
5432 .\" NS counter of author references
5434 .nr doc-author-count 0
5437 .\" NS doc-author-nameXXX global box
5438 .\" NS array of author names
5441 .\" NS doc-author-count
5443 .ds doc-author-name0
5446 .\" NS %A user macro
5447 .\" NS reference author(s)
5451 .\" NS doc-author-count
5452 .\" NS doc-curr-font
5453 .\" NS doc-curr-size
5454 .\" NS doc-macro-name
5455 .\" NS doc-reference-count
5457 .\" NS local variables:
5460 .\" NS width register `%A' set in doc-common
5463 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5464 . tm Usage: .%A author_name ... (#\n[.c])
5468 . nr doc-author-count +1
5469 . nr doc-reference-count +1
5471 . ds doc-macro-name %A
5472 . doc-parse-args \$@
5475 . nr doc-curr-font \n[.f]
5476 . nr doc-curr-size \n[.ps]
5478 . \" save to reference box
5479 . box doc-author-name\n[doc-author-count]
5488 .\" NS doc-book-count global register
5489 .\" NS counter of book references
5491 .nr doc-book-count 0
5494 .\" NS doc-book-name global box
5495 .\" NS string of collected book references
5500 .\" NS %B user macro
5501 .\" NS [reference] book name
5505 .\" NS doc-book-count
5506 .\" NS doc-curr-font
5507 .\" NS doc-curr-size
5508 .\" NS doc-macro-name
5509 .\" NS doc-reference-count
5511 .\" NS local variables:
5514 .\" NS width register `%B' set in doc-common
5517 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5518 . tm Usage: .%B book_name ... (#\n[.c])
5522 . if \n[doc-is-reference] \{\
5523 . nr doc-book-count +1
5524 . nr doc-reference-count +1
5527 . ds doc-macro-name %B
5528 . doc-parse-args \$@
5531 . nr doc-curr-font \n[.f]
5532 . nr doc-curr-size \n[.ps]
5534 . ie \n[doc-is-reference] \{\
5535 . \" append to reference box
5536 . boxa doc-book-name
5541 . nop \*[doc-Em-font]\c
5545 . nop \*[doc-Em-font]\c
5546 . doc-print-recursive
5551 .\" NS doc-city-count global register
5552 .\" NS counter of city references
5554 .nr doc-city-count 0
5557 .\" NS doc-city-name global box
5558 .\" NS string of collected city references
5563 .\" NS %C user macro
5564 .\" NS [reference] city
5568 .\" NS doc-curr-font
5569 .\" NS doc-curr-size
5570 .\" NS doc-city-count
5571 .\" NS doc-macro-name
5572 .\" NS doc-reference-count
5574 .\" NS local variables:
5577 .\" NS width register `%C' set in doc-common
5580 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5581 . tm Usage: .%C city_name ... (#\n[.c])
5585 . nr doc-city-count +1
5586 . nr doc-reference-count +1
5588 . ds doc-macro-name %C
5589 . doc-parse-args \$@
5592 . nr doc-curr-font \n[.f]
5593 . nr doc-curr-size \n[.ps]
5595 . \" append to reference box
5596 . boxa doc-city-name
5605 .\" NS doc-date-count global register
5606 .\" NS counter of date references
5608 .nr doc-date-count 0
5611 .\" NS doc-date global box
5612 .\" NS string of collected date references
5617 .\" NS %D user macro
5618 .\" NS [reference] date
5622 .\" NS doc-curr-font
5623 .\" NS doc-curr-size
5624 .\" NS doc-date-count
5625 .\" NS doc-macro-name
5626 .\" NS doc-reference-count
5628 .\" NS local variables:
5631 .\" NS width register `%D' set in doc-common
5634 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5635 . tm Usage: .%D date ... (#\n[.c])
5639 . nr doc-date-count +1
5640 . nr doc-reference-count +1
5642 . ds doc-macro-name %D
5643 . doc-parse-args \$@
5646 . nr doc-curr-font \n[.f]
5647 . nr doc-curr-size \n[.ps]
5649 . \" append to reference box
5659 .\" NS doc-publisher-count global register
5660 .\" NS counter of publisher references
5662 .nr doc-publisher-count 0
5665 .\" NS doc-publisher-name global box
5666 .\" NS string of collected publisher references
5668 .ds doc-publisher-name
5671 .\" NS %I user macro
5672 .\" NS [reference] issuer/publisher name
5676 .\" NS doc-curr-font
5677 .\" NS doc-curr-size
5678 .\" NS doc-macro-name
5679 .\" NS doc-publisher-count
5680 .\" NS doc-reference-count
5682 .\" NS local variables:
5685 .\" NS width register `%I' set in doc-common
5688 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5689 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5693 . nr doc-publisher-count +1
5694 . nr doc-reference-count +1
5696 . ds doc-macro-name %I
5697 . doc-parse-args \$@
5700 . nr doc-curr-font \n[.f]
5701 . nr doc-curr-size \n[.ps]
5703 . \" append to reference box
5704 . boxa doc-publisher-name
5709 . nop \*[doc-Em-font]\c
5714 .\" NS doc-journal-count global register
5715 .\" NS counter of journal references
5717 .nr doc-journal-count 0
5720 .\" NS doc-journal-name global box
5721 .\" NS string of collected journal references
5723 .ds doc-journal-name
5726 .\" NS %J user macro
5727 .\" NS [reference] Journal Name
5731 .\" NS doc-curr-font
5732 .\" NS doc-curr-size
5733 .\" NS doc-journal-count
5734 .\" NS doc-macro-name
5735 .\" NS doc-reference-count
5737 .\" NS local variables:
5740 .\" NS width register `%J' set in doc-common
5743 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5744 . tm Usage: .%J journal_name ... (#\n[.c])
5748 . nr doc-journal-count +1
5749 . nr doc-reference-count +1
5751 . ds doc-macro-name %J
5752 . doc-parse-args \$@
5755 . nr doc-curr-font \n[.f]
5756 . nr doc-curr-size \n[.ps]
5758 . \" append to reference box
5759 . boxa doc-journal-name
5764 . nop \*[doc-Em-font]\c
5769 .\" NS doc-issue-count global register
5770 .\" NS counter of issue number references
5772 .nr doc-issue-count 0
5775 .\" NS doc-issue-name global box
5776 .\" NS string of collected issue number references
5781 .\" NS %N user macro
5782 .\" NS [reference] issue number
5786 .\" NS doc-curr-font
5787 .\" NS doc-curr-size
5788 .\" NS doc-issue-count
5789 .\" NS doc-macro-name
5790 .\" NS doc-reference-count
5792 .\" NS local variables:
5795 .\" NS width register `%N' set in doc-common
5798 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5799 . tm Usage: .%N issue_number ... (#\n[.c])
5803 . nr doc-issue-count +1
5804 . nr doc-reference-count +1
5806 . ds doc-macro-name %N
5807 . doc-parse-args \$@
5810 . nr doc-curr-font \n[.f]
5811 . nr doc-curr-size \n[.ps]
5813 . \" append to reference box
5814 . boxa doc-issue-name
5823 .\" NS doc-optional-count global register
5824 .\" NS counter of optional information references
5826 .nr doc-optional-count 0
5829 .\" NS doc-optional-string global box
5830 .\" NS string of collected optional information references
5832 .ds doc-optional-string
5835 .\" NS %O user macro
5836 .\" NS [reference] optional information
5840 .\" NS doc-curr-font
5841 .\" NS doc-curr-size
5842 .\" NS doc-macro-name
5843 .\" NS doc-optional-count
5844 .\" NS doc-reference-count
5846 .\" NS local variables:
5849 .\" NS width register `%O' set in doc-common
5852 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5853 . tm Usage: .%O optional_information ... (#\n[.c])
5857 . nr doc-optional-count +1
5858 . nr doc-reference-count +1
5860 . ds doc-macro-name %O
5861 . doc-parse-args \$@
5864 . nr doc-curr-font \n[.f]
5865 . nr doc-curr-size \n[.ps]
5867 . \" append to reference box
5868 . boxa doc-optional-string
5877 .\" NS doc-page-number-count global register
5878 .\" NS counter of page number references
5880 .nr doc-page-number-count 0
5883 .\" NS doc-page-number-string global box
5884 .\" NS string of collected page number references
5886 .ds doc-page-number-string
5889 .\" NS %P user macro
5890 .\" NS [reference] page numbers
5894 .\" NS doc-curr-font
5895 .\" NS doc-curr-size
5896 .\" NS doc-macro-name
5897 .\" NS doc-page-number-count
5898 .\" NS doc-reference-count
5900 .\" NS local variables:
5903 .\" NS width register `%P' set in doc-common
5906 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5907 . tm Usage: .%P page_number ... (#\n[.c])
5911 . nr doc-page-number-count +1
5912 . nr doc-reference-count +1
5914 . ds doc-macro-name %P
5915 . doc-parse-args \$@
5918 . nr doc-curr-font \n[.f]
5919 . nr doc-curr-size \n[.ps]
5921 . \" append to reference box
5922 . boxa doc-page-number-string
5931 .\" NS doc-corporate-count global register
5932 .\" NS counter of corporate references
5934 .nr doc-corporate-count 0
5937 .\" NS doc-corporate-name global box
5938 .\" NS string of collected corporate references
5940 .ds doc-corporate-name
5943 .\" NS %Q user macro
5944 .\" NS corporate or foreign author
5948 .\" NS doc-corporate-count
5949 .\" NS doc-curr-font
5950 .\" NS doc-curr-size
5951 .\" NS doc-macro-name
5952 .\" NS doc-reference-count
5954 .\" NS local variables:
5957 .\" NS width register `%Q' set in doc-common
5960 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5961 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5965 . nr doc-corporate-count +1
5966 . nr doc-reference-count +1
5968 . ds doc-macro-name %Q
5969 . doc-parse-args \$@
5972 . nr doc-curr-font \n[.f]
5973 . nr doc-curr-size \n[.ps]
5975 . \" append to reference box
5976 . boxa doc-corporate-name
5985 .\" NS doc-report-count global register
5986 .\" NS counter of report references
5988 .nr doc-report-count 0
5991 .\" NS doc-report-name global box
5992 .\" NS string of collected report references
5997 .\" NS %R user macro
5998 .\" NS [reference] report name
6002 .\" NS doc-curr-font
6003 .\" NS doc-curr-size
6004 .\" NS doc-macro-name
6005 .\" NS doc-reference-count
6006 .\" NS doc-report-count
6008 .\" NS local variables:
6011 .\" NS width register `%R' set in doc-common
6014 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6015 . tm Usage: .%R reference_report ... (#\n[.c])
6019 . nr doc-report-count +1
6020 . nr doc-reference-count +1
6022 . ds doc-macro-name %R
6023 . doc-parse-args \$@
6026 . nr doc-curr-font \n[.f]
6027 . nr doc-curr-size \n[.ps]
6029 . \" append to reference box
6030 . boxa doc-report-name
6039 .\" NS doc-reference-title-count global register
6040 .\" NS counter of reference title references
6042 .nr doc-reference-title-count 0
6045 .\" NS doc-reference-title-name global box
6046 .\" NS string of collected reference title references
6048 .ds doc-reference-title-name
6051 .\" NS doc-reference-title-name-for-book global box
6052 .\" NS string of collected reference title references
6053 .\" NS (saved with another font; this is a shortcoming of groff)
6055 .ds doc-reference-title-name-for-book
6058 .\" NS %T user macro
6059 .\" NS reference title
6063 .\" NS doc-curr-font
6064 .\" NS doc-curr-size
6065 .\" NS doc-macro-name
6066 .\" NS doc-reference-title-count
6067 .\" NS doc-report-count
6069 .\" NS local variables:
6072 .\" NS width register `%T' set in doc-common
6075 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6076 . tm Usage: .%T reference_title ... (#\n[.c])
6080 . if \n[doc-is-reference] \{\
6081 . nr doc-reference-title-count +1
6082 . nr doc-reference-count +1
6085 . ds doc-macro-name %T
6086 . doc-parse-args \$@
6089 . nr doc-curr-font \n[.f]
6090 . nr doc-curr-size \n[.ps]
6091 . ie \n[doc-is-reference] \{\
6092 . \" append to reference box
6093 . boxa doc-reference-title-name-for-book
6098 . nop \*[doc-No-font]\c
6101 . \" do it a second time with another font
6102 . ds doc-macro-name %T
6103 . doc-parse-args \$@
6106 . nr doc-curr-font \n[.f]
6107 . nr doc-curr-size \n[.ps]
6108 . boxa doc-reference-title-name
6113 . nop \*[doc-Em-font]\c
6117 . nop \*[doc-Em-font]\c
6118 . doc-print-recursive
6123 .\" NS doc-url-count global register
6124 .\" NS counter of hypertext references
6129 .\" NS doc-url-name global box
6130 .\" NS string of collected hypertext references
6135 .\" NS doc-volume-count global register
6136 .\" NS counter of reference title references
6138 .nr doc-volume-count 0
6141 .\" NS doc-volume-name global box
6142 .\" NS string of collected volume references
6147 .\" NS %U user macro
6148 .\" NS hypertext reference
6152 .\" NS doc-curr-font
6153 .\" NS doc-curr-size
6154 .\" NS doc-macro-name
6155 .\" NS doc-reference-count
6156 .\" NS doc-url-count
6158 .\" NS local variables:
6161 .\" NS width register `%U' set in doc-common
6164 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6165 . tm Usage: .%U URL ... (#\n[.c])
6169 . nr doc-url-count +1
6170 . nr doc-reference-count +1
6172 . ds doc-macro-name %U
6173 . doc-parse-args \$@
6176 . nr doc-curr-font \n[.f]
6177 . nr doc-curr-size \n[.ps]
6179 . \" append to reference box
6189 .\" NS %V user macro
6190 .\" NS reference volume
6194 .\" NS doc-curr-font
6195 .\" NS doc-curr-size
6196 .\" NS doc-macro-name
6197 .\" NS doc-reference-count
6198 .\" NS doc-volume-count
6200 .\" NS local variables:
6203 .\" NS width register `%V' set in doc-common
6206 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6207 . tm Usage: .%V volume ... (#\n[.c])
6211 . nr doc-volume-count +1
6212 . nr doc-reference-count +1
6214 . ds doc-macro-name %V
6215 . doc-parse-args \$@
6218 . nr doc-curr-font \n[.f]
6219 . nr doc-curr-size \n[.ps]
6221 . \" append to reference box
6222 . boxa doc-volume-name
6231 .\" NS doc-do-references macro
6232 .\" NS reference recursion routine
6237 .\" NS local variables:
6241 .de doc-do-references
6242 . if !\n[doc-is-reference] \
6243 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6245 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6247 . ie (\n[doc-reg-ddr1] == 1) \{\
6248 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6249 . doc-append-arg \c 3
6250 . \*[doc-arg\n[doc-arg-ptr]]
6253 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6255 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6256 . \" finish reference box
6264 . nr doc-reg-ddr \n[doc-arg-ptr]
6266 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6272 .\" NS Hf user macro
6273 .\" NS source include header files.
6276 .\" NS doc-curr-font
6277 .\" NS doc-curr-size
6279 .\" NS width register `Hf' set in doc-common
6282 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6294 . Usage: .Hf file (#\n[.c])
6298 .\" NS doc-have-author global register (bool)
6301 .nr doc-have-author 0
6304 .\" NS An user macro
6309 .\" NS doc-curr-font
6310 .\" NS doc-curr-size
6311 .\" NS doc-have-author
6312 .\" NS doc-macro-name
6314 .\" NS width register `An' set in doc-common
6317 . if !\n[doc-arg-limit] \{\
6319 . ie "\$1"-nosplit" \
6320 . nr doc-in-authors-section 0
6321 . el \{ .ie "\$1"-split" \
6322 . nr doc-in-authors-section 1
6324 . ds doc-macro-name An
6325 . doc-parse-args \$@
6328 . tm1 "Usage: .An {-nosplit | -split}
6329 . tm1 " .An author_name ... (#\n[.c])
6332 . if \n[doc-in-authors-section] \{\
6333 . ie \n[doc-have-author] \
6336 . nr doc-have-author 1
6339 . if \n[doc-arg-limit] \{\
6341 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6342 . nr doc-curr-font \n[.f]
6343 . nr doc-curr-size \n[.ps]
6344 . doc-print-recursive
6347 . tm Usage: .An author_name ... (#\n[.c])
6353 .\" NS Rv user macro
6354 .\" NS return values
6356 .\" NS width register `Rv' set in doc-common
6358 .\" NS local variables:
6359 .\" NS doc-str-Rv-std-prefix
6360 .\" NS doc-str-Rv-std-suffix
6361 .\" NS doc-str-Rv-stds-prefix
6362 .\" NS doc-str-Rv-stds-and
6363 .\" NS doc-str-Rv-stds-suffix
6364 .\" NS doc-str-Rv-std0
6366 .ds doc-str-Rv-std-prefix "The
6367 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6368 .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
6369 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6370 .as doc-str-Rv-std-suffix " is set to indicate the error.
6372 .ds doc-str-Rv-stds-prefix "The
6373 .ds doc-str-Rv-stds-and "and
6374 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6375 .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
6376 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6377 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6379 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6380 .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
6381 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6382 .as doc-str-Rv-std0 " is set to indicate the error.
6386 .\" XXX: what does this function without `-std'?
6388 . if \n[doc-arg-limit] \{\
6389 . tm Usage: .Rv not callable by other macros (#\n[.c])
6395 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6400 . nr doc-reg-Rv \*[doc-section]
6401 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6402 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6405 . ie (\n[.$] > 1) \{\
6406 . nop \)\*[doc-str-Rv-stds-prefix]
6408 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6410 . Fn \$\n[doc-reg-Rv] ,
6412 . Fn \$\n[doc-reg-Rv]
6415 . nop \)\*[doc-str-Rv-stds-and]
6417 . nop \)\*[doc-str-Rv-stds-suffix]
6419 . el \{ .ie (\n[.$] == 1) \{\
6420 . nop \)\*[doc-str-Rv-std-prefix]
6422 . nop \)\*[doc-str-Rv-std-suffix]
6425 . nop \)\*[doc-str-Rv-std0]
6430 .\" NS Ex user macro
6433 .\" NS width register `Ex' set in doc-common
6435 .\" NS local variables:
6436 .\" NS doc-str-Ex-std-prefix
6437 .\" NS doc-str-Ex-std-suffix
6439 .ds doc-str-Ex-std-prefix "The
6440 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6441 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6443 .ds doc-str-Ex-stds-prefix "The
6444 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6445 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6446 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6450 .\" XXX: what does this function without `-std'?
6452 . if \n[doc-arg-limit] \{\
6453 . tm Usage: .Ex not callable by other macros (#\n[.c])
6459 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6464 . nr doc-reg-Ex \*[doc-section]
6465 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6466 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6469 . ie (\n[.$] > 1) \{\
6470 . nop \)\*[doc-str-Ex-stds-prefix]
6472 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6474 . Nm \$\n[doc-reg-Ex] ,
6476 . Nm \$\n[doc-reg-Ex]
6479 . nop \)\*[doc-str-Ex-stds-and]
6481 . nop \)\*[doc-str-Ex-stds-suffix]
6484 . nop \)\*[doc-str-Ex-std-prefix]
6486 . nop \)\*[doc-str-Ex-std-suffix]
6491 .\" NS Mt user macro
6492 .\" NS mailto (for conversion to HTML)
6495 . \" XXX: error handling missing
6500 .\" NS Lk user macro
6501 .\" NS link (for conversion to HTML)
6503 .\" NS local variables:
6508 . ds doc-str-Lk Sy \$@
6510 . ie (\n[.$] > 1) \{\
6511 . doc-get-arg-type \$2
6512 . ie (\n[doc-arg-type] < 3) \{\
6514 . ds doc-str-Lk Sy "\$1"
6515 . doc-get-width "\$1"
6518 . as doc-str-Lk " \$@
6521 . doc-get-width "\$1"
6524 . doc-get-width "\$1"
6530 . ie (\n[doc-width] >= \n[doc-reg-Lk]) \
6537 .\" NS doc-defunct-macro macro
6538 .\" NS this is the skeleton for defunct macros
6541 .de doc-defunct-macro
6542 . tmc mdoc error: .\$0 defunct
6543 . if d doc-\$0-usage \
6544 . tmc , \*[doc-\$0-usage]
6551 .als Db doc-defunct-macro
6553 .als Ds doc-defunct-macro
6555 .als Or doc-defunct-macro
6556 .ds doc-Or-usage use `|'
6558 .als Sf doc-defunct-macro
6559 .ds doc-Sf-usage use .Pf or .Ns
6565 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6566 . tm1 " Should this have been `.Em ...'?
6571 .\" NS doc-empty-line macro
6572 .\" NS emit warning and print empty line
6575 . if !\n[doc-display-depth] \
6576 . tm mdoc warning: Empty input line #\n[.c]
6586 .\" For UTF-8, map some characters conservatively for the sake
6587 .\" of easy cut and paste.
6589 .if '\*[.T]'utf8' \{\
6599 .\" load local modifications