1 .\" Copyright (c) 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
13 .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
14 .\" 4. Neither the name of the University nor the names of its contributors
15 .\" may be used to endorse or promote products derived from this software
16 .\" without specific prior written permission.
18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" @(#)doc 8.1 (Berkeley) 06/08/93
32 .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
33 .\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
34 .\" `tmac.doc-common' would be too long); when using groff, the doc-* files
35 .\" are loaded using the `mso' request.
39 .\" Werner LEMBERG <wl@gnu.org> and
40 .\" Ruslan Ermilov <ru@freebsd.org>
42 .\" to make it more readable: using long names and many groff features,
43 .\" updating and extending documentation, etc.
49 . ab This version of mdoc can be run with GNU troff only!
58 .if (\n[.x]\n[.y] < 118) \
59 . ab You need GNU troff version 1.18 or higher to run this version of mdoc!
62 .\" Load start-up files
64 . mso mdoc/doc-ditroff
75 .\" NS doc-macro-name global string
76 .\" NS name of calling request (set in each user-requestable macro)
79 .als doc-arg0 doc-macro-name
82 .\" NS doc-arg-limit global register
83 .\" NS total number of arguments
88 .\" NS doc-num-args global register
89 .\" NS number of arguments to handle (must be set to \n[.$] prior to
90 .\" NS `doc-parse-arg-vector' request)
95 .\" NS doc-arg-ptr global register
96 .\" NS argument pointer
101 .\" NS doc-argXXX global string
102 .\" NS argument vector
110 .\" NS doc-typeXXX global register
111 .\" NS argument type vector (macro=1, string=2, punctuation suffix=3,
112 .\" NS punctuation prefix=4)
120 .\" NS doc-spaceXXX global string
129 .\" NS doc-parse-args macro
130 .\" NS parse arguments (recursively) (`.doc-parse-args arg ...')
139 .\" NS doc-have-space
141 .\" NS local variables:
147 . if !\n[doc-arg-limit] \
150 . nr doc-have-space 0
155 . nr doc-arg-limit +1
157 . \" handle `|' and `...' specially
159 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
160 . el \{ .ie "\$1"..." \
161 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
163 . ds doc-arg\n[doc-arg-limit] "\$1
166 . \" get argument type and set spacing
167 . doc-get-arg-type* \n[doc-arg-limit]
168 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
169 . doc-set-spacing-\n[doc-arg-type]
171 . \" check whether we have processed the last parameter
183 .\" NS doc-parse-arg-vector macro
184 .\" NS parse argument vector (recursive)
186 .\" NS cf. comments in doc-parse-args
196 .\" NS local variables:
201 .de doc-parse-arg-vector
202 . if !\n[doc-arg-limit] \
205 . nr doc-arg-limit +1
207 . ie "\*[doc-arg\n[doc-arg-limit]]"|" \
208 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
209 . el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
210 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
213 . doc-get-arg-type* \n[doc-arg-limit]
214 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
215 . doc-set-spacing-\n[doc-arg-type]
217 . ie (\n[doc-num-args] == 1) \{\
223 . doc-parse-arg-vector
230 .\" NS doc-parse-space-vector macro
231 .\" NS parse space vector (recursive)
238 .de doc-parse-space-vector
239 . nr doc-arg-limit +1
241 . doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
243 . ie (\n[doc-num-args] == 1) \
247 . doc-parse-space-vector
252 .\" NS doc-remaining-args macro
253 .\" NS output remaining arguments as-is, separated by spaces (until
254 .\" NS `doc-num-args' is exhausted)
260 .de doc-remaining-args
262 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
264 . ie (\n[doc-num-args] == 1) \{\
269 . nop \)\*[doc-space]\c
276 .\" NS doc-append-arg macro
277 .\" NS append one argument to argument vector:
278 .\" NS `.doc-append-arg [arg] [type]'
286 . nr doc-arg-limit +1
287 . ds doc-arg\n[doc-arg-limit] "\$1
288 . nr doc-type\n[doc-arg-limit] \$2
289 . doc-set-spacing-\$2
293 .\" NS doc-print-and-reset macro
294 .\" NS finish input line and clean up argument vectors
296 .de doc-print-and-reset
297 . if \n[doc-space-mode] \
303 .\" NS doc-reset-args macro
304 .\" NS reset argument counters
316 . hy \n[doc-hyphen-flags]
322 .\" NS doc-curr-font global register
323 .\" NS saved current font
325 .nr doc-curr-font \n[.f]
328 .\" NS doc-curr-size global register
329 .\" NS saved current font size
331 .nr doc-curr-size \n[.ps]
337 .\" NS handle flags (appends `-' and prints flags): `.Fl [arg ...]'
343 .\" NS doc-macro-name
345 .\" NS local variables:
346 .\" NS doc-reg-Fl (for communication with doc-flag-recursion)
348 .\" NS width register `Fl' set in doc-common
351 . nr doc-curr-font \n[.f]
352 . nr doc-curr-size \n[.ps]
353 . nop \*[doc-Fl-font]\c
355 . if !\n[doc-arg-limit] \{\
356 . ds doc-macro-name Fl
361 . nop \|\-\|\f[]\s[0]
364 . if !\n[doc-arg-limit] \
368 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
370 . nop \|\-\f[]\s[0]\c
371 . doc-print-and-reset
374 . ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
375 . nop \|\-\f[]\s[0]\c
376 . \*[doc-arg\n[doc-arg-ptr]]
379 . if (\n[doc-type\n[doc-arg-ptr]] == 3) \
388 .\" NS doc-flag-recursion macro
389 .\" NS `Fl' flag recursion routine (special handling)
394 .\" NS local variables:
399 .de doc-flag-recursion
400 . nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
401 . ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
403 . ie (\n[doc-reg-dfr1] == 1) \{\
408 . nr doc-reg-dfr \n[doc-arg-ptr]
410 . ie (\n[doc-reg-dfr1] == 2) \{\
411 . \" handle vertical bar -- doc-reg-Fl is set for the first call of
412 . \" doc-flag-recursion only; we need this to make `.Fl | ...' work
414 . ie "\*[doc-str-dfr]"\*[Ba]" \{\
415 . if \n[doc-reg-Fl] \
416 . nop \|\-\*[doc-space]\c
420 . ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
421 . if \n[doc-reg-Fl] \
422 . nop \|\-\*[doc-space]\c
426 . \" two consecutive hyphen characters?
427 . ie "\*[doc-str-dfr]"-" \
430 . nop \|\%\-\*[doc-str-dfr]\&\c
433 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
434 . nop \)\*[doc-str-dfr]\f[]\s[0]\c
437 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
439 . if (\n[doc-reg-dfr1] == 4) \
441 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
442 . doc-print-and-reset
446 . ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
447 . ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
450 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
453 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
457 . doc-flag-recursion \$@
462 .\" NS doc-print-recursive macro
463 .\" NS general name recursion routine (print remaining arguments)
468 .\" NS local variables:
473 .de doc-print-recursive
474 . nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
475 . ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
477 . ie (\n[doc-reg-dpr1] == 1) \{\
478 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
482 . nr doc-reg-dpr \n[doc-arg-ptr]
484 . \" the `\%' prevents hyphenation on a dash (`-')
485 . ie (\n[doc-reg-dpr1] == 2) \
486 . nop \%\*[doc-str-dpr]\&\c
488 . \" punctuation character
489 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
490 . nop \)\*[doc-str-dpr]\f[]\s[0]\c
494 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
496 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
497 . doc-print-and-reset
500 . nop \)\*[doc-space\n[doc-reg-dpr]]\c
501 . doc-print-recursive
506 .\" NS doc-print-prefixes macro
507 .\" NS print leading prefixes
512 .de doc-print-prefixes
513 . while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
514 . if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
516 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
517 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
523 .\" NS doc-generic-macro macro
524 .\" NS this is the skeleton for most simple macros
530 .\" NS doc-macro-name
532 .de doc-generic-macro
533 . if !\n[doc-arg-limit] \{\
535 . ds doc-macro-name \$0
539 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
542 . if !\n[doc-arg-limit] \
546 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
547 . if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
548 . tmc mdoc warning: Using a macro as first argument
549 . tm1 " cancels effect of .\$0 (#\n[.c])
551 . \" the right action here would be to reset the argument counters
552 . \" and bail out -- unfortunately, a small number of manual pages
553 . \" (less than 2% for FreeBSD which has been used for testing)
554 . \" relied on the old behaviour (silently ignore this error),
555 . \" so it is commented out
560 . nr doc-curr-font \n[.f]
561 . nr doc-curr-size \n[.ps]
562 . nop \*[doc-\$0-font]\c
563 . doc-print-recursive
567 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
574 .\" NS command line `argument' macro: `.Ar [args ...]'
580 .\" NS doc-macro-name
582 .\" NS local variable:
583 .\" NS doc-str-Ar-default
585 .\" NS width register `Ar' set in doc-common
587 .ds doc-str-Ar-default "file\ .\|.\|.
590 . nr doc-curr-font \n[.f]
591 . nr doc-curr-size \n[.ps]
592 . nop \*[doc-Ar-font]\c
594 . if !\n[doc-arg-limit] \{\
595 . ds doc-macro-name Ar
600 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
603 . if !\n[doc-arg-limit] \
608 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
609 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
610 . doc-print-and-reset
613 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
614 . \" replace previous argument (Ar) with default value
616 . ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
617 . nr doc-type\n[doc-arg-ptr] 2
618 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
620 . \" recompute space vector for remaining arguments
621 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
622 . nr doc-arg-limit \n[doc-arg-ptr]
623 . doc-parse-space-vector
625 . doc-print-recursive
633 .\" NS width register `Ad' set in doc-common
635 .als Ad doc-generic-macro
636 .ds doc-Ad-usage address
639 .\" NS doc-indent-synopsis global register
640 .\" NS indentation in synopsis
642 .nr doc-indent-synopsis 0
645 .\" NS doc-indent-synopsis-active global register (bool)
646 .\" NS indentation in synopsis active
648 .nr doc-indent-synopsis-active 0
652 .\" NS config declaration (for section 4 SYNOPSIS)
654 .\" NS this function causes a break; it uses the `Nm' font
660 .\" NS doc-indent-synopsis
661 .\" NS doc-macro-name
663 .\" NS width register `Cd' set in doc-common
666 . if !\n[doc-arg-limit] \{\
668 . ds doc-macro-name Cd
672 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
675 . if !\n[doc-arg-limit] \
679 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
680 . nr doc-curr-font \n[.f]
681 . nr doc-curr-size \n[.ps]
683 . ie \n[doc-in-synopsis-section] \{\
684 . ie "\*[doc-macro-name]"Cd" \{\
686 . if !\n[doc-indent-synopsis] \
687 . nr doc-indent-synopsis \n[doc-display-indent]u
688 . if !\n[doc-indent-synopsis-active] \
689 . in +\n[doc-indent-synopsis]u
690 . ti -\n[doc-indent-synopsis]u
691 . nop \*[doc-Nm-font]\c
692 . doc-print-recursive
693 . if !\n[doc-indent-synopsis-active] \
694 . in -\n[doc-indent-synopsis]u
697 . nop \*[doc-Nm-font]\c
698 . doc-print-recursive
701 . nop \*[doc-Nm-font]\c
702 . doc-print-recursive
705 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
712 .\" NS interactive command modifier (flag)
714 .\" NS width register `Cm' set in doc-common
716 .als Cm doc-generic-macro
717 .ds doc-Cm-usage interactive_command_modifier
721 .\" NS defined variable
723 .\" NS this function uses the `Er' font
725 .\" NS width register `Dv' set in doc-common
727 .als Dv doc-generic-macro
728 .ds doc-Dv-usage defined_variable
729 .als doc-Dv-font doc-Er-font
735 .\" NS width register `Em' set in doc-common
737 .als Em doc-generic-macro
738 .ds doc-Em-usage text
744 .\" NS width register `Er' set in doc-common
746 .als Er doc-generic-macro
747 .ds doc-Er-usage text
751 .\" NS environment variable
753 .\" NS width register `Ev' set in doc-common
755 .als Ev doc-generic-macro
756 .ds doc-Ev-usage text
759 .\" NS doc-have-decl global register (bool)
760 .\" NS subroutine test (in synopsis only)
765 .\" NS doc-have-var global register (bool)
766 .\" NS whether last type is a variable type
771 .\" NS doc-do-func-decl macro
772 .\" NS do something special while in SYNOPSIS
781 . if \n[doc-in-synopsis-section] \{\
782 . \" if a variable type was the last thing given, want vertical space
783 . if \n[doc-have-var] \{\
787 . \" if a subroutine was the last thing given, want vertical space
788 . if \n[doc-have-func] \{\
789 . ie \n[doc-have-decl] \
797 . nr doc-curr-font \n[.f]
798 . nr doc-curr-size \n[.ps]
803 .\" NS function declaration -- not callable
805 .\" NS this function causes a break
807 .\" NS width register `Fd' set in doc-common
810 . ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
812 . nop \*[doc-Fd-font]\$*
814 . ft \n[doc-curr-font]
815 . ps \n[doc-curr-size]u
818 . tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
825 .\" NS #include statement in SYNOPSIS
826 .\" NS <header.h> if not in SYNOPSIS
828 .\" NS this function causes a break; it uses the `Fd' font
834 .\" NS doc-indent-synopsis
835 .\" NS doc-macro-name
837 .\" NS width register `In' set in doc-common
840 . if !\n[doc-arg-limit] \{\
842 . ds doc-macro-name In
846 . tm Usage: .In include_file ... (#\n[.c])
849 . if !\n[doc-arg-limit] \
854 . ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
855 . nr doc-curr-font \n[.f]
856 . nr doc-curr-size \n[.ps]
858 . ie \n[doc-in-synopsis-section] \{\
859 . ie "\*[doc-macro-name]"In" \{\
861 . nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
862 . ft \n[doc-curr-font]
863 . ps \n[doc-curr-size]u
866 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
867 . doc-print-recursive
872 . ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
873 . as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
874 . 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 . tm Usage: .In include_file ... (#\n[.c])
889 .\" NS function return value
891 .\" NS this function uses the `Ar' font
893 .\" NS width register `Fr' set in doc-common
895 .als Fr doc-generic-macro
896 .ds doc-Fr-usage function_return_value
897 .als doc-Fr-font doc-Ar-font
901 .\" NS interactive command
903 .\" NS width register `Ic' set in doc-common
905 .als Ic doc-generic-macro
906 .ds doc-Ic-usage interactive_command
912 .\" NS width register `Li' set in doc-common
914 .als Li doc-generic-macro
915 .ds doc-Li-usage argument
921 .\" NS this function uses the `Sy' font
923 .\" NS width register `Ms' set in doc-common
925 .als Ms doc-generic-macro
926 .ds doc-Ms-usage math_symbol
927 .als doc-Ms-font doc-Sy-font
930 .\" NS doc-command-name global string
931 .\" NS save first invocation of .Nm
937 .\" NS name of command or page topic
941 .\" NS doc-command-name
944 .\" NS doc-indent-synopsis
945 .\" NS doc-indent-synopsis-active
946 .\" NS doc-macro-name
948 .\" NS width register `Nm' set in doc-common
951 . if !\n[doc-arg-limit] \{\
952 . ds doc-macro-name Nm
956 . ie "\*[doc-command-name]"" \
957 . tm Usage: .Nm name ... (#\n[.c])
959 . doc-parse-args \*[doc-command-name]
962 . if !\n[doc-arg-limit] \
967 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
969 . ie "\*[doc-command-name]"" \{\
970 . tm Usage: .Nm name ... (#\n[.c])
974 . nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
975 . doc-print-and-reset
978 . nr doc-curr-font \n[.f]
979 . nr doc-curr-size \n[.ps]
981 . ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
982 . ie "\*[doc-command-name]"" \
983 . tm Usage: .Nm name ... (#\n[.c])
985 . \" replace previous argument (Nm) with default value
987 . ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
988 . nr doc-type\n[doc-arg-ptr] 2
989 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
991 . \" recompute space vector for remaining arguments
992 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
993 . nr doc-arg-limit \n[doc-arg-ptr]
994 . doc-parse-space-vector
997 . \" handle `.Nm ...' in SYNOPSIS
998 . if \n[doc-in-synopsis-section] \{\
999 . if "\*[doc-macro-name]"Nm" \{\
1001 . if !\n[doc-indent-synopsis] \{\
1002 . doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
1003 . nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
1005 . if !\n[doc-indent-synopsis-active] \{\
1006 . in +\n[doc-indent-synopsis]u
1007 . nr doc-indent-synopsis-active 1
1009 . ti -\n[doc-indent-synopsis]u
1011 . if "\*[doc-command-name]"" \
1012 . ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
1014 . nop \*[doc-Nm-font]\c
1016 . doc-print-recursive
1021 .\" NS Pa user macro
1022 .\" NS pathname: `.Pa [arg ...]'
1026 .\" NS doc-curr-font
1027 .\" NS doc-curr-size
1028 .\" NS doc-macro-name
1030 .\" NS width register `Pa' set in doc-common
1033 . if !\n[doc-arg-limit] \{\
1034 . ds doc-macro-name Pa
1035 . doc-parse-args \$@
1039 . nop \*[doc-Pa-font]~\f[]\s[0]
1042 . if !\n[doc-arg-limit] \
1046 . doc-print-prefixes
1047 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1048 . nr doc-curr-font \n[.f]
1049 . nr doc-curr-size \n[.ps]
1050 . nop \*[doc-Pa-font]\c
1051 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
1052 . \" replace previous argument (Pa) with default value
1054 . ds doc-arg\n[doc-arg-ptr] ~
1055 . nr doc-type\n[doc-arg-ptr] 2
1056 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
1058 . \" recompute space vector for remaining arguments
1059 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
1060 . nr doc-arg-limit \n[doc-arg-ptr]
1061 . doc-parse-space-vector
1063 . doc-print-recursive
1066 . nop \*[doc-Pa-font]~\f[]\s[0]\c
1067 . doc-print-and-reset
1072 .\" NS Sy user macro
1075 .\" NS width register `Sy' set in doc-common
1077 .als Sy doc-generic-macro
1078 .ds doc-Sy-usage symbolic_text
1081 .\" NS Me user macro
1084 .\" NS width register `Me' set in doc-common
1086 .als Me doc-generic-macro
1087 .ds doc-Me-usage menu_entry
1090 .\" NS Tn user macro
1095 .\" NS doc-curr-font
1096 .\" NS doc-curr-size
1097 .\" NS doc-macro-name
1099 .\" NS width register `Tn' set in doc-common
1102 . if !\n[doc-arg-limit] \{\
1104 . ds doc-macro-name Tn
1105 . doc-parse-args \$@
1108 . tm Usage: .Tn trade_name ... (#\n[.c])
1111 . if !\n[doc-arg-limit] \
1115 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1116 . nr doc-curr-font \n[.f]
1117 . nr doc-curr-size \n[.ps]
1118 . nop \)\*[doc-Tn-font-size]\c
1119 . ie !\n[doc-is-reference] \{\
1120 . nop \)\*[doc-Tn-font-shape]\c
1121 . doc-print-recursive
1127 . tm Usage: .Tn trade_name ... (#\n[.c])
1133 .\" NS Va user macro
1134 .\" NS variable name
1136 .\" NS width register `Va' set in doc-common
1138 .als Va doc-generic-macro
1139 .ds doc-Va-usage variable_name
1142 .\" NS No user macro
1143 .\" NS normal text macro (default text style if mess up)
1145 .\" NS width register `No' set in doc-common
1147 .als No doc-generic-macro
1148 .ds doc-No-usage normal_text
1151 .\" NS doc-quote-left global string
1152 .\" NS left quotation character for `doc-enclose-string' and
1153 .\" NS `doc-enclose-open'
1158 .\" NS doc-quote-right global string
1159 .\" NS right quotation character for `doc-enclose-string' and
1160 .\" NS `doc-enclose-close'
1165 .\" NS Op user macro
1166 .\" NS option expression (i.e., enclose string in square brackets)
1169 .\" NS doc-macro-name
1170 .\" NS doc-quote-left
1171 .\" NS doc-quote-right
1173 .\" NS width register `Op' set in doc-common
1176 . if !\n[doc-arg-limit] \
1177 . ds doc-macro-name Op
1179 . ds doc-quote-left "\*[doc-left-bracket]
1180 . ds doc-quote-right "\*[doc-right-bracket]
1182 . doc-enclose-string \$@
1186 .\" NS Aq user macro
1187 .\" NS enclose string in angle brackets
1190 .\" NS doc-macro-name
1191 .\" NS doc-quote-left
1192 .\" NS doc-quote-right
1194 .\" NS width register `Aq' set in doc-common
1197 . if !\n[doc-arg-limit] \
1198 . ds doc-macro-name Aq
1200 . ie "\*[doc-macro-name]"An" \{\
1201 . ds doc-quote-left <
1202 . ds doc-quote-right >
1205 . ds doc-quote-left \[la]
1206 . ds doc-quote-right \[ra]
1209 . doc-enclose-string \$@
1213 .\" NS Bq user macro
1214 .\" NS enclose string in square brackets
1217 .\" NS doc-macro-name
1218 .\" NS doc-quote-left
1219 .\" NS doc-quote-right
1221 .\" NS width register `Bq' set in doc-common
1224 . if !\n[doc-arg-limit] \
1225 . ds doc-macro-name Bq
1227 . ds doc-quote-left "\*[doc-left-bracket]
1228 . ds doc-quote-right "\*[doc-right-bracket]
1230 . doc-enclose-string \$@
1234 .\" NS Brq user macro
1235 .\" NS enclose string in braces
1238 .\" NS doc-macro-name
1239 .\" NS doc-quote-left
1240 .\" NS doc-quote-right
1242 .\" NS width register `Brq' set in doc-common
1245 . if !\n[doc-arg-limit] \
1246 . ds doc-macro-name Brq
1248 . ds doc-quote-left {
1249 . ds doc-quote-right }
1251 . doc-enclose-string \$@
1255 .\" NS Dq user macro
1256 .\" NS enclose string in double quotes
1259 .\" NS doc-macro-name
1260 .\" NS doc-quote-left
1261 .\" NS doc-quote-right
1263 .\" NS width register `Dq' set in doc-common
1266 . if !\n[doc-arg-limit] \
1267 . ds doc-macro-name Dq
1269 . ds doc-quote-left "\*[Lq]
1270 . ds doc-quote-right "\*[Rq]
1272 . doc-enclose-string \$@
1276 .\" NS Eq user macro
1277 .\" NS enclose string in user-defined quotes (args 1 and 2)
1280 .\" NS doc-macro-name
1281 .\" NS doc-quote-left
1282 .\" NS doc-quote-right
1284 .\" NS width register `Eq' set in doc-common
1287 . if !\n[doc-arg-limit] \
1288 . ds doc-macro-name Eq
1290 . ds doc-quote-left "\$1
1291 . ds doc-quote-right "\$2
1294 . doc-enclose-string \$@
1298 .\" NS Pq user macro
1299 .\" NS enclose string in parentheses
1302 .\" NS doc-macro-name
1303 .\" NS doc-quote-left
1304 .\" NS doc-quote-right
1306 .\" NS width register `Pq' set in doc-common
1309 . if !\n[doc-arg-limit] \
1310 . ds doc-macro-name Pq
1312 . ds doc-quote-left "\*[doc-left-parenthesis]
1313 . ds doc-quote-right "\*[doc-right-parenthesis]
1315 . doc-enclose-string \$@
1319 .\" NS Ql user macro
1320 .\" NS quoted literal
1322 .\" is in file doc-[dit|n]roff
1325 .\" NS Qq user macro
1326 .\" NS enclose string in straight double quotes
1329 .\" NS doc-macro-name
1330 .\" NS doc-quote-left
1331 .\" NS doc-quote-right
1333 .\" NS width register `Qq' set in doc-common
1336 . if !\n[doc-arg-limit] \
1337 . ds doc-macro-name Qq
1339 . ds doc-quote-left "\*[q]
1340 . ds doc-quote-right "\*[q]
1342 . doc-enclose-string \$@
1346 .\" NS Sq user macro
1347 .\" NS enclose string in single quotes
1350 .\" NS doc-macro-name
1351 .\" NS doc-quote-left
1352 .\" NS doc-quote-right
1354 .\" NS width register `Sq' set in doc-common
1357 . if !\n[doc-arg-limit] \
1358 . ds doc-macro-name Sq
1360 . ds doc-quote-left "\*[doc-left-singlequote]
1361 . ds doc-quote-right "\*[doc-right-singlequote]
1363 . doc-enclose-string \$@
1367 .\" NS Es user macro
1368 .\" NS set up arguments (i.e., the left and right quotation character as
1369 .\" NS first and second argument) for .En call
1373 .\" NS doc-macro-name
1374 .\" NS doc-quote-left
1375 .\" NS doc-quote-right
1378 . if !\n[doc-arg-limit] \{\
1379 . ie (\n[.$] > 2) \{\
1380 . ds doc-macro-name Es
1381 . doc-parse-args \$@
1384 . ds doc-quote-left "\$1
1385 . ds doc-quote-right "\$2
1388 . if !\n[doc-arg-limit] \
1392 . ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
1394 . ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
1396 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1397 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1399 . doc-print-and-reset
1403 .\" NS doc-have-slot global register (bool)
1404 .\" NS set if `doc-enclose-string' has created a slot for closing
1410 .\" NS doc-enclose-string macro
1411 .\" NS enclose string with given args (e.g. [ and ])
1416 .\" NS doc-have-slot
1418 .\" NS local variables:
1424 .\" NS doc-quote-left
1425 .\" NS doc-quote-right
1427 .de doc-enclose-string
1428 . if \n[doc-in-synopsis-section] \
1429 . doc-set-hard-space
1431 . if !\n[doc-arg-limit] \{\
1433 . doc-parse-args \$@
1435 . nop \)\*[doc-quote-left]\*[doc-quote-right]
1438 . if !\n[doc-arg-limit] \
1441 . nr doc-curr-font \n[.f]
1442 . nr doc-curr-size \n[.ps]
1445 . doc-print-prefixes
1446 . \" the final `\)' prevents hyphenation in case the next character is `\%'
1447 . nop \)\*[doc-quote-left]\)\c
1448 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
1450 . nop \)\*[doc-quote-right]\)\c
1451 . doc-print-and-reset
1454 . \" test whether last arguments are of type closing punctuation
1456 . ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
1457 . nr doc-reg-des (\n[doc-arg-limit] - 1)
1458 . while (\n[doc-type\n[doc-reg-des]] == 3) \
1461 . \" prepend closing delimiter
1463 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1466 . \" test whether last arguments are macros which continue the line
1468 . nr doc-reg-des \n[doc-arg-limit]
1469 . while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
1470 . if !\A
\a\*[doc-arg\n[doc-reg-des]]
\a \
1472 . if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
1477 . \" if there are no trailing macros to be skipped, append argument
1478 . ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
1479 . doc-append-arg "\)\*[doc-quote-right]\)" 3
1481 . \" if a previous call to `doc-enclose-string' has already created
1482 . \" a slot, prepend argument
1483 . ie \n[doc-have-slot] \
1484 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1486 . \" we have to shift all arguments to the right
1488 . nr doc-reg-des1 \n[doc-arg-limit]
1489 . nr doc-reg-des2 (\n[doc-arg-limit] + 1)
1490 . while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
1491 . rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
1492 . rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
1493 . rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
1494 . nr doc-reg-des1 -1
1495 . nr doc-reg-des2 -1
1497 . nr doc-arg-limit +1
1499 . \" finally, insert closing delimiter into the freed slot and
1500 . \" recompute spacing vector
1501 . ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
1502 . nr doc-type\n[doc-reg-des] 3
1503 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
1504 . nr doc-arg-limit (\n[doc-reg-des] - 1)
1505 . doc-parse-space-vector
1506 . nr doc-have-slot 1
1509 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1512 . if \n[doc-in-synopsis-section] \
1513 . doc-set-soft-space
1517 .\" NS En user macro
1518 .\" NS enclose arguments with quotation characters set up with `.Es'
1520 .als En doc-enclose-string
1523 .\" NS Ao user macro
1527 .\" NS doc-macro-name
1528 .\" NS doc-quote-left
1530 .\" NS width register `Ao' set in doc-common
1533 . if !\n[doc-arg-limit] \
1534 . ds doc-macro-name Ao
1536 . ie "\*[doc-macro-name]"An" \
1537 . ds doc-quote-left <
1539 . ds doc-quote-left \[la]
1541 . doc-enclose-open \$@
1545 .\" NS Ac user macro
1549 .\" NS doc-macro-name
1550 .\" NS doc-quote-right
1552 .\" NS width register `Ac' set in doc-common
1555 . if !\n[doc-arg-limit] \
1556 . ds doc-macro-name Ac
1558 . ie "\*[doc-macro-name]"An" \
1559 . ds doc-quote-right >
1561 . ds doc-quote-right \[ra]
1563 . doc-enclose-close \$@
1567 .\" NS Bo user macro
1571 .\" NS doc-macro-name
1572 .\" NS doc-quote-left
1574 .\" NS width register `Bo' set in doc-common
1577 . if !\n[doc-arg-limit] \
1578 . ds doc-macro-name Bo
1580 . ds doc-quote-left "\*[doc-left-bracket]
1582 . doc-enclose-open \$@
1586 .\" NS Bc user macro
1587 .\" NS bracket close
1590 .\" NS doc-macro-name
1591 .\" NS doc-quote-right
1593 .\" NS width register `Bc' set in doc-common
1596 . if !\n[doc-arg-limit] \
1597 . ds doc-macro-name Bc
1599 . ds doc-quote-right "\*[doc-right-bracket]
1601 . doc-enclose-close \$@
1605 .\" NS Bro user macro
1609 .\" NS doc-macro-name
1610 .\" NS doc-quote-left
1612 .\" NS width register `Bro' set in doc-common
1615 . if !\n[doc-arg-limit] \
1616 . ds doc-macro-name Bo
1618 . ds doc-quote-left {
1620 . doc-enclose-open \$@
1624 .\" NS Brc user macro
1628 .\" NS doc-macro-name
1629 .\" NS doc-quote-right
1631 .\" NS width register `Brc' set in doc-common
1634 . if !\n[doc-arg-limit] \
1635 . ds doc-macro-name Bc
1637 . ds doc-quote-right }
1639 . doc-enclose-close \$@
1643 .\" NS Do user macro
1644 .\" NS double quote open
1647 .\" NS doc-macro-name
1648 .\" NS doc-quote-left
1650 .\" NS width register `Do' set in doc-common
1653 . if !\n[doc-arg-limit] \
1654 . ds doc-macro-name Do
1656 . ds doc-quote-left "\*[Lq]
1658 . doc-enclose-open \$@
1662 .\" NS Dc user macro
1663 .\" NS double quote close
1666 .\" NS doc-macro-name
1667 .\" NS doc-quote-right
1669 .\" NS width register `Dc' set in doc-common
1672 . if !\n[doc-arg-limit] \
1673 . ds doc-macro-name Dc
1675 . ds doc-quote-right "\*[Rq]
1677 . doc-enclose-close \$@
1681 .\" NS Eo user macro
1682 .\" NS enclose open (using first argument as beginning of enclosure)
1685 .\" NS doc-macro-name
1686 .\" NS doc-quote-left
1688 .\" NS width register `Eo' set in doc-common
1691 . if !\n[doc-arg-limit] \
1692 . ds doc-macro-name Eo
1694 . ds doc-quote-left "\$1
1697 . doc-enclose-open \$@
1701 .\" NS Ec user macro
1702 .\" NS enclose close (using first argument as end of enclosure)
1705 .\" NS doc-macro-name
1706 .\" NS doc-quote-right
1708 .\" NS width register `Ec' set in doc-common
1711 . if !\n[doc-arg-limit] \
1712 . ds doc-macro-name Ec
1714 . ds doc-quote-right "\$1
1717 . doc-enclose-close \$@
1721 .\" NS Oo user macro
1725 .\" NS doc-macro-name
1726 .\" NS doc-quote-left
1728 .\" NS width register `Oo' set in doc-common
1731 . if !\n[doc-arg-limit] \
1732 . ds doc-macro-name Oo
1734 . ds doc-quote-left [
1736 . doc-enclose-open \$@
1740 .\" NS Oc user macro
1744 .\" NS doc-macro-name
1745 .\" NS doc-quote-right
1747 .\" NS width register `Oc' set in doc-common
1750 . if !\n[doc-arg-limit] \
1751 . ds doc-macro-name Oc
1753 . ds doc-quote-right ]
1755 . doc-enclose-close \$@
1759 .\" NS Po user macro
1760 .\" NS parenthesis open
1763 .\" NS doc-macro-name
1764 .\" NS doc-quote-left
1766 .\" NS width register `Po' set in doc-common
1769 . if !\n[doc-arg-limit] \
1770 . ds doc-macro-name Po
1772 . ds doc-quote-left "\*[doc-left-parenthesis]
1774 . doc-enclose-open \$@
1778 .\" NS Pc user macro
1779 .\" NS parenthesis close
1782 .\" NS doc-macro-name
1783 .\" NS doc-quote-right
1785 .\" NS width register `Pc' set in doc-common
1788 . if !\n[doc-arg-limit] \
1789 . ds doc-macro-name Pc
1791 . ds doc-quote-right "\*[doc-right-parenthesis]
1793 . doc-enclose-close \$@
1797 .\" NS Qo user macro
1798 .\" NS straight double quote open
1801 .\" NS doc-macro-name
1802 .\" NS doc-quote-left
1804 .\" NS width register `Qo' set in doc-common
1807 . if !\n[doc-arg-limit] \
1808 . ds doc-macro-name Qo
1810 . ds doc-quote-left "\*[q]
1812 . doc-enclose-open \$@
1816 .\" NS Qc user macro
1817 .\" NS straight double quote close
1820 .\" NS doc-macro-name
1821 .\" NS doc-quote-right
1823 .\" NS width register `Qc' set in doc-common
1826 . if !\n[doc-arg-limit] \
1827 . ds doc-macro-name Qc
1829 . ds doc-quote-right "\*[q]
1831 . doc-enclose-close \$@
1835 .\" NS So user macro
1836 .\" NS single quote open
1839 .\" NS doc-macro-name
1840 .\" NS doc-quote-left
1842 .\" NS width register `So' set in doc-common
1845 . if !\n[doc-arg-limit] \
1846 . ds doc-macro-name So
1848 . ds doc-quote-left "\*[doc-left-singlequote]
1850 . doc-enclose-open \$@
1854 .\" NS Sc user macro
1855 .\" NS single quote close
1858 .\" NS doc-macro-name
1859 .\" NS doc-quote-right
1861 .\" NS width register `Sc' set in doc-common
1864 . if !\n[doc-arg-limit] \
1865 . ds doc-macro-name Sc
1867 . ds doc-quote-right "\*[doc-right-singlequote]
1869 . doc-enclose-close \$@
1873 .\" NS Xo user macro
1877 .\" NS doc-macro-name
1878 .\" NS doc-quote-left
1880 .\" NS width register `Xo' set in doc-common
1883 . if !\n[doc-arg-limit] \
1884 . ds doc-macro-name Xo
1888 . doc-enclose-open \$@
1892 .\" NS Xc user macro
1896 .\" NS doc-macro-name
1897 .\" NS doc-quote-right
1899 .\" NS width register `Xc' set in doc-common
1902 . if !\n[doc-arg-limit] \
1903 . ds doc-macro-name Xc
1905 . ds doc-quote-right
1907 . doc-enclose-close \$@
1911 .\" NS doc-nesting-level global register
1912 .\" NS used by `doc-enclose-open' and `doc-enclose-close'
1914 .nr doc-nesting-level 0
1917 .\" NS doc-in-list global register (bool)
1918 .\" NS whether we are in (logical) .It
1923 .\" NS doc-enclose-open macro
1924 .\" NS enclose string open
1928 .\" NS doc-nesting-level
1930 .de doc-enclose-open
1931 . if !\n[doc-arg-limit] \
1932 . doc-parse-args \$@
1935 . doc-print-prefixes
1938 . nop \)\*[doc-quote-left]\)\c
1940 . \" start enclosure box
1941 . box doc-enclosure-box\n[doc-nesting-level]
1942 . ev doc-enclosure-env\n[doc-nesting-level]
1946 . \" we insert something to make .chop always work
1949 . \" increase nesting level *after* parsing of arguments
1950 . nr doc-nesting-level +1
1952 . if \n[doc-arg-limit] \{\
1954 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1955 . doc-print-recursive
1962 .\" NS doc-enclose-close macro
1963 .\" NS enclose string close
1966 .\" NS doc-nesting-level
1968 .de doc-enclose-close
1969 . nr doc-nesting-level -1
1971 . \" finish enclosure box
1975 . chop doc-enclosure-box\n[doc-nesting-level]
1976 . unformat doc-enclosure-box\n[doc-nesting-level]
1979 . nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
1980 . nop \)\*[doc-quote-right]\)\c
1982 . if !\n[doc-arg-limit] \{\
1983 . doc-parse-args \$@
1986 . doc-print-and-reset
1989 . if \n[doc-arg-limit] \{\
1990 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
1991 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
1993 . doc-print-recursive
1996 . doc-print-and-reset
1999 . \" shall we finish .It macro?
2000 . if !"\*[doc-macro-name]"It" \
2001 . if \n[doc-in-list] \
2002 . if !\n[doc-nesting-level] \
2003 . doc-\*[doc-list-type-stack\n[doc-list-depth]]
2007 .\" NS Pf user macro
2008 .\" NS prefix: `.Pf prefix arg ...'
2012 .\" NS doc-macro-name
2013 .\" NS doc-quote-left
2015 .\" NS width register `Pf' set in doc-common
2018 . if !\n[doc-arg-limit] \
2019 . ds doc-macro-name Pf
2021 . ie \n[doc-arg-limit] \{\
2022 . ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
2024 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
2027 . tm mdoc warning: .Pf: trailing prefix (#\n[.c])
2033 . doc-parse-args \$@
2035 . tm mdoc warning: .Pf: missing arguments (#\n[.c])
2039 . if \n[doc-arg-limit] \{\
2041 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
2042 . doc-print-and-reset
2044 . doc-do-\n[doc-type\n[doc-arg-ptr]]
2049 .\" NS Ns user macro
2050 .\" NS remove space (space removal done by `doc-parse-args')
2054 .\" NS doc-macro-name
2056 .\" NS width register `Ns' set in doc-common
2059 . if !\n[doc-arg-limit] \{\
2061 . ds doc-macro-name Ns
2062 . doc-parse-args \$@
2065 . tm Usage: .Ns must be called with arguments (#\n[.c])
2068 . if \n[doc-arg-limit] \{\
2070 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2071 . doc-print-recursive
2078 .\" NS Ap user macro
2079 .\" NS append an apostrophe
2081 .\" NS width register `Ap' set in doc-common
2084 . ie !\n[doc-arg-limit] \
2085 . tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
2089 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2090 . doc-print-recursive
2097 .\" NS doc-space global string
2098 .\" NS current inter-argument space
2100 .ds doc-space "\*[doc-soft-space]
2103 .\" NS doc-soft-space constant string
2104 .\" NS soft (stretchable) space (defined in doc-common)
2107 .\" NS doc-hard-space constant string
2108 .\" NS hard (unpaddable) space (defined in doc-common)
2111 .\" NS doc-set-hard-space macro
2112 .\" NS set current space string to hard (unpaddable) space.
2115 .\" NS doc-saved-space
2118 .de doc-set-hard-space
2119 . ie "\*[doc-space]"" \
2120 . ds doc-saved-space "\*[doc-hard-space]
2122 . ds doc-space "\*[doc-hard-space]
2126 .\" NS doc-set-soft-space macro
2127 .\" NS set current space string to soft space
2130 .\" NS doc-saved-space
2133 .de doc-set-soft-space
2134 . ie "\*[doc-space]"" \
2135 . ds doc-saved-space "\*[doc-soft-space]
2137 . ds doc-space "\*[doc-soft-space]
2141 .\" NS doc-space-mode global register (bool)
2142 .\" NS default is one (space mode on)
2144 .nr doc-space-mode 1
2147 .\" NS doc-saved-space global string
2148 .\" NS saved value of `doc-space'
2150 .ds doc-saved-space "\*[doc-space]
2153 .\" NS doc-have-space global register (bool)
2154 .\" NS set if last command was horizontal space
2156 .nr doc-have-space 0
2159 .\" NS Sm user macro
2160 .\" NS space mode (`.Sm'/`.Sm on'/`.Sm off')
2162 .\" NS without argument, toggle space mode
2165 .\" NS doc-arg-limit
2168 .\" NS doc-macro-name
2170 .\" NS doc-saved-space
2172 .\" NS doc-space-mode
2175 .\" NS local variables:
2178 .\" NS width register `Sm' set in doc-common
2181 . ie \n[doc-have-space] \
2186 . if !\n[doc-arg-limit] \{\
2188 . ds doc-macro-name Sm
2189 . doc-parse-args \$@
2192 . ie \n[doc-space-mode] \{\
2193 . ds doc-saved-space "\*[doc-space]
2195 . nr doc-space-mode 0
2198 . ds doc-space "\*[doc-saved-space]
2199 . nr doc-space-mode 1
2201 . \" finish line only if it is interrupted and `doc-have-space'
2203 . if \n[doc-reg-Sm] \
2209 . if !\n[doc-arg-limit] \
2214 . \" avoid a warning message in case `Sm' is the last parameter
2215 . if !d doc-arg\n[doc-arg-ptr] \
2216 . ds doc-arg\n[doc-arg-ptr]
2218 . ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
2219 . ds doc-space "\*[doc-saved-space]
2220 . nr doc-space-mode 1
2223 . ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
2224 . ds doc-saved-space "\*[doc-space]
2226 . nr doc-space-mode 0
2229 . \" no argument for Sm
2231 . ie \n[doc-space-mode] \{\
2232 . ds doc-saved-space "\*[doc-space]
2234 . nr doc-space-mode 0
2237 . ds doc-space "\*[doc-saved-space]
2238 . nr doc-space-mode 1
2242 . ie \n[doc-space-mode] \{\
2243 . \" recompute space vector for remaining arguments
2244 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
2245 . nr doc-arg-limit \n[doc-arg-ptr]
2246 . if \n[doc-num-args] \
2247 . doc-parse-space-vector
2249 . \" finish line only if it is interrupted and `doc-have-space'
2251 . if \n[doc-reg-Sm] \
2256 . \" reset remaining space vector elements
2257 . nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
2258 . while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
2259 . ds doc-space\n[doc-reg-Sm]
2261 . \" the body of a `while' request must end with the fitting `\}'!
2265 . \" do we have parameters to print?
2266 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
2267 . \" skip `Sm' argument
2269 . doc-print-recursive
2276 .\" NS doc-arg-type immediate register
2277 .\" NS argument type (macro=1, string=2, punctuation suffix=3,
2278 .\" NS punctuation prefix=4)
2283 .\" NS doc-get-arg-type macro
2284 .\" NS get argument type
2286 .\" NS this macro expects the width of the argument in `doc-width'
2291 .de doc-get-arg-type
2294 . if ((\n[doc-width] < 4) & \A
\a\$1
\a) \{\
2295 . ie (\n[doc-width] == 1) \{\
2296 . if r doc-punct\$1 \
2297 . nr doc-arg-type \n[doc-punct\$1]
2307 .\" NS doc-get-arg-type* macro
2308 .\" NS similar to as `doc-get-arg-type' but uses doc-argXXX strings
2310 .\" NS this macro sets the `doc-width' register using the `length' request
2311 .\" NS to get the number of characters in a string literally
2317 .de doc-get-arg-type*
2319 . length doc-width "\*[doc-arg\$1]
2321 . if ((\n[doc-width] < 4) & \A
\a\*[doc-arg\$1]
\a) \{\
2322 . ie (\n[doc-width] == 1) \{\
2323 . if r doc-punct\*[doc-arg\$1] \
2324 . nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
2327 . if r \*[doc-arg\$1] \
2328 . if d \*[doc-arg\$1] \
2334 .\" NS doc-set-spacing-1 macro
2335 .\" NS set spacing for macros
2340 .\" NS local variables:
2341 .\" NS doc-reg-dssfm
2342 .\" NS doc-reg-dssfm1
2344 .de doc-set-spacing-1
2345 . nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
2347 . \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
2349 . ie (\n[doc-reg-dssfm1] == 3) \{\
2350 . if \n[doc-arg-limit] \{\
2351 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2352 . ds doc-space\n[doc-reg-dssfm]
2354 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2357 . \" macros like .Ap and .Ns have value 2 (remove space before and after
2359 . ie (\n[doc-reg-dssfm1] == 2) \{\
2360 . if \n[doc-arg-limit] \{\
2361 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2362 . ds doc-space\n[doc-reg-dssfm]
2364 . ds doc-space\n[doc-arg-limit]
2367 . ds doc-space\n[doc-arg-limit]
2372 .\" NS doc-set-spacing-2 macro
2373 .\" NS set spacing for strings
2378 .de doc-set-spacing-2
2379 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2383 .\" NS doc-set-spacing-3 macro
2384 .\" NS set spacing for punctuation suffixes
2389 .\" NS local variables:
2390 .\" NS doc-reg-dssfps
2392 .de doc-set-spacing-3
2393 . if \n[doc-arg-limit] \{\
2394 . nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
2395 . ds doc-space\n[doc-reg-dssfps]
2398 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2402 .\" NS doc-set-spacing-4 macro
2403 .\" NS set spacing for punctuation prefixes
2408 .de doc-set-spacing-4
2409 . ds doc-space\n[doc-arg-limit]
2413 .\" type switches (on current argument doc-arg-ptr)
2416 .\" NS doc-do-1 macro
2417 .\" NS call request if macro
2420 . \*[doc-arg\n[doc-arg-ptr]]
2424 .\" NS doc-do-2 macro
2425 .\" NS call .doc-print-recursive if string
2427 .als doc-do-2 doc-print-recursive
2430 .\" NS doc-do-3 macro
2431 .\" NS call .doc-print-recursive if punctuation suffix
2433 .als doc-do-3 doc-print-recursive
2436 .\" NS doc-do-4 macro
2437 .\" NS call .doc-print-recursive if punctuation prefix
2439 .als doc-do-4 doc-print-recursive
2442 .\" NS doc-fontmode-depth global register
2443 .\" NS font mode level
2445 .nr doc-fontmode-depth 0
2448 .\" NS doc-fontmode-font-stackXXX global register
2449 .\" NS stack of saved current font values from `Bf' macro
2452 .\" NS doc-fontmode-depth
2454 .nr doc-fontmode-font-stack0 0
2457 .\" NS doc-fontmode-size-stackXXX global register
2458 .\" NS stack of saved current size values from `Bf' macro
2461 .\" NS doc-fontmode-depth
2463 .nr doc-fontmode-size-stack0 0
2466 .\" NS Bf user macro
2467 .\" NS begin font mode (will be begin-mode/end-mode in groff & TeX)
2470 .\" NS doc-fontmode-depth
2471 .\" NS doc-fontmode-font-stackXXX
2472 .\" NS doc-fontmode-size-stackXXX
2473 .\" NS doc-macro-name
2475 .\" NS width register `Bf' set in doc-common
2478 . ds doc-macro-name Bf
2481 . nr doc-fontmode-depth +1
2483 . \" save current font and size
2484 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
2485 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
2488 . nop \*[doc-Em-font]\c
2489 . el \{ .ie "\$1"Li" \
2490 . nop \*[doc-Li-font]\c
2491 . el \{ .ie "\$1"Sy" \
2492 . nop \*[doc-Sy-font]\c
2493 . el \{ .ie "\$1"-emphasis" \
2494 . nop \*[doc-Em-font]\c
2495 . el \{ .ie "\$1"-literal" \
2496 . nop \*[doc-Li-font]\c
2497 . el \{ .ie "\$1"-symbolic" \
2498 . nop \*[doc-Sy-font]\c
2500 . tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
2504 . tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
2508 .\" NS Ef user macro
2509 .\" NS end font mode
2512 .\" NS doc-macro-name
2514 .\" NS width register `Ef' set in doc-common
2517 . ds doc-macro-name Ef
2519 . ie \n[doc-fontmode-depth] \{\
2520 . \" restore saved font and size
2521 . nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
2522 . nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
2524 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
2525 . nr doc-curr-font \n[.f]
2526 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
2527 . nr doc-curr-size \n[.ps]
2528 . nr doc-fontmode-depth -1
2531 . tm mdoc warning: Extraneous .Ef (#\n[.c])
2535 .\" NS doc-keep-type global register
2536 .\" NS current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
2541 .\" NS Bk user macro
2545 .\" NS doc-keep-type
2546 .\" NS doc-macro-name
2548 .\" NS width register `Bk' set in doc-common
2551 . ds doc-macro-name Bk
2553 . if \n[doc-keep-type] \
2554 . tm .Bk: nesting keeps not implemented yet. (#\n[.c])
2556 . ie "\$1"-lines" \{\
2557 . nr doc-keep-type 2
2558 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2560 . el \{ .ie "\$1"-words" \{\
2561 . nr doc-keep-type 1
2562 . doc-set-hard-space
2564 . el \{ .ie "\$1"" \{\
2566 . nr doc-keep-type 1
2567 . doc-set-hard-space
2570 . tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
2571 . nr doc-keep-type 3
2574 \#. nr doc-nesting-level +1
2578 .\" NS Ek user macro
2582 .\" NS doc-keep-type
2583 .\" NS doc-macro-name
2585 .\" NS width register `Ek' set in doc-common
2588 . ds doc-macro-name Ek
2590 \#. nr doc-nesting-level -1
2593 . tm Usage: .Ek (does not take arguments) (#\n[.c])
2595 . if !\n[doc-keep-type] \
2596 . tm mdoc warning: .Ek found without .Bk before (#\n[.c])
2598 . ie (\n[doc-keep-type] == 1) \
2599 . doc-set-soft-space
2600 . el \{ .if (\n[doc-keep-type] == 2) \
2601 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2604 . nr doc-keep-type 0
2606 \#. if !"\*[doc-out-string]"" \
2607 \#. doc-print-out-string
2611 .\" NS doc-display-depth global register
2612 .\" NS display level
2614 .nr doc-display-depth 0
2617 .\" NS doc-is-compact global register (bool)
2618 .\" NS set if the `compact' keyword is given
2620 .nr doc-is-compact 0
2623 .\" NS doc-display-type-stackXXX global string
2624 .\" NS the display type stack
2627 .\" NS doc-display-depth
2629 .ds doc-display-type-stack0
2632 .\" NS doc-display-indent-stackXXX global register
2633 .\" NS stack of display indentation values
2636 .\" NS doc-display-depth
2638 .nr doc-display-indent-stack0 0
2641 .\" NS doc-display-ad-stackXXX global register
2642 .\" NS stack of saved adjustment modes
2645 .\" NS doc-display-depth
2647 .nr doc-display-ad-stack0 0
2650 .\" NS doc-display-fi-stackXXX global register
2651 .\" NS stack of saved fill modes
2654 .\" NS doc-display-depth
2656 .nr doc-display-fi-stack0 0
2659 .\" NS doc-display-ft-stackXXX global register
2660 .\" NS stack of saved fonts
2663 .\" NS doc-display-depth
2665 .nr doc-display-ft-stack0 0
2668 .\" NS doc-display-ps-stackXXX global register
2669 .\" NS stack of saved font sizes
2672 .\" NS doc-display-depth
2674 .nr doc-display-ps-stack0 0
2677 .\" NS Bd user macro
2678 .\" NS begin display
2680 .\" NS width register `Bd' set in doc-common
2683 .\" NS doc-curr-font
2684 .\" NS doc-curr-size
2685 .\" NS doc-display-depth
2686 .\" NS doc-display-ad-stackXXX
2687 .\" NS doc-display-fi-stackXXX
2688 .\" NS doc-display-ft-stackXXX
2689 .\" NS doc-display-ps-stackXXX
2690 .\" NS doc-display-file
2691 .\" NS doc-display-indent-stackXXX
2692 .\" NS doc-display-type-stackXXX
2693 .\" NS doc-is-compact
2694 .\" NS doc-macro-name
2696 .\" NS local variables:
2700 . ds doc-macro-name Bd
2703 . tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
2704 . tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c])
2708 . nr doc-is-compact 0
2709 . ds doc-display-file
2711 . nr doc-display-depth +1
2713 . \" save current adjustment and fill modes
2714 . nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
2715 . nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
2717 . ie "\$1"-literal" \{\
2718 . ds doc-display-type-stack\n[doc-display-depth] literal
2719 . nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
2720 . nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
2728 . el \{ .ie "\$1"-filled" \{\
2729 . ds doc-display-type-stack\n[doc-display-depth] filled
2733 . el \{ .ie "\$1"-ragged" \{\
2734 . ds doc-display-type-stack\n[doc-display-depth] ragged
2738 . el \{ .ie "\$1"-centered" \{\
2739 . ds doc-display-type-stack\n[doc-display-depth] centered
2743 . el \{ .ie "\$1"-unfilled" \{\
2744 . ds doc-display-type-stack\n[doc-display-depth] unfilled
2748 . tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
2749 . tm1 " in .Bd macro (#\n[.c])
2753 . \" have we seen an argument?
2754 . if \n[doc-reg-Bd] \{\
2756 . \" check other arguments
2758 . doc-do-Bd-args \$@
2761 . \" avoid warning about non-existent register
2762 . if !r doc-display-indent-stack\n[doc-display-depth] \
2763 . nr doc-display-indent-stack\n[doc-display-depth] 0
2765 . if \n[doc-display-indent-stack\n[doc-display-depth]] \
2766 . in +\n[doc-display-indent-stack\n[doc-display-depth]]u
2768 . if !\n[doc-is-compact] \
2769 . sp \n[doc-display-vertical]u
2771 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
2773 . nop \*[doc-Li-font]\c
2778 . if !"\*[doc-display-file]"" \
2779 . so \*[doc-display-file]
2781 . nr doc-is-compact 0
2782 . ds doc-display-file
2786 .\" NS doc-do-Bd-args macro
2787 .\" NS resolve remaining .Bd arguments
2790 .\" NS doc-display-file
2791 .\" NS doc-display-indent-stackXXX
2792 .\" NS doc-is-compact
2794 .\" NS local variables:
2796 .\" NS doc-reg-ddBa1
2797 .\" NS doc-reg-ddBa2
2798 .\" NS doc-reg-ddBa3
2799 .\" NS doc-reg-ddBa4
2805 . ie "\$1"-offset" \{\
2809 . nr doc-display-indent-stack\n[doc-display-depth] 0
2810 . el \{ .ie "\$2"right" \
2811 . nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
2812 . el \{ .ie "\$2"center" \
2813 . nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
2814 . el \{ .ie "\$2"indent" \
2815 . nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
2816 . el \{ .ie "\$2"indent-two" \
2817 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
2822 . \" not a known keyword
2823 . if (\n[doc-reg-ddBa] == 1) \{\
2826 . nr doc-reg-ddBa1 0
2827 . if \B
\a(\$2)
\a \{\
2828 . \" disable warnings related to scaling indicators (32)
2829 . nr doc-reg-ddBa2 \n[.warn]
2830 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
2832 . \" values without a scaling indicator are taken as strings;
2833 . \" we test whether the parameter string with and without the last
2834 . \" character yields identical numerical results (ignoring the
2835 . \" scaling indicator)
2836 . ds doc-str-ddBa "\$2
2837 . substring doc-str-ddBa 0 -2
2838 . if \B
\a(\*[doc-str-ddBa])
\a \{\
2839 . nr doc-reg-ddBa3 (;(\$2))
2840 . nr doc-reg-ddBa4 (\*[doc-str-ddBa])
2841 . if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
2842 . nr doc-reg-ddBa1 1
2845 . \" enable all warnings again
2846 . warn \n[doc-reg-ddBa2]
2849 . ie \n[doc-reg-ddBa1] \
2850 . nr doc-display-indent-stack\n[doc-display-depth] \$2
2852 . doc-get-width "\$2"
2853 . ie (\n[doc-width] <= 3) \{\
2854 . \" if the offset parameter is a macro, use the macro's
2855 . \" width as specified in doc-common
2856 . doc-get-arg-type "\$2"
2857 . ie (\n[doc-arg-type] == 1) \
2858 . nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
2860 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2863 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2866 . el \{ .ie "\$1"-compact" \
2867 . nr doc-is-compact 1
2868 . el \{ .ie "\$1"-file" \{\
2870 . ds doc-display-file "\$2
2874 . tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
2877 . tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
2880 . if (\n[doc-reg-ddBa] < \n[.$]) \{\
2881 . shift \n[doc-reg-ddBa]
2882 . doc-do-Bd-args \$@
2887 .\" NS Ed user macro
2891 .\" NS doc-display-depth
2892 .\" NS doc-display-indent-stackXXX
2893 .\" NS doc-display-type-stackXXX
2894 .\" NS doc-macro-name
2896 .\" NS width register `Ed' set in doc-common
2899 . ds doc-macro-name Ed
2903 . if !\n[doc-display-depth] \{\
2904 . tm mdoc warning: Extraneous .Ed (#\n[.c])
2905 . nr doc-display-depth 1
2908 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
2909 . ft \n[doc-display-ft-stack\n[doc-display-depth]]
2910 . ps \n[doc-display-ps-stack\n[doc-display-depth]]u
2913 . in -\n[doc-display-indent-stack\n[doc-display-depth]]u
2915 . \" restore saved adjustment and fill modes
2916 . ie \n[doc-display-fi-stack\n[doc-display-depth]] \
2920 . ad \n[doc-display-ad-stack\n[doc-display-depth]]
2922 . nr doc-display-indent-stack\n[doc-display-depth] 0
2923 . ds doc-display-type-stack\n[doc-display-depth]
2924 . nr doc-display-depth -1
2928 .\" NS doc-list-type-stackXXX global string
2929 .\" NS stack of list types
2932 .\" NS doc-list-depth
2934 .ds doc-list-type-stack1
2937 .\" NS doc-list-indent-stackXXX global register
2938 .\" NS stack of list indentation values
2941 .\" NS doc-list-depth
2943 .nr doc-list-indent-stack1 0
2946 .\" NS doc-list-have-indent-stackXXX global register (bool)
2947 .\" NS an indentation value is active
2950 .\" NS doc-list-depth
2952 .nr doc-list-have-indent-stack1 0
2955 .\" NS Bl user macro
2958 .\" NS width register `Bl' set in doc-common
2963 .\" NS doc-list-depth
2964 .\" NS doc-list-have-indent-stackXXX
2965 .\" NS doc-list-indent-stackXXX
2966 .\" NS doc-list-type-stackXXX
2967 .\" NS doc-macro-name
2969 .\" NS doc-num-columns
2971 .\" NS local variables:
2980 . ds doc-macro-name Bl
2981 . nr doc-list-depth +1
2984 . ie "\$1"-hang" \{\
2985 . ds doc-list-type-stack\n[doc-list-depth] hang-list
2986 . nr doc-list-indent-stack\n[doc-list-depth] 6n
2987 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2989 . el \{ .ie "\$1"-tag" \{\
2990 . ds doc-list-type-stack\n[doc-list-depth] tag-list
2991 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2993 . el \{ .ie "\$1"-item" \{\
2994 . ds doc-list-type-stack\n[doc-list-depth] item-list
2995 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2997 . el \{ .ie "\$1"-enum" \{\
2998 . ds doc-list-type-stack\n[doc-list-depth] enum-list
2999 . nr doc-list-indent-stack\n[doc-list-depth] 3n
3000 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3002 . el \{ .ie "\$1"-bullet" \{\
3003 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
3004 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3005 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3007 . el \{ .ie "\$1"-dash" \{\
3008 . ds doc-list-type-stack\n[doc-list-depth] dash-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"-hyphen" \{\
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"-inset" \{\
3018 . ds doc-list-type-stack\n[doc-list-depth] inset-list
3019 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3021 . el \{ .ie "\$1"-diag" \{\
3022 . ds doc-list-type-stack\n[doc-list-depth] diag-list
3024 . el \{ .ie "\$1"-ohang" \{\
3025 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
3026 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3028 . el \{ .ie "\$1"-column" \{\
3029 . ds doc-list-type-stack\n[doc-list-depth] column-list
3033 . tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
3034 . tm1 " in .Bl macro
3037 . \}\}\}\}\}\}\}\}\}\}\}
3039 . \" we have seen a list type
3040 . if !\n[doc-arg-ptr] \{\
3043 . nr doc-list-depth -1
3049 . \" fill argument vector
3051 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
3052 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
3053 . \" dummy type and space so that doc-save-global-vars() doesn't warn
3054 . nr doc-type\n[doc-reg-Bl] 0
3055 . ds doc-space\n[doc-reg-Bl]
3059 . doc-increment-list-stack
3062 . nr doc-arg-limit \n[.$]
3066 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
3068 . \" initialize column list
3069 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3070 . doc-set-column-tab \n[doc-num-columns]
3071 ' in -\n[doc-column-indent-width]u
3072 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3073 . sp \n[doc-display-vertical]u
3076 . nr doc-num-columns 0
3083 .\" NS doc-Bl-usage macro
3086 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3087 . tm1 " [-width <string>]
3088 . tm1 " [-offset <string>] [-compact]
3089 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3090 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3091 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3095 .\" NS doc-do-Bl-args macro
3096 .\" NS resolve remaining .Bl arguments
3101 .\" NS doc-compact-list-stackXXX
3102 .\" NS doc-list-indent-stackXXX
3103 .\" NS doc-list-offset-stackXXX
3104 .\" NS doc-num-columns
3105 .\" NS doc-tag-prefix-stackXXX
3106 .\" NS doc-tag-width-stackXXX
3108 .\" NS local variables:
3112 .\" NS doc-reg-dBla1
3113 .\" NS doc-reg-dBla2
3114 .\" NS doc-reg-dBla3
3115 .\" NS doc-reg-dBla4
3117 .\" NS doc-str-dBla1
3122 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
3125 . \" avoid a warning message in case e.g. `-offset' has no parameter
3126 . nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
3127 . if !d doc-arg\n[doc-reg-dBla] \
3128 . ds doc-arg\n[doc-reg-dBla]
3132 . ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
3133 . nr doc-compact-list-stack\n[doc-list-depth] 1
3135 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
3136 . ie (\n[doc-list-depth] > 1) \{\
3137 . nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
3138 . ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
3139 . as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
3140 . length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
3141 . nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
3144 . tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
3147 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
3149 . ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
3151 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3152 . substring doc-str-dBla 0 0
3153 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3154 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3155 . substring doc-str-dBla 1
3156 . doc-first-parameter \*[doc-str-dBla]
3157 . doc-get-width "\*[doc-str-dfp]
3158 . doc-get-arg-type "\*[doc-str-dfp]
3159 . ie (\n[doc-arg-type] == 1) \
3160 . nr doc-reg-dBla1 1
3162 . nr doc-reg-dBla1 0
3165 . nr doc-reg-dBla1 0
3166 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3168 . ie \n[doc-reg-dBla1] \{\
3169 . \" execute string in a box to get the width of the diversion
3170 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3171 . doc-save-global-vars
3178 . nop \*[doc-str-dBla]
3182 . doc-restore-global-vars
3183 . doc-get-width \h'\n[dl]u'
3184 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3187 . \" test whether argument is a valid numeric expression
3188 . nr doc-reg-dBla1 0
3189 . if \B
\a(\*[doc-str-dBla])
\a \{\
3190 . \" disable warnings related to scaling indicators (32)
3191 . nr doc-reg-dBla2 \n[.warn]
3192 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3194 . \" values without a scaling indicator are taken as strings;
3195 . \" we test whether the parameter string with and without the last
3196 . \" character yields identical numerical results (ignoring the
3197 . \" scaling indicator)
3198 . ds doc-str-dBla1 "\*[doc-str-dBla]
3199 . substring doc-str-dBla1 0 -2
3200 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3201 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3202 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3203 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3204 . nr doc-reg-dBla1 1
3207 . \" enable all warnings again
3208 . warn \n[doc-reg-dBla2]
3211 . ie \n[doc-reg-dBla1] \
3212 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3214 . doc-get-arg-width \n[doc-arg-ptr]
3215 . ie (\n[doc-width] == 2) \{\
3216 . \" if the width parameter is a macro, use the macro's
3217 . \" width as specified in doc-common
3218 . doc-get-arg-type \*[doc-str-dBla]
3219 . ie (\n[doc-arg-type] == 1) \
3220 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3222 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3225 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3228 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3231 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3232 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3234 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3235 . nr doc-reg-dBla1 0
3236 . if \B
\a(\*[doc-str-dBla])
\a \{\
3237 . nr doc-reg-dBla2 \n[.warn]
3238 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3240 . ds doc-str-dBla1 "\*[doc-str-dBla]
3241 . substring doc-str-dBla1 0 -2
3242 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3243 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3244 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3245 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3246 . nr doc-reg-dBla1 1
3249 . warn \n[doc-reg-dBla2]
3252 . ie \n[doc-reg-dBla1] \
3253 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3255 . doc-get-arg-width \n[doc-arg-ptr]
3256 . ie (\n[doc-width] <= 3) \{\
3257 . \" if the offset parameter is a macro, use the macro's
3258 . \" width as specified in doc-common
3259 . doc-get-arg-type \*[doc-str-dBla]
3260 . ie (\n[doc-arg-type] == 1) \
3261 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3263 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3266 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3272 . \" not a known keyword, so it specifies the width of the next column
3273 . \" (if it is a column list)
3274 . if !\n[doc-reg-dBla] \{\
3275 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3276 . nr doc-num-columns +1
3277 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3278 . substring doc-str-dBla 0 0
3279 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3280 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3281 . substring doc-str-dBla 1
3282 . doc-first-parameter \*[doc-str-dBla]
3283 . doc-get-width "\*[doc-str-dfp]
3284 . doc-get-arg-type "\*[doc-str-dfp]
3285 . ie (\n[doc-arg-type] == 1) \
3286 . nr doc-reg-dBla1 1
3288 . nr doc-reg-dBla1 0
3291 . nr doc-reg-dBla1 0
3292 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3294 . ie \n[doc-reg-dBla1] \{\
3295 . \" execute string in a box to get the width of the diversion
3296 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3297 . doc-save-global-vars
3304 . nop \*[doc-str-dBla]
3308 . doc-restore-global-vars
3309 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3312 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3315 . tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
3316 . tm1 " in .Bl macro (#\n[.c])
3319 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3324 .\" NS doc-save-global-vars macro
3325 .\" NS save all global variables
3327 .\" NS local variables:
3330 .de doc-save-global-vars
3331 . ds doc-macro-name-saved "\*[doc-macro-name]
3332 . nr doc-arg-limit-saved \n[doc-arg-limit]
3333 . nr doc-num-args-saved \n[doc-num-args]
3334 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3337 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3338 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3339 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3340 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3341 . nr doc-reg-dsgv +1
3344 . nr doc-curr-font-saved \n[doc-curr-font]
3345 . nr doc-curr-size-saved \n[doc-curr-size]
3346 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3347 . nr doc-in-library-section-saved \n[doc-in-library-section]
3348 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3349 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3350 . nr doc-have-decl-saved \n[doc-have-decl]
3351 . nr doc-have-var-saved \n[doc-have-var]
3352 . ds doc-command-name-saved "\*[doc-command-name]
3353 . ds doc-quote-left-saved "\*[doc-quote-left]
3354 . ds doc-quote-right-saved "\*[doc-quote-right]
3355 . nr doc-nesting-level-saved \n[doc-nesting-level]
3356 . nr doc-in-list-saved \n[doc-in-list]
3357 . ds doc-space-saved "\*[doc-space]
3358 . ds doc-saved-space-saved "\*[doc-saved-space]
3359 . nr doc-space-mode-saved \n[doc-space-mode]
3360 . nr doc-have-space-saved \n[doc-have-space]
3361 . nr doc-have-slot-saved \n[doc-have-slot]
3362 . nr doc-keep-type-saved \n[doc-keep-type]
3363 . nr doc-display-depth-saved \n[doc-display-depth]
3364 . nr doc-is-compact-saved \n[doc-is-compact]
3367 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3368 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3369 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3370 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3371 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3372 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3373 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3374 . nr doc-reg-dsgv +1
3377 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3380 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3381 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3382 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3383 . nr doc-reg-dsgv +1
3386 . nr doc-list-depth-saved \n[doc-list-depth]
3389 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3390 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3391 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3392 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3393 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3394 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3395 . ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
3396 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3397 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3398 . nr doc-reg-dsgv +1
3401 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3402 . nr doc-curr-type-saved \n[doc-curr-type]
3403 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3404 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3405 . nr doc-num-columns-saved \n[doc-num-columns]
3406 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3407 . nr doc-is-func-saved \n[doc-is-func]
3408 . nr doc-have-old-func-saved \n[doc-have-old-func]
3409 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3410 . ds doc-func-arg-saved "\*[doc-func-arg]
3411 . nr doc-num-func-args-saved \n[doc-num-func-args]
3412 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3413 . nr doc-have-func-saved \n[doc-have-func]
3414 . nr doc-is-reference-saved \n[doc-is-reference]
3415 . nr doc-reference-count-saved \n[doc-reference-count]
3416 . nr doc-author-count-saved \n[doc-author-count]
3419 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3420 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3421 . nr doc-reg-dsgv +1
3424 . nr doc-book-count-saved \n[doc-book-count]
3425 . ds doc-book-name-saved "\*[doc-book-name]
3426 . nr doc-city-count-saved \n[doc-city-count]
3427 . ds doc-city-name-saved "\*[doc-city-name]
3428 . nr doc-date-count-saved \n[doc-date-count]
3429 . ds doc-date-saved "\*[doc-date]
3430 . nr doc-publisher-count-saved \n[doc-publisher-count]
3431 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3432 . nr doc-journal-count-saved \n[doc-journal-count]
3433 . ds doc-journal-name-saved "\*[doc-journal-name]
3434 . nr doc-issue-count-saved \n[doc-issue-count]
3435 . ds doc-issue-name-saved "\*[doc-issue-name]
3436 . nr doc-optional-count-saved \n[doc-optional-count]
3437 . ds doc-optional-string-saved "\*[doc-optional-string]
3438 . nr doc-page-number-count-saved \n[doc-page-number-count]
3439 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3440 . nr doc-corporate-count-saved \n[doc-corporate-count]
3441 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3442 . nr doc-report-count-saved \n[doc-report-count]
3443 . ds doc-report-name-saved "\*[doc-report-name]
3444 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3445 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3446 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3447 . nr doc-url-count-saved \n[doc-url-count]
3448 . ds doc-url-name-saved "\*[doc-url-name]
3449 . nr doc-volume-count-saved \n[doc-volume-count]
3450 . ds doc-volume-name-saved "\*[doc-volume-name]
3451 . nr doc-have-author-saved \n[doc-have-author]
3453 . ds doc-document-title-saved "\*[doc-document-title]
3454 . ds doc-volume-saved "\*[doc-volume]
3455 . ds doc-section-saved "\*[doc-section]
3456 . ds doc-operating-system-saved "\*[doc-operating-system]
3457 . ds doc-date-string-saved "\*[doc-date-string]
3458 . nr doc-header-space-saved \n[doc-header-space]
3459 . nr doc-footer-space-saved \n[doc-footer-space]
3460 . nr doc-display-vertical-saved \n[doc-display-vertical]
3461 . ds doc-header-string-saved "\*[doc-header-string]
3462 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3463 . nr doc-in-files-section-saved \n[doc-in-files-section]
3464 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3468 .\" NS doc-restore-global-vars macro
3469 .\" NS restore all global variables
3471 .\" NS local variables:
3474 .de doc-restore-global-vars
3475 . ds doc-macro-name "\*[doc-macro-name-saved]
3476 . nr doc-arg-limit \n[doc-arg-limit-saved]
3477 . nr doc-num-args \n[doc-num-args-saved]
3478 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3481 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3482 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3483 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3484 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3485 . nr doc-reg-drgv +1
3488 . nr doc-curr-font \n[doc-curr-font-saved]
3489 . nr doc-curr-size \n[doc-curr-size-saved]
3490 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3491 . nr doc-in-library-section \n[doc-in-library-section-saved]
3492 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3493 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3494 . nr doc-have-decl \n[doc-have-decl-saved]
3495 . nr doc-have-var \n[doc-have-var-saved]
3496 . ds doc-command-name "\*[doc-command-name-saved]
3497 . ds doc-quote-left "\*[doc-quote-left-saved]
3498 . ds doc-quote-right "\*[doc-quote-right-saved]
3499 . nr doc-nesting-level \n[doc-nesting-level-saved]
3500 . nr doc-in-list \n[doc-in-list-saved]
3501 . ds doc-space "\*[doc-space-saved]
3502 . ds doc-saved-space "\*[doc-saved-space-saved]
3503 . nr doc-space-mode \n[doc-space-mode-saved]
3504 . nr doc-have-space \n[doc-have-space-saved]
3505 . nr doc-have-slot \n[doc-have-slot-saved]
3506 . nr doc-keep-type \n[doc-keep-type-saved]
3507 . nr doc-display-depth \n[doc-display-depth-saved]
3508 . nr doc-is-compact \n[doc-is-compact-saved]
3511 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3512 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3513 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3514 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3515 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3516 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3517 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3518 . nr doc-reg-drgv +1
3521 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3524 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3525 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3526 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3527 . nr doc-reg-drgv +1
3530 . nr doc-list-depth \n[doc-list-depth-saved]
3533 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3534 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3535 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3536 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3537 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3538 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3539 . ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
3540 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3541 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3542 . nr doc-reg-drgv +1
3545 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3546 . nr doc-curr-type \n[doc-curr-type-saved]
3547 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3548 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3549 . nr doc-num-columns \n[doc-num-columns-saved]
3550 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3551 . nr doc-is-func \n[doc-is-func-saved]
3552 . nr doc-have-old-func \n[doc-have-old-func-saved]
3553 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3554 . ds doc-func-arg "\*[doc-func-arg-saved]
3555 . nr doc-num-func-args \n[doc-num-func-args-saved]
3556 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3557 . nr doc-have-func \n[doc-have-func-saved]
3558 . nr doc-is-reference \n[doc-is-reference-saved]
3559 . nr doc-reference-count \n[doc-reference-count-saved]
3560 . nr doc-author-count \n[doc-author-count-saved]
3563 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3564 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3565 . nr doc-reg-drgv +1
3568 . nr doc-book-count \n[doc-book-count-saved]
3569 . ds doc-book-name "\*[doc-book-name-saved]
3570 . nr doc-city-count \n[doc-city-count-saved]
3571 . ds doc-city-name "\*[doc-city-name-saved]
3572 . nr doc-date-count \n[doc-date-count-saved]
3573 . ds doc-date "\*[doc-date-saved]
3574 . nr doc-publisher-count \n[doc-publisher-count-saved]
3575 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3576 . nr doc-journal-count \n[doc-journal-count-saved]
3577 . ds doc-journal-name "\*[doc-journal-name-saved]
3578 . nr doc-issue-count \n[doc-issue-count-saved]
3579 . ds doc-issue-name "\*[doc-issue-name-saved]
3580 . nr doc-optional-count \n[doc-optional-count-saved]
3581 . ds doc-optional-string "\*[doc-optional-string-saved]
3582 . nr doc-page-number-count \n[doc-page-number-count-saved]
3583 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3584 . nr doc-corporate-count \n[doc-corporate-count-saved]
3585 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3586 . nr doc-report-count \n[doc-report-count-saved]
3587 . ds doc-report-name "\*[doc-report-name-saved]
3588 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3589 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3590 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3591 . nr doc-url-count \n[doc-url-count-saved]
3592 . ds doc-url-name "\*[doc-url-name-saved]
3593 . nr doc-volume-count \n[doc-volume-count-saved]
3594 . ds doc-volume-name "\*[doc-volume-name-saved]
3595 . nr doc-have-author \n[doc-have-author-saved]
3597 . ds doc-document-title "\*[doc-document-title-saved]
3598 . ds doc-volume "\*[doc-volume-saved]
3599 . ds doc-section "\*[doc-section-saved]
3600 . ds doc-operating-system "\*[doc-operating-system-saved]
3601 . ds doc-date-string "\*[doc-date-string-saved]
3602 . nr doc-header-space \n[doc-header-space-saved]
3603 . nr doc-footer-space \n[doc-footer-space-saved]
3604 . nr doc-display-vertical \n[doc-display-vertical-saved]
3605 . ds doc-header-string "\*[doc-header-string-saved]
3606 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3607 . nr doc-in-files-section \n[doc-in-files-section-saved]
3608 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3612 .\" NS El user macro
3616 .\" NS doc-list-depth
3617 .\" NS doc-macro-name
3619 .\" NS local variables:
3622 .\" NS width register `El' set in doc-common
3626 . tm Usage: .El (does not take arguments) (#\n[.c])
3630 . ds doc-macro-name El
3631 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3633 . ie "\*[doc-str-El]"diag-list" \
3635 . el \{ .ie "\*[doc-str-El]"column-list" \
3636 . doc-end-column-list
3637 . el \{ .ie "\*[doc-str-El]"item-list" \
3639 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3641 . el \{ .ie "\*[doc-str-El]"inset-list" \
3651 .\" NS doc-saved-Pa-font global string
3652 .\" NS saved doc-Pa-font string for section FILES (no underline if
3655 .ds doc-saved-Pa-font
3658 .\" NS doc-curr-type global register
3659 .\" NS current argument type
3664 .\" NS doc-curr-arg global string
3665 .\" NS current argument
3670 .\" NS doc-item-boxXXX global box
3671 .\" NS item boxes associated list depth
3674 .\" NS doc-list-depth
3677 .\" NS It user macro
3684 .\" NS doc-curr-type
3686 .\" NS doc-macro-name
3688 .\" NS doc-saved-Pa-font
3690 .\" NS local variables:
3693 .\" NS doc-XXX-list-type
3695 .\" NS width register `It' set in doc-common
3697 .nr doc-bullet-list-type 1
3698 .nr doc-column-list-type 0
3699 .nr doc-dash-list-type 1
3700 .nr doc-diag-list-type 0
3701 .nr doc-enum-list-type 1
3702 .nr doc-hang-list-type 2
3703 .nr doc-inset-list-type 2
3704 .nr doc-item-list-type 1
3705 .nr doc-ohang-list-type 2
3706 .nr doc-tag-list-type 2
3709 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3711 . if "\*[doc-str-It]"" \
3712 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3714 . if \n[doc-nesting-level] \{\
3715 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3724 . ds doc-macro-name It
3726 . \" fill argument vector
3728 . while (\n[doc-reg-It] <= \n[.$]) \{\
3729 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3733 . nr doc-num-args \n[.$]
3737 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3739 . if \n[doc-reg-It] \{\
3741 . box doc-item-box\n[doc-list-depth]
3742 . ev doc-item-env\n[doc-list-depth]
3748 . ie (\n[doc-reg-It] == 1) \{\
3750 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3751 . tm1 " don't take arguments (#\n[.c])
3755 . if (\n[doc-reg-It] == 2) \{\
3756 . \" handle list types with arguments
3757 . doc-parse-arg-vector
3761 . nr doc-curr-type \n[doc-type1]
3762 . ds doc-curr-arg "\*[doc-arg1]
3764 . if \n[doc-in-files-section] \{\
3765 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3767 . ds doc-Pa-font "\*[doc-No-font]
3770 . ie (\n[doc-type1] == 1) \
3774 . doc-print-recursive
3777 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3778 . tm1 " require arguments (#\n[.c])
3782 . \" the previous call of `.doc-print-recursive' can contain calls to
3783 . \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
3784 . if !\n[doc-nesting-level] \
3785 . doc-\*[doc-str-It]
3789 .\" NS doc-inset-list macro
3790 .\" NS .It item of list-type inset
3796 . \" finish item box
3800 . unformat doc-item-box\n[doc-list-depth]
3802 . doc-set-vertical-and-indent 0
3806 . doc-item-box\n[doc-list-depth]
3808 . if \n[doc-in-files-section] \
3810 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3817 .\" NS doc-hang-list macro
3818 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3821 .\" NS doc-have-space
3824 .\" NS local variables:
3829 . \" finish item box
3833 . unformat doc-item-box\n[doc-list-depth]
3835 . doc-set-vertical-and-indent 1
3836 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3837 . ti -\n[doc-reg-dhl]u
3840 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3841 . doc-item-box\n[doc-list-depth]
3843 . chop doc-item-box\n[doc-list-depth]
3844 . nr doc-reg-dhl1 \n[.k]u
3845 . nop \*[doc-item-box\n[doc-list-depth]]\c
3846 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3847 . nr doc-have-space 1
3850 . if \n[doc-in-files-section] \
3852 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3859 .\" NS doc-ohang-list macro
3860 .\" NS .It item of list-type overhanging tag
3866 . \" finish item box
3870 . unformat doc-item-box\n[doc-list-depth]
3872 . doc-set-vertical-and-indent 0
3874 . doc-item-box\n[doc-list-depth]
3877 . if \n[doc-in-files-section] \
3879 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3886 .\" NS doc-item-list macro
3887 .\" NS .It item of list-type [empty tag]
3890 . \" finish (dummy) item box
3895 . doc-set-vertical-and-indent 0
3902 .\" NS doc-enum-list-count-stackXXX global register
3903 .\" NS stack of current enum count values
3906 .\" NS doc-list-depth
3908 .nr doc-enum-list-count-stack1 0
3911 .\" NS doc-enum-list macro
3912 .\" NS enumerated list
3915 .\" NS doc-enum-list-count-stackXXX
3920 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3922 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3924 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3925 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3930 .\" NS doc-bullet-list macro
3931 .\" NS bullet paragraph list
3938 . nop \)\*[doc-Sy-font]\[bu]\f[]
3943 .\" NS doc-dash-list macro
3944 .\" NS hyphen paragraph list (sub bullet list)
3951 . nop \)\*[doc-Sy-font]\-\f[]
3956 .\" NS doc-do-list macro
3957 .\" NS .It item of list-type enum/bullet/hyphen
3959 .als doc-do-list doc-hang-list
3962 .\" NS doc-diag-list-input-line-count global register
3963 .\" NS saved line number to be checked in next diag-list item
3965 .nr doc-diag-list-input-line-count 0
3968 .\" NS doc-diag-list macro
3969 .\" NS .It item of list-type diagnostic-message
3972 .\" NS doc-curr-font
3973 .\" NS doc-curr-size
3974 .\" NS doc-diag-list-input-line-count
3977 . nr doc-curr-font \n[.f]
3978 . nr doc-curr-size \n[.ps]
3980 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3981 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3988 . nr doc-diag-list-input-line-count \n[.c]
3991 . nop \*[doc-Sy-font]\c
3992 . if \n[doc-num-args] \
3993 . doc-remaining-args
3994 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
3996 . doc-print-and-reset
4000 .\" NS doc-tag-list macro
4001 .\" NS .It item of list-type `tag'
4004 .\" NS doc-have-space
4007 .\" NS local variables:
4013 . \" finish item box
4017 . unformat doc-item-box\n[doc-list-depth]
4019 . \" we use a box without `.nf' to compute the tag width (via `dl' register)
4026 . doc-item-box\n[doc-list-depth]
4031 . if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
4032 . if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4033 . in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4034 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
4038 . doc-set-vertical-and-indent 1
4039 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4040 . ti -\n[doc-reg-dtl]u
4043 . doc-item-box\n[doc-list-depth]
4044 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
4047 . \" format the tag separately to prevent stretching of spaces
4053 . nr doc-have-space 1
4056 . if \n[doc-in-files-section] \
4058 . ds doc-Pa-font "\*[doc-saved-Pa-font]
4065 .\" NS doc-get-tag-width macro
4066 .\" NS resolve unknown tag width (`tag' list-type only)
4069 .\" NS doc-list-indent-stackXXX
4070 .\" NS doc-tag-width-stackXXX
4074 .\" NS doc-curr-type
4076 .de doc-get-tag-width
4077 . ie (\n[doc-curr-type] == 1) \{\
4078 . ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
4079 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
4082 . ds doc-tag-width-stack\n[doc-list-depth] No
4083 . nr doc-list-indent-stack\n[doc-list-depth] \n[No]
4088 .\" NS doc-set-vertical-and-indent macro
4089 .\" NS set up vertical spacing (if not compact) and indentation (with
4090 .\" NS offset if argument is non-zero)
4093 .\" NS doc-list-have-indent-stackXXX
4095 .de doc-set-vertical-and-indent
4096 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4097 . sp \n[doc-display-vertical]u
4099 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4100 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4102 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4110 .\" NS doc-list-depth global register
4111 .\" NS list type stack counter
4113 .nr doc-list-depth 0
4116 .\" NS doc-num-columns global register
4117 .\" NS number of columns
4119 .nr doc-num-columns 0
4122 .\" NS doc-compact-list-stackXXX global register (bool)
4123 .\" NS stack of flags to indicate whether a particular list is compact
4126 .\" NS doc-list-depth
4128 .nr doc-compact-list-stack1 0
4131 .\" NS doc-tag-prefix-stackXXX global string
4132 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4135 .\" NS doc-list-depth
4137 .ds doc-tag-prefix-stack1
4140 .\" NS doc-tag-width-stackXXX global string
4141 .\" NS stack of strings indicating how to set up current element of
4142 .\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
4143 .\" NS directly; if it is a macro name, use the macro's width value;
4144 .\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
4147 .\" NS doc-list-depth
4149 .ds doc-tag-width-stack0
4150 .ds doc-tag-width-stack1
4153 .\" NS doc-list-offset-stackXXX global register
4154 .\" NS stack of list offsets
4157 .\" NS doc-list-depth
4159 .nr doc-list-offset-stack1 0
4162 .\" NS doc-end-list macro
4163 .\" NS list end function; resets indentation (and offset if argument is
4167 .\" NS doc-list-depth
4168 .\" NS doc-list-offset-stackXXX
4172 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4174 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4176 . if (\n[doc-list-depth] <= 0) \
4177 . tm mdoc warning: extraneous .El call (#\n[.c])
4179 . doc-decrement-list-stack
4180 . nr doc-list-depth -1
4184 .\" NS doc-increment-list-stack macro
4185 .\" NS set up next block for list
4188 .\" NS doc-compact-list-stackXXX
4189 .\" NS doc-list-have-indent-stackXXX
4190 .\" NS doc-list-indent-stackXXX
4191 .\" NS doc-list-offset-stackXXX
4192 .\" NS doc-list-type-stackXXX
4193 .\" NS doc-tag-prefix-stackXXX
4194 .\" NS doc-tag-width-stackXXX
4195 .\" NS doc-enum-list-count-stackXXX
4197 .\" NS local variables:
4200 .de doc-increment-list-stack
4201 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4202 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4203 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4204 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4205 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4206 . ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
4207 . ds doc-list-type-stack\n[doc-reg-dils]
4208 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4209 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4213 .\" NS doc-decrement-list-stack macro
4214 .\" NS decrement stack
4217 .\" NS doc-compact-list-stackXXX
4218 .\" NS doc-list-have-indent-stackXXX
4219 .\" NS doc-list-indent-stackXXX
4220 .\" NS doc-list-offset-stackXXX
4221 .\" NS doc-list-type-stackXXX
4222 .\" NS doc-tag-prefix-stackXXX
4223 .\" NS doc-tag-width-stackXXX
4224 .\" NS doc-enum-list-count-stackXXX
4226 .de doc-decrement-list-stack
4227 . ds doc-list-type-stack\n[doc-list-depth]
4228 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4229 . nr doc-list-indent-stack\n[doc-list-depth] 0
4230 . nr doc-list-offset-stack\n[doc-list-depth] 0
4231 . ds doc-tag-prefix-stack\n[doc-list-depth]
4232 . ds doc-tag-width-stack\n[doc-list-depth]
4233 . nr doc-compact-list-stack\n[doc-list-depth] 0
4234 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4238 .\" NS Xr user macro
4239 .\" NS cross reference (for man pages only)
4243 .\" NS doc-macro-name
4245 .\" NS local variables:
4248 .\" NS width register `Xr' set in doc-common
4251 . if !\n[doc-arg-limit] \{\
4253 . ds doc-macro-name Xr
4254 . doc-parse-args \$@
4260 . if !\n[doc-arg-limit] \
4264 . doc-print-prefixes
4265 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4266 . \" first argument must be a string
4267 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4268 . nr doc-curr-font \n[.f]
4269 . nr doc-curr-size \n[.ps]
4270 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4272 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4273 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4274 . \" modify second argument if it is a string and
4275 . \" remove space in between
4276 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4277 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4278 . ds doc-space\n[doc-arg-ptr]
4281 . doc-print-recursive
4291 .\" NS doc-Xr-usage macro
4294 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4299 .\" NS Sx user macro
4300 .\" NS cross section reference
4302 .\" NS width register `Sx' set in doc-common
4304 .als Sx doc-generic-macro
4305 .ds doc-Sx-usage section_header
4308 .\" NS doc-end-column-list macro
4309 .\" NS column-list end-list
4312 .\" NS doc-list-depth
4314 .de doc-end-column-list
4316 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4319 . doc-decrement-list-stack
4320 . nr doc-list-depth -1
4324 .\" NS doc-column-indent-width global register
4325 .\" NS holds the indent width for a column list
4327 .nr doc-column-indent-width 0
4330 .\" NS doc-set-column-tab macro
4331 .\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
4334 .\" NS doc-column-indent-width
4336 .\" NS local variables:
4339 .\" NS doc-str-dsct1
4341 .de doc-set-column-tab
4344 . nr doc-column-indent-width 0
4347 . ds doc-str-dsct1 " \"
4350 . ds doc-str-dsct1 " \"
4352 . \" XXX: this is packed abnormally close -- intercolumn width
4353 . \" should be configurable
4354 . ds doc-str-dsct1 " \"
4357 . while (\n[doc-reg-dsct] <= \$1) \{\
4358 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4359 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4360 . nr doc-reg-dsct +1
4363 . ta \*[doc-str-dsct]
4364 ' in +\n[doc-column-indent-width]u
4368 .\" NS doc-column-list macro
4373 .\" NS doc-list-indent-stackXXX
4376 .\" NS local variables:
4380 . if \n[doc-num-args] \
4381 . doc-parse-arg-vector
4384 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4385 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4389 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4390 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4391 . ds doc-space\n[doc-reg-dcl]
4394 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4395 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4398 . in +\n[doc-column-indent-width]u
4400 . ti -\n[doc-column-indent-width]u
4402 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4406 .\" NS Ta user macro
4407 .\" NS append tab (\t)
4412 .\" NS width register `Ta' set in doc-common
4415 . ie \n[doc-arg-limit] \{\
4418 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4419 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4424 . tm1 "Usage: Ta must follow column entry: e.g.
4425 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4430 .\" NS Dl user macro
4431 .\" NS display (one line) literal
4433 .\" NS this function uses the `Li' font
4437 .\" NS doc-curr-font
4438 .\" NS doc-curr-size
4439 .\" NS doc-macro-name
4441 .\" NS width register `Dl' set in doc-common
4445 . in +\n[doc-display-indent]u
4447 . ie \n[doc-arg-limit] \{\
4448 . tm Usage: .Dl not callable by other macros (#\n[.c])
4453 . ds doc-macro-name Dl
4454 . doc-parse-args \$@
4456 . nr doc-curr-font \n[.f]
4457 . nr doc-curr-size \n[.ps]
4458 . nop \*[doc-Li-font]\c
4459 . doc-print-recursive
4462 . tm Usage: .Dl argument ... (#\n[.c])
4465 . in -\n[doc-display-indent]u
4469 .\" NS D1 user macro
4470 .\" NS display (one line)
4474 .\" NS doc-macro-name
4476 .\" NS width register `D1' set in doc-common
4480 . in +\n[doc-display-indent]u
4482 . ie \n[doc-arg-limit] \{\
4483 . tm Usage: .D1 not callable by other macros (#\n[.c])
4488 . ds doc-macro-name D1
4489 . doc-parse-args \$@
4491 . doc-print-recursive
4494 . tm Usage: .D1 argument ... (#\n[.c])
4497 . in -\n[doc-display-indent]u
4501 .\" NS Vt user macro
4502 .\" NS variable type (for forcing old style variable declarations);
4503 .\" NS this is not done in the same manner as .Ot for fortrash --
4504 .\" NS clean up later
4507 .\" NS doc-curr-font
4508 .\" NS doc-curr-size
4509 .\" NS doc-have-decl
4511 .\" NS doc-macro-name
4513 .\" NS width register `Vt' set in doc-common
4516 . if !\n[doc-arg-limit] \{\
4518 . ds doc-macro-name Vt
4519 . doc-parse-args \$@
4522 . tm Usage: .Vt variable_type ... (#\n[.c])
4525 . if !\n[doc-arg-limit] \
4529 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4530 . tm Usage: .Vt variable_type ... (#\n[.c])
4535 . if \n[doc-in-synopsis-section] \{\
4536 . \" if a function declaration was the last thing given,
4537 . \" want vertical space
4538 . if \n[doc-have-decl] \{\
4540 . nr doc-have-decl 0
4543 . \" if a subroutine was the last thing given, want vertical space
4544 . if \n[doc-have-func] \{\
4545 . ie \n[doc-have-var] \
4554 . nr doc-curr-font \n[.f]
4555 . nr doc-curr-size \n[.ps]
4556 . nop \*[doc-Ft-font]\c
4557 . doc-print-recursive
4559 . if \n[doc-in-synopsis-section] \{\
4560 . ie \n[doc-have-old-func] \
4561 . nop \*[doc-soft-space]\c
4568 .\" NS doc-is-func global register (bool)
4569 .\" NS set if subroutine (in synopsis only) (fortran only)
4574 .\" NS Ft user macro
4575 .\" NS function type
4578 .\" NS doc-curr-font
4579 .\" NS doc-curr-size
4580 .\" NS doc-have-decl
4583 .\" NS doc-macro-name
4585 .\" NS width register `Ft' set in doc-common
4588 . if !\n[doc-arg-limit] \{\
4590 . ds doc-macro-name Ft
4591 . doc-parse-args \$@
4594 . tm Usage: .Ft function_type ... (#\n[.c])
4597 . if !\n[doc-arg-limit] \
4601 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4602 . tm Usage: .Ft function_type ... (#\n[.c])
4607 . if \n[doc-in-synopsis-section] \{\
4608 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4610 . nr doc-have-decl 0
4614 . if \n[doc-have-var] \{\
4622 . nr doc-curr-font \n[.f]
4623 . nr doc-curr-size \n[.ps]
4624 . nop \*[doc-Ft-font]\c
4625 . doc-print-recursive
4629 .\" NS doc-have-old-func global register (bool)
4630 .\" NS set if `Ot' has been called
4632 .nr doc-have-old-func 0
4635 .\" NS Ot user macro
4636 .\" NS old function type (fortran -- no newline)
4639 .\" NS doc-have-decl
4640 .\" NS doc-have-old-func
4644 .\" NS width register `Ot' set in doc-common
4647 . nr doc-have-old-func 1
4649 . if \n[doc-in-synopsis-section] \{\
4650 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4652 . nr doc-have-decl 0
4656 . if \n[doc-have-var] \{\
4665 . nop \*[doc-Ft-font]\$*\c
4670 .\" NS Fa user macro
4671 .\" NS function arguments
4675 .\" NS doc-curr-font
4676 .\" NS doc-curr-size
4677 .\" NS doc-macro-name
4679 .\" NS width register `Fa' set in doc-common
4682 . if !\n[doc-arg-limit] \{\
4684 . ds doc-macro-name Fa
4685 . doc-parse-args \$@
4688 . tm Usage: .Fa function_arguments ... (#\n[.c])
4691 . ie \n[doc-func-arg-count] \
4695 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4696 . nr doc-curr-font \n[.f]
4697 . nr doc-curr-size \n[.ps]
4698 . nop \*[doc-Fa-font]\c
4699 . doc-print-recursive
4701 . if \n[doc-in-synopsis-section] \
4702 . if \n[doc-have-func] \
4708 .\" NS doc-func-arg-count global register
4709 .\" NS how many function arguments have been processed so far
4711 .nr doc-func-arg-count 0
4714 .\" NS doc-func-arg global string
4715 .\" NS work buffer for function name strings
4720 .\" NS doc-num-func-args global register
4721 .\" NS number of function arguments
4723 .nr doc-num-func-args 0
4726 .\" NS doc-func-args-processed global register
4727 .\" NS function arguments processed so far
4729 .nr doc-func-args-processed 0
4732 .\" NS doc-do-func macro
4733 .\" NS internal .Fa for .Fc
4739 .\" NS doc-func-arg-count
4740 .\" NS doc-func-args-processed
4741 .\" NS doc-num-func-args
4744 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4752 . nr doc-num-func-args 0
4753 . nr doc-func-args-processed 0
4755 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4756 . if (\n[doc-num-func-args] > 1) \
4757 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4759 . if (\n[doc-func-arg-count] > 1) \{\
4760 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4761 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4762 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4764 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4765 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4768 . if (\n[doc-func-arg-count] == 1) \{\
4769 . nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4772 . nr doc-func-arg-count +1
4777 .\" NS doc-have-func global register (bool)
4778 .\" NS whether we have more than one function in synopsis
4783 .\" NS Fn user macro
4788 .\" NS doc-curr-font
4789 .\" NS doc-curr-size
4790 .\" NS doc-have-decl
4791 .\" NS doc-have-func
4793 .\" NS doc-indent-synopsis
4795 .\" NS doc-macro-name
4797 .\" NS width register `Fn' set in doc-common
4800 . if !\n[doc-arg-limit] \{\
4802 . ds doc-macro-name Fn
4803 . doc-parse-args \$@
4806 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4809 . if !\n[doc-arg-limit] \
4812 . if \n[doc-in-synopsis-section] \{\
4813 . \" if there is/has been more than one subroutine declaration
4814 . ie \n[doc-is-func] \{\
4817 . nr doc-have-decl 0
4821 . if \n[doc-have-func] \{\
4824 . nr doc-have-decl 0
4827 . if \n[doc-have-decl] \{\
4832 . if \n[doc-have-var] \{\
4834 . nr doc-have-decl 0
4837 . nr doc-have-func 1
4841 . if !\n[doc-indent-synopsis] \
4842 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
4843 . if !\n[doc-indent-synopsis-active] \
4844 . in +\n[doc-indent-synopsis]u
4845 . ti -\n[doc-indent-synopsis]u
4849 . doc-print-prefixes
4850 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4851 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4856 . nr doc-curr-font \n[.f]
4857 . nr doc-curr-size \n[.ps]
4858 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4859 . nop \f[]\s[0]\*[lp]\)\c
4862 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4863 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4864 . nop \*[doc-Fa-font]\c
4866 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4870 . if \n[doc-in-synopsis-section] \
4873 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4874 . \" output the space (if needed)
4876 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4879 . doc-print-recursive
4882 . doc-print-and-reset
4884 . if \n[doc-in-synopsis-section] \
4885 . if !\n[doc-indent-synopsis-active] \
4886 . in -\n[doc-indent-synopsis]u
4890 .\" NS doc-do-func-args macro
4891 .\" NS handle function arguments
4897 .\" NS doc-func-args-processed
4898 .\" NS doc-num-func-args
4900 .\" NS local variables:
4903 .de doc-do-func-args
4904 . if \n[doc-in-synopsis-section] \{\
4906 . nr doc-num-func-args 0
4907 . nr doc-func-args-processed 0
4909 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4910 . if (\n[doc-num-func-args] > 1) \
4911 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4914 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4917 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4918 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4919 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4920 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4921 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4922 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4924 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4930 .\" NS doc-saved-nesting-level global register
4932 .nr doc-saved-nesting-level 0
4935 .\" NS doc-in-func-enclosure global register (bool)
4937 .nr doc-in-func-enclosure 0
4940 .\" NS Fo user macro
4941 .\" NS function open
4945 .\" NS doc-curr-font
4946 .\" NS doc-curr-size
4947 .\" NS doc-func-arg-count
4948 .\" NS doc-have-decl
4949 .\" NS doc-have-func
4951 .\" NS doc-in-func-enclosure
4952 .\" NS doc-indent-synopsis
4954 .\" NS doc-macro-name
4955 .\" NS doc-saved-nesting-level
4957 .\" NS width register `Fo' set in doc-common
4960 . if (\n[doc-in-func-enclosure]) \{\
4961 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4965 . nr doc-saved-nesting-level \n[doc-nesting-level]
4966 . nr doc-in-func-enclosure 1
4968 . if !\n[doc-arg-limit] \{\
4970 . ds doc-macro-name Fo
4971 . doc-parse-args \$@
4974 . tm Usage: .Fo function_name (#\n[.c])
4977 . if \n[doc-in-synopsis-section] \{\
4978 . \" if there is/has been more than one subroutine declaration
4979 . ie \n[doc-is-func] \{\
4982 . nr doc-have-decl 0
4986 . if \n[doc-have-func] \{\
4989 . nr doc-have-decl 0
4992 . if \n[doc-have-decl] \{\
4997 . if \n[doc-have-var] \{\
4999 . nr doc-have-decl 0
5002 . nr doc-have-func 1
5006 . if !\n[doc-indent-synopsis] \
5007 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
5010 . \" start function box
5018 . doc-print-prefixes
5019 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5020 . nr doc-func-arg-count 1
5021 . nr doc-curr-font \n[.f]
5022 . nr doc-curr-size \n[.ps]
5024 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
5025 . nop \f[]\s[0]\*[lp]\)\c
5031 .\" NS Fc user macro
5032 .\" NS function close
5036 .\" NS doc-func-arg-count
5037 .\" NS doc-in-func-enclosure
5038 .\" NS doc-saved-nesting-level
5039 .\" NS doc-macro-name
5041 .\" NS width register `Fc' set in doc-common
5044 . if !\n[doc-in-func-enclosure] \{\
5045 . tm mdoc warning: Extraneous .Fc (#\n[.c])
5050 . ds doc-macro-name Fc
5051 . \" the first (dummy) argument is used to get the correct spacing
5052 . doc-parse-args \) \$@
5055 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
5056 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
5058 . nr doc-func-arg-count 0
5059 . nr doc-in-func-enclosure 0
5061 . ie \n[doc-in-synopsis-section] \
5066 . \" finish function box
5071 . unformat doc-func-box
5073 . if \n[doc-in-synopsis-section] \{\
5074 . if !\n[doc-indent-synopsis-active] \
5075 . in +\n[doc-indent-synopsis]u
5076 . ti -\n[doc-indent-synopsis]u
5080 . nop \*[doc-func-box]\c
5083 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5084 . nr doc-curr-font \n[.f]
5085 . nr doc-curr-size \n[.ps]
5086 . doc-print-recursive
5089 . doc-print-and-reset
5091 . if \n[doc-in-synopsis-section] \
5092 . if !\n[doc-indent-synopsis-active] \
5093 . in -\n[doc-indent-synopsis]u
5097 .\" NS doc-build-func-string macro
5098 .\" NS collect function arguments and set hard spaces in between
5102 .\" NS doc-func-args-processed
5103 .\" NS doc-num-func-args
5105 .de doc-build-func-string
5106 . if !\n[doc-num-func-args] \{\
5107 . nr doc-num-func-args \n[.$]
5108 . nr doc-func-args-processed 0
5112 . nr doc-func-args-processed +1
5113 . as doc-func-arg "\$1
5115 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5116 . as doc-func-arg "\*[doc-hard-space]
5119 . doc-build-func-string \$@
5124 .\" Very crude references: Stash all reference info into boxes, print out
5125 .\" reference on .Re macro and clean up. Ordering very limited, no fancy
5126 .\" citations, but can do articles, journals, and books -- need to add
5127 .\" several missing options (like city etc). Should be able to grab a refer
5128 .\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
5132 .\" NS doc-is-reference global register (bool)
5133 .\" NS set if in reference
5135 .nr doc-is-reference 0
5138 .\" NS doc-reference-count global register
5139 .\" NS reference element counter
5141 .nr doc-reference-count 0
5144 .\" NS Rs user macro
5145 .\" NS reference start
5148 .\" NS doc-is-reference
5149 .\" NS doc-reference-count
5151 .\" NS width register `Rs' set in doc-common
5155 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5157 . nr doc-is-reference 1
5158 . doc-reset-reference
5159 . if \n[doc-in-see-also-section] \
5161 . nr doc-reference-count 0
5166 .\" NS Re user macro
5167 .\" NS reference end
5170 .\" NS doc-is-reference
5172 .\" NS width register `Re' set in doc-common
5176 . tm Usage: .Re (does not take arguments) (#\n[.c])
5178 . if !\n[doc-is-reference] \{\
5179 . tm mdoc warning: Extraneous .Re (#\n[.c])
5182 . doc-print-reference
5183 . doc-reset-reference
5184 . nr doc-is-reference 0
5189 .\" NS doc-reset-reference macro
5190 .\" NS reference cleanup
5193 .\" NS doc-author-count
5194 .\" NS doc-author-nameXXX
5195 .\" NS doc-book-count
5196 .\" NS doc-book-name
5197 .\" NS doc-city-count
5198 .\" NS doc-city-name
5199 .\" NS doc-corporate-count
5200 .\" NS doc-corporate-name
5202 .\" NS doc-date-count
5203 .\" NS doc-issue-count
5204 .\" NS doc-issue-name
5205 .\" NS doc-journal-count
5206 .\" NS doc-journal-name
5207 .\" NS doc-optional-count
5208 .\" NS doc-optional-string
5209 .\" NS doc-page-number-count
5210 .\" NS doc-page-number-string
5211 .\" NS doc-publisher-count
5212 .\" NS doc-publisher-name
5213 .\" NS doc-reference-count
5214 .\" NS doc-reference-title-count
5215 .\" NS doc-reference-title-name
5216 .\" NS doc-reference-title-name-for-book
5217 .\" NS doc-report-count
5218 .\" NS doc-report-name
5219 .\" NS doc-url-count
5221 .\" NS doc-volume-count
5222 .\" NS doc-volume-name
5224 .de doc-reset-reference
5225 . while (\n[doc-author-count]) \{\
5226 . ds doc-author-name\n[doc-author-count]
5227 . nr doc-author-count -1
5229 . nr doc-journal-count 0
5230 . nr doc-issue-count 0
5231 . nr doc-optional-count 0
5232 . nr doc-corporate-count 0
5233 . nr doc-report-count 0
5234 . nr doc-reference-title-count 0
5235 . nr doc-url-count 0
5236 . nr doc-volume-count 0
5237 . nr doc-city-count 0
5238 . nr doc-date-count 0
5239 . nr doc-page-number-count 0
5240 . nr doc-book-count 0
5241 . nr doc-publisher-count 0
5242 . nr doc-reference-count 0
5244 . ds doc-journal-name
5246 . ds doc-optional-string
5247 . ds doc-corporate-name
5248 . ds doc-report-name
5249 . ds doc-reference-title-name
5250 . ds doc-reference-title-name-for-book
5252 . ds doc-volume-name
5255 . ds doc-page-number-string
5257 . ds doc-publisher-name
5261 .\" NS doc-finish-reference macro
5262 .\" NS auxiliary macro for doc-print-reference
5265 .\" NS doc-reference-count
5267 .de doc-finish-reference
5268 . nr doc-reference-count -\$1
5269 . ie \n[doc-reference-count] \
5276 .\" NS doc-print-reference macro
5277 .\" NS reference print
5280 .\" NS doc-reference-count
5282 .de doc-print-reference
5286 . if \n[doc-author-count] \{\
5287 . doc-print-reference-authors
5288 . nr doc-reference-count -\n[doc-author-count]
5291 . if \n[doc-reference-title-count] \{\
5292 . unformat doc-reference-title-name
5293 . chop doc-reference-title-name
5294 . unformat doc-reference-title-name-for-book
5295 . chop doc-reference-title-name-for-book
5296 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5297 . nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
5298 . doc-finish-reference \n[doc-reference-title-count]
5301 . nop \*[doc-reference-title-name]\c
5302 . doc-finish-reference \n[doc-reference-title-count]
5305 . if \n[doc-book-count] \{\
5306 . unformat doc-book-name
5307 . chop doc-book-name
5308 . nop \*[doc-book-name]\c
5309 . doc-finish-reference \n[doc-book-count]
5312 . if \n[doc-publisher-count] \{\
5313 . unformat doc-publisher-name
5314 . chop doc-publisher-name
5315 . nop \*[doc-publisher-name]\c
5316 . doc-finish-reference \n[doc-publisher-count]
5319 . if \n[doc-journal-count] \{\
5320 . unformat doc-journal-name
5321 . chop doc-journal-name
5322 . nop \*[doc-journal-name]\c
5323 . doc-finish-reference \n[doc-journal-count]
5326 . if \n[doc-report-count] \{\
5327 . unformat doc-report-name
5328 . chop doc-report-name
5329 . nop \*[doc-report-name]\c
5330 . doc-finish-reference \n[doc-report-count]
5333 . if \n[doc-issue-count] \{\
5334 . unformat doc-issue-name
5335 . chop doc-issue-name
5336 . nop \*[doc-issue-name]\c
5337 . doc-finish-reference \n[doc-issue-count]
5340 . if \n[doc-volume-count] \{\
5341 . unformat doc-volume-name
5342 . chop doc-volume-name
5343 . nop \*[doc-volume-name]\c
5344 . doc-finish-reference \n[doc-volume-count]
5347 . if \n[doc-url-count] \{\
5348 . unformat doc-url-name
5350 . nop \*[doc-url-name]\c
5351 . doc-finish-reference \n[doc-url-count]
5354 . if \n[doc-page-number-count] \{\
5355 . unformat doc-page-number-string
5356 . chop doc-page-number-string
5357 . nop \*[doc-page-number-string]\c
5358 . doc-finish-reference \n[doc-page-number-count]
5361 . if \n[doc-corporate-count] \{\
5362 . unformat doc-corporate-name
5363 . chop doc-corporate-name
5364 . nop \*[doc-corporate-name]\c
5365 . doc-finish-reference \n[doc-corporate-count]
5368 . if \n[doc-city-count] \{\
5369 . unformat doc-city-name
5370 . chop doc-city-name
5371 . nop \*[doc-city-name]\c
5372 . doc-finish-reference \n[doc-city-count]
5375 . if \n[doc-date-count] \{\
5378 . nop \*[doc-date]\c
5379 . doc-finish-reference \n[doc-date-count]
5382 . if \n[doc-optional-count] \{\
5383 . unformat doc-optional-string
5384 . chop doc-optional-string
5385 . nop \*[doc-optional-string]\c
5386 . doc-finish-reference \n[doc-optional-count]
5389 . if \n[doc-reference-count] \
5390 . tm mdoc warning: unresolved reference problem
5392 . hy \n[doc-hyphen-flags]
5396 .\" NS doc-print-reference-authors macro
5397 .\" NS print out reference authors
5399 .\" NS local variables:
5403 .ds doc-str-dpra "and
5405 .de doc-print-reference-authors
5408 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5409 . unformat doc-author-name\n[doc-reg-dpra]
5410 . chop doc-author-name\n[doc-reg-dpra]
5411 . ie (\n[doc-author-count] > 2) \
5412 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5414 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5415 . nr doc-reg-dpra +1
5418 . unformat doc-author-name\n[doc-reg-dpra]
5419 . chop doc-author-name\n[doc-reg-dpra]
5420 . if (\n[doc-author-count] > 1) \
5421 . nop \)\*[doc-str-dpra]
5422 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5426 .\" NS doc-author-count global register
5427 .\" NS counter of author references
5429 .nr doc-author-count 0
5432 .\" NS doc-author-nameXXX global box
5433 .\" NS array of author names
5436 .\" NS doc-author-count
5438 .ds doc-author-name0
5441 .\" NS %A user macro
5442 .\" NS reference author(s)
5446 .\" NS doc-author-count
5447 .\" NS doc-curr-font
5448 .\" NS doc-curr-size
5449 .\" NS doc-macro-name
5450 .\" NS doc-reference-count
5452 .\" NS local variables:
5455 .\" NS width register `%A' set in doc-common
5458 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5459 . tm Usage: .%A author_name ... (#\n[.c])
5463 . nr doc-author-count +1
5464 . nr doc-reference-count +1
5466 . ds doc-macro-name %A
5467 . doc-parse-args \$@
5470 . nr doc-curr-font \n[.f]
5471 . nr doc-curr-size \n[.ps]
5473 . \" save to reference box
5474 . box doc-author-name\n[doc-author-count]
5483 .\" NS doc-book-count global register
5484 .\" NS counter of book references
5486 .nr doc-book-count 0
5489 .\" NS doc-book-name global box
5490 .\" NS string of collected book references
5495 .\" NS %B user macro
5496 .\" NS [reference] book name
5500 .\" NS doc-book-count
5501 .\" NS doc-curr-font
5502 .\" NS doc-curr-size
5503 .\" NS doc-macro-name
5504 .\" NS doc-reference-count
5506 .\" NS local variables:
5509 .\" NS width register `%B' set in doc-common
5512 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5513 . tm Usage: .%B book_name ... (#\n[.c])
5517 . if \n[doc-is-reference] \{\
5518 . nr doc-book-count +1
5519 . nr doc-reference-count +1
5522 . ds doc-macro-name %B
5523 . doc-parse-args \$@
5526 . nr doc-curr-font \n[.f]
5527 . nr doc-curr-size \n[.ps]
5529 . ie \n[doc-is-reference] \{\
5530 . \" append to reference box
5531 . boxa doc-book-name
5536 . nop \*[doc-Em-font]\c
5540 . nop \*[doc-Em-font]\c
5541 . doc-print-recursive
5546 .\" NS doc-city-count global register
5547 .\" NS counter of city references
5549 .nr doc-city-count 0
5552 .\" NS doc-city-name global box
5553 .\" NS string of collected city references
5558 .\" NS %C user macro
5559 .\" NS [reference] city
5563 .\" NS doc-curr-font
5564 .\" NS doc-curr-size
5565 .\" NS doc-city-count
5566 .\" NS doc-macro-name
5567 .\" NS doc-reference-count
5569 .\" NS local variables:
5572 .\" NS width register `%C' set in doc-common
5575 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5576 . tm Usage: .%C city_name ... (#\n[.c])
5580 . nr doc-city-count +1
5581 . nr doc-reference-count +1
5583 . ds doc-macro-name %C
5584 . doc-parse-args \$@
5587 . nr doc-curr-font \n[.f]
5588 . nr doc-curr-size \n[.ps]
5590 . \" append to reference box
5591 . boxa doc-city-name
5600 .\" NS doc-date-count global register
5601 .\" NS counter of date references
5603 .nr doc-date-count 0
5606 .\" NS doc-date global box
5607 .\" NS string of collected date references
5612 .\" NS %D user macro
5613 .\" NS [reference] date
5617 .\" NS doc-curr-font
5618 .\" NS doc-curr-size
5619 .\" NS doc-date-count
5620 .\" NS doc-macro-name
5621 .\" NS doc-reference-count
5623 .\" NS local variables:
5626 .\" NS width register `%D' set in doc-common
5629 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5630 . tm Usage: .%D date ... (#\n[.c])
5634 . nr doc-date-count +1
5635 . nr doc-reference-count +1
5637 . ds doc-macro-name %D
5638 . doc-parse-args \$@
5641 . nr doc-curr-font \n[.f]
5642 . nr doc-curr-size \n[.ps]
5644 . \" append to reference box
5654 .\" NS doc-publisher-count global register
5655 .\" NS counter of publisher references
5657 .nr doc-publisher-count 0
5660 .\" NS doc-publisher-name global box
5661 .\" NS string of collected publisher references
5663 .ds doc-publisher-name
5666 .\" NS %I user macro
5667 .\" NS [reference] issuer/publisher name
5671 .\" NS doc-curr-font
5672 .\" NS doc-curr-size
5673 .\" NS doc-macro-name
5674 .\" NS doc-publisher-count
5675 .\" NS doc-reference-count
5677 .\" NS local variables:
5680 .\" NS width register `%I' set in doc-common
5683 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5684 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5688 . nr doc-publisher-count +1
5689 . nr doc-reference-count +1
5691 . ds doc-macro-name %I
5692 . doc-parse-args \$@
5695 . nr doc-curr-font \n[.f]
5696 . nr doc-curr-size \n[.ps]
5698 . \" append to reference box
5699 . boxa doc-publisher-name
5704 . nop \*[doc-Em-font]\c
5709 .\" NS doc-journal-count global register
5710 .\" NS counter of journal references
5712 .nr doc-journal-count 0
5715 .\" NS doc-journal-name global box
5716 .\" NS string of collected journal references
5718 .ds doc-journal-name
5721 .\" NS %J user macro
5722 .\" NS [reference] Journal Name
5726 .\" NS doc-curr-font
5727 .\" NS doc-curr-size
5728 .\" NS doc-journal-count
5729 .\" NS doc-macro-name
5730 .\" NS doc-reference-count
5732 .\" NS local variables:
5735 .\" NS width register `%J' set in doc-common
5738 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5739 . tm Usage: .%J journal_name ... (#\n[.c])
5743 . nr doc-journal-count +1
5744 . nr doc-reference-count +1
5746 . ds doc-macro-name %J
5747 . doc-parse-args \$@
5750 . nr doc-curr-font \n[.f]
5751 . nr doc-curr-size \n[.ps]
5753 . \" append to reference box
5754 . boxa doc-journal-name
5759 . nop \*[doc-Em-font]\c
5764 .\" NS doc-issue-count global register
5765 .\" NS counter of issue number references
5767 .nr doc-issue-count 0
5770 .\" NS doc-issue-name global box
5771 .\" NS string of collected issue number references
5776 .\" NS %N user macro
5777 .\" NS [reference] issue number
5781 .\" NS doc-curr-font
5782 .\" NS doc-curr-size
5783 .\" NS doc-issue-count
5784 .\" NS doc-macro-name
5785 .\" NS doc-reference-count
5787 .\" NS local variables:
5790 .\" NS width register `%N' set in doc-common
5793 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5794 . tm Usage: .%N issue_number ... (#\n[.c])
5798 . nr doc-issue-count +1
5799 . nr doc-reference-count +1
5801 . ds doc-macro-name %N
5802 . doc-parse-args \$@
5805 . nr doc-curr-font \n[.f]
5806 . nr doc-curr-size \n[.ps]
5808 . \" append to reference box
5809 . boxa doc-issue-name
5818 .\" NS doc-optional-count global register
5819 .\" NS counter of optional information references
5821 .nr doc-optional-count 0
5824 .\" NS doc-optional-string global box
5825 .\" NS string of collected optional information references
5827 .ds doc-optional-string
5830 .\" NS %O user macro
5831 .\" NS [reference] optional information
5835 .\" NS doc-curr-font
5836 .\" NS doc-curr-size
5837 .\" NS doc-macro-name
5838 .\" NS doc-optional-count
5839 .\" NS doc-reference-count
5841 .\" NS local variables:
5844 .\" NS width register `%O' set in doc-common
5847 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5848 . tm Usage: .%O optional_information ... (#\n[.c])
5852 . nr doc-optional-count +1
5853 . nr doc-reference-count +1
5855 . ds doc-macro-name %O
5856 . doc-parse-args \$@
5859 . nr doc-curr-font \n[.f]
5860 . nr doc-curr-size \n[.ps]
5862 . \" append to reference box
5863 . boxa doc-optional-string
5872 .\" NS doc-page-number-count global register
5873 .\" NS counter of page number references
5875 .nr doc-page-number-count 0
5878 .\" NS doc-page-number-string global box
5879 .\" NS string of collected page number references
5881 .ds doc-page-number-string
5884 .\" NS %P user macro
5885 .\" NS [reference] page numbers
5889 .\" NS doc-curr-font
5890 .\" NS doc-curr-size
5891 .\" NS doc-macro-name
5892 .\" NS doc-page-number-count
5893 .\" NS doc-reference-count
5895 .\" NS local variables:
5898 .\" NS width register `%P' set in doc-common
5901 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5902 . tm Usage: .%P page_number ... (#\n[.c])
5906 . nr doc-page-number-count +1
5907 . nr doc-reference-count +1
5909 . ds doc-macro-name %P
5910 . doc-parse-args \$@
5913 . nr doc-curr-font \n[.f]
5914 . nr doc-curr-size \n[.ps]
5916 . \" append to reference box
5917 . boxa doc-page-number-string
5926 .\" NS doc-corporate-count global register
5927 .\" NS counter of corporate references
5929 .nr doc-corporate-count 0
5932 .\" NS doc-corporate-name global box
5933 .\" NS string of collected corporate references
5935 .ds doc-corporate-name
5938 .\" NS %Q user macro
5939 .\" NS corporate or foreign author
5943 .\" NS doc-corporate-count
5944 .\" NS doc-curr-font
5945 .\" NS doc-curr-size
5946 .\" NS doc-macro-name
5947 .\" NS doc-reference-count
5949 .\" NS local variables:
5952 .\" NS width register `%Q' set in doc-common
5955 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5956 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5960 . nr doc-corporate-count +1
5961 . nr doc-reference-count +1
5963 . ds doc-macro-name %Q
5964 . doc-parse-args \$@
5967 . nr doc-curr-font \n[.f]
5968 . nr doc-curr-size \n[.ps]
5970 . \" append to reference box
5971 . boxa doc-corporate-name
5980 .\" NS doc-report-count global register
5981 .\" NS counter of report references
5983 .nr doc-report-count 0
5986 .\" NS doc-report-name global box
5987 .\" NS string of collected report references
5992 .\" NS %R user macro
5993 .\" NS [reference] report name
5997 .\" NS doc-curr-font
5998 .\" NS doc-curr-size
5999 .\" NS doc-macro-name
6000 .\" NS doc-reference-count
6001 .\" NS doc-report-count
6003 .\" NS local variables:
6006 .\" NS width register `%R' set in doc-common
6009 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6010 . tm Usage: .%R reference_report ... (#\n[.c])
6014 . nr doc-report-count +1
6015 . nr doc-reference-count +1
6017 . ds doc-macro-name %R
6018 . doc-parse-args \$@
6021 . nr doc-curr-font \n[.f]
6022 . nr doc-curr-size \n[.ps]
6024 . \" append to reference box
6025 . boxa doc-report-name
6034 .\" NS doc-reference-title-count global register
6035 .\" NS counter of reference title references
6037 .nr doc-reference-title-count 0
6040 .\" NS doc-reference-title-name global box
6041 .\" NS string of collected reference title references
6043 .ds doc-reference-title-name
6046 .\" NS doc-reference-title-name-for-book global box
6047 .\" NS string of collected reference title references
6048 .\" NS (saved with another font; this is a shortcoming of groff)
6050 .ds doc-reference-title-name-for-book
6053 .\" NS %T user macro
6054 .\" NS reference title
6058 .\" NS doc-curr-font
6059 .\" NS doc-curr-size
6060 .\" NS doc-macro-name
6061 .\" NS doc-reference-title-count
6062 .\" NS doc-report-count
6064 .\" NS local variables:
6067 .\" NS width register `%T' set in doc-common
6070 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6071 . tm Usage: .%T reference_title ... (#\n[.c])
6075 . if \n[doc-is-reference] \{\
6076 . nr doc-reference-title-count +1
6077 . nr doc-reference-count +1
6080 . ds doc-macro-name %T
6081 . doc-parse-args \$@
6084 . nr doc-curr-font \n[.f]
6085 . nr doc-curr-size \n[.ps]
6086 . ie \n[doc-is-reference] \{\
6087 . \" append to reference box
6088 . boxa doc-reference-title-name-for-book
6093 . nop \*[doc-No-font]\c
6096 . \" do it a second time with another font
6097 . ds doc-macro-name %T
6098 . doc-parse-args \$@
6101 . nr doc-curr-font \n[.f]
6102 . nr doc-curr-size \n[.ps]
6103 . boxa doc-reference-title-name
6108 . nop \*[doc-Em-font]\c
6112 . nop \*[doc-Em-font]\c
6113 . doc-print-recursive
6118 .\" NS doc-url-count global register
6119 .\" NS counter of hypertext references
6124 .\" NS doc-url-name global box
6125 .\" NS string of collected hypertext references
6130 .\" NS doc-volume-count global register
6131 .\" NS counter of reference title references
6133 .nr doc-volume-count 0
6136 .\" NS doc-volume-name global box
6137 .\" NS string of collected volume references
6142 .\" NS %U user macro
6143 .\" NS hypertext reference
6147 .\" NS doc-curr-font
6148 .\" NS doc-curr-size
6149 .\" NS doc-macro-name
6150 .\" NS doc-reference-count
6151 .\" NS doc-url-count
6153 .\" NS local variables:
6156 .\" NS width register `%U' set in doc-common
6159 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6160 . tm Usage: .%U URL ... (#\n[.c])
6164 . nr doc-url-count +1
6165 . nr doc-reference-count +1
6167 . ds doc-macro-name %U
6168 . doc-parse-args \$@
6171 . nr doc-curr-font \n[.f]
6172 . nr doc-curr-size \n[.ps]
6174 . \" append to reference box
6184 .\" NS %V user macro
6185 .\" NS reference volume
6189 .\" NS doc-curr-font
6190 .\" NS doc-curr-size
6191 .\" NS doc-macro-name
6192 .\" NS doc-reference-count
6193 .\" NS doc-volume-count
6195 .\" NS local variables:
6198 .\" NS width register `%V' set in doc-common
6201 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6202 . tm Usage: .%V volume ... (#\n[.c])
6206 . nr doc-volume-count +1
6207 . nr doc-reference-count +1
6209 . ds doc-macro-name %V
6210 . doc-parse-args \$@
6213 . nr doc-curr-font \n[.f]
6214 . nr doc-curr-size \n[.ps]
6216 . \" append to reference box
6217 . boxa doc-volume-name
6226 .\" NS doc-do-references macro
6227 .\" NS reference recursion routine
6232 .\" NS local variables:
6236 .de doc-do-references
6237 . if !\n[doc-is-reference] \
6238 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6240 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6242 . ie (\n[doc-reg-ddr1] == 1) \{\
6243 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6244 . doc-append-arg \c 3
6245 . \*[doc-arg\n[doc-arg-ptr]]
6248 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6250 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6251 . \" finish reference box
6259 . nr doc-reg-ddr \n[doc-arg-ptr]
6261 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6267 .\" NS Hf user macro
6268 .\" NS source include header files.
6271 .\" NS doc-curr-font
6272 .\" NS doc-curr-size
6274 .\" NS width register `Hf' set in doc-common
6277 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6289 . Usage: .Hf file (#\n[.c])
6293 .\" NS doc-have-author global register (bool)
6296 .nr doc-have-author 0
6299 .\" NS An user macro
6304 .\" NS doc-curr-font
6305 .\" NS doc-curr-size
6306 .\" NS doc-have-author
6307 .\" NS doc-macro-name
6309 .\" NS width register `An' set in doc-common
6312 . if !\n[doc-arg-limit] \{\
6314 . ie "\$1"-nosplit" \
6315 . nr doc-in-authors-section 0
6316 . el \{ .ie "\$1"-split" \
6317 . nr doc-in-authors-section 1
6319 . ds doc-macro-name An
6320 . doc-parse-args \$@
6323 . tm1 "Usage: .An {-nosplit | -split}
6324 . tm1 " .An author_name ... (#\n[.c])
6327 . if \n[doc-in-authors-section] \{\
6328 . ie \n[doc-have-author] \
6331 . nr doc-have-author 1
6334 . if \n[doc-arg-limit] \{\
6336 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6337 . nr doc-curr-font \n[.f]
6338 . nr doc-curr-size \n[.ps]
6339 . doc-print-recursive
6342 . tm Usage: .An author_name ... (#\n[.c])
6348 .\" NS Rv user macro
6349 .\" NS return values
6351 .\" NS width register `Rv' set in doc-common
6353 .\" NS local variables:
6354 .\" NS doc-str-Rv-std-prefix
6355 .\" NS doc-str-Rv-std-suffix
6356 .\" NS doc-str-Rv-stds-prefix
6357 .\" NS doc-str-Rv-stds-and
6358 .\" NS doc-str-Rv-stds-suffix
6359 .\" NS doc-str-Rv-std0
6361 .ds doc-str-Rv-std-prefix "The
6362 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6363 .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
6364 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6365 .as doc-str-Rv-std-suffix " is set to indicate the error.
6367 .ds doc-str-Rv-stds-prefix "The
6368 .ds doc-str-Rv-stds-and "and
6369 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6370 .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
6371 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6372 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6374 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6375 .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
6376 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6377 .as doc-str-Rv-std0 " is set to indicate the error.
6381 .\" XXX: what does this function without `-std'?
6383 . if \n[doc-arg-limit] \{\
6384 . tm Usage: .Rv not callable by other macros (#\n[.c])
6390 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6395 . nr doc-reg-Rv \*[doc-section]
6396 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6397 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6400 . ie (\n[.$] > 1) \{\
6401 . nop \)\*[doc-str-Rv-stds-prefix]
6403 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6405 . Fn \$\n[doc-reg-Rv] ,
6407 . Fn \$\n[doc-reg-Rv]
6410 . nop \)\*[doc-str-Rv-stds-and]
6412 . nop \)\*[doc-str-Rv-stds-suffix]
6414 . el \{ .ie (\n[.$] == 1) \{\
6415 . nop \)\*[doc-str-Rv-std-prefix]
6417 . nop \)\*[doc-str-Rv-std-suffix]
6420 . nop \)\*[doc-str-Rv-std0]
6425 .\" NS Ex user macro
6428 .\" NS width register `Ex' set in doc-common
6430 .\" NS local variables:
6431 .\" NS doc-str-Ex-std-prefix
6432 .\" NS doc-str-Ex-std-suffix
6434 .ds doc-str-Ex-std-prefix "The
6435 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6436 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6438 .ds doc-str-Ex-stds-prefix "The
6439 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6440 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6441 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6445 .\" XXX: what does this function without `-std'?
6447 . if \n[doc-arg-limit] \{\
6448 . tm Usage: .Ex not callable by other macros (#\n[.c])
6454 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6459 . nr doc-reg-Ex \*[doc-section]
6460 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6461 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6464 . ie (\n[.$] > 1) \{\
6465 . nop \)\*[doc-str-Ex-stds-prefix]
6467 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6469 . Nm \$\n[doc-reg-Ex] ,
6471 . Nm \$\n[doc-reg-Ex]
6474 . nop \)\*[doc-str-Ex-stds-and]
6476 . nop \)\*[doc-str-Ex-stds-suffix]
6479 . nop \)\*[doc-str-Ex-std-prefix]
6481 . nop \)\*[doc-str-Ex-std-suffix]
6486 .\" NS Mt user macro
6487 .\" NS mailto (for conversion to HTML)
6490 . \" XXX: error handling missing
6495 .\" NS Lk user macro
6496 .\" NS link (for conversion to HTML)
6498 .\" NS local variables:
6503 . ds doc-str-Lk Sy \$@
6505 . ie (\n[.$] > 1) \{\
6506 . doc-get-arg-type \$2
6507 . ie (\n[doc-arg-type] < 3) \{\
6509 . ds doc-str-Lk Sy "\$1"
6510 . doc-get-width "\$1"
6513 . as doc-str-Lk " \$@
6516 . doc-get-width "\$1"
6519 . doc-get-width "\$1"
6525 . ie (\n[doc-width] >= \n[doc-reg-Lk]) \
6532 .\" NS doc-defunct-macro macro
6533 .\" NS this is the skeleton for defunct macros
6536 .de doc-defunct-macro
6537 . tmc mdoc error: .\$0 defunct
6538 . if d doc-\$0-usage \
6539 . tmc , \*[doc-\$0-usage]
6546 .als Db doc-defunct-macro
6548 .als Ds doc-defunct-macro
6550 .als Or doc-defunct-macro
6551 .ds doc-Or-usage use `|'
6553 .als Sf doc-defunct-macro
6554 .ds doc-Sf-usage use .Pf or .Ns
6560 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6561 . tm1 " Should this have been `.Em ...'?
6566 .\" NS doc-empty-line macro
6567 .\" NS emit warning and print empty line
6570 . if !\n[doc-display-depth] \
6571 . tm mdoc warning: Empty input line #\n[.c]
6581 .\" For UTF-8, map some characters conservatively for the sake
6582 .\" of easy cut and paste.
6584 .if '\*[.T]'utf8' \{\
6594 .\" load local modifications