3 .\" Copyright (c) 1991, 1993
4 .\" The Regents of the University of California. All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\" notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\" notice, this list of conditions and the following disclaimer in the
13 .\" documentation and/or other materials provided with the distribution.
15 .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\" may be used to endorse or promote products derived from this software
18 .\" without specific prior written permission.
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .\" @(#)doc 8.1 (Berkeley) 06/08/93
34 .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
35 .\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
36 .\" `tmac.doc-common' would be too long); when using groff, the doc-* files
37 .\" are loaded using the `mso' request.
41 .\" Werner LEMBERG <wl@gnu.org> and
42 .\" Ruslan Ermilov <ru@freebsd.org>
44 .\" to make it more readable: using long names and many groff features,
45 .\" updating and extending documentation, etc.
51 . ab This version of mdoc can be run with GNU troff only!
60 .if (\n[.x]\n[.y] < 118) \
61 . ab You need GNU troff version 1.18 or higher to run this version of mdoc!
64 .\" Load start-up files
66 . mso mdoc/doc-ditroff
77 .\" NS doc-macro-name global string
78 .\" NS name of calling request (set in each user-requestable macro)
81 .als doc-arg0 doc-macro-name
84 .\" NS doc-arg-limit global register
85 .\" NS total number of arguments
90 .\" NS doc-num-args global register
91 .\" NS number of arguments to handle (must be set to \n[.$] prior to
92 .\" NS `doc-parse-arg-vector' request)
97 .\" NS doc-arg-ptr global register
98 .\" NS argument pointer
103 .\" NS doc-argXXX global string
104 .\" NS argument vector
112 .\" NS doc-typeXXX global register
113 .\" NS argument type vector (macro=1, string=2, punctuation suffix=3,
114 .\" NS punctuation prefix=4)
122 .\" NS doc-spaceXXX global string
131 .\" NS doc-parse-args macro
132 .\" NS parse arguments (recursively) (`.doc-parse-args arg ...')
141 .\" NS doc-have-space
143 .\" NS local variables:
149 . if !\n[doc-arg-limit] \
152 . nr doc-have-space 0
157 . nr doc-arg-limit +1
159 . \" handle `|' and `...' specially
161 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
162 . el \{ .ie "\$1"..." \
163 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
165 . ds doc-arg\n[doc-arg-limit] "\$1
168 . \" get argument type and set spacing
169 . doc-get-arg-type* \n[doc-arg-limit]
170 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
171 . doc-set-spacing-\n[doc-arg-type]
173 . \" check whether we have processed the last parameter
185 .\" NS doc-parse-arg-vector macro
186 .\" NS parse argument vector (recursive)
188 .\" NS cf. comments in doc-parse-args
198 .\" NS local variables:
203 .de doc-parse-arg-vector
204 . if !\n[doc-arg-limit] \
207 . nr doc-arg-limit +1
209 . ie "\*[doc-arg\n[doc-arg-limit]]"|" \
210 . ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
211 . el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
212 . ds doc-arg\n[doc-arg-limit] \|.\|.\|.
215 . doc-get-arg-type* \n[doc-arg-limit]
216 . nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
217 . doc-set-spacing-\n[doc-arg-type]
219 . ie (\n[doc-num-args] == 1) \{\
225 . doc-parse-arg-vector
232 .\" NS doc-parse-space-vector macro
233 .\" NS parse space vector (recursive)
240 .de doc-parse-space-vector
241 . nr doc-arg-limit +1
243 . doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
245 . ie (\n[doc-num-args] == 1) \
249 . doc-parse-space-vector
254 .\" NS doc-remaining-args macro
255 .\" NS output remaining arguments as-is, separated by spaces (until
256 .\" NS `doc-num-args' is exhausted)
262 .de doc-remaining-args
264 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
266 . ie (\n[doc-num-args] == 1) \{\
271 . nop \)\*[doc-space]\c
278 .\" NS doc-append-arg macro
279 .\" NS append one argument to argument vector:
280 .\" NS `.doc-append-arg [arg] [type]'
288 . nr doc-arg-limit +1
289 . ds doc-arg\n[doc-arg-limit] "\$1
290 . nr doc-type\n[doc-arg-limit] \$2
291 . doc-set-spacing-\$2
295 .\" NS doc-print-and-reset macro
296 .\" NS finish input line and clean up argument vectors
298 .de doc-print-and-reset
299 . if \n[doc-space-mode] \
305 .\" NS doc-reset-args macro
306 .\" NS reset argument counters
318 . hy \n[doc-hyphen-flags]
324 .\" NS doc-curr-font global register
325 .\" NS saved current font
327 .nr doc-curr-font \n[.f]
330 .\" NS doc-curr-size global register
331 .\" NS saved current font size
333 .nr doc-curr-size \n[.ps]
339 .\" NS handle flags (appends `-' and prints flags): `.Fl [arg ...]'
345 .\" NS doc-macro-name
347 .\" NS local variables:
348 .\" NS doc-reg-Fl (for communication with doc-flag-recursion)
350 .\" NS width register `Fl' set in doc-common
353 . nr doc-curr-font \n[.f]
354 . nr doc-curr-size \n[.ps]
355 . nop \*[doc-Fl-font]\c
357 . if !\n[doc-arg-limit] \{\
358 . ds doc-macro-name Fl
363 . nop \|\-\|\f[]\s[0]
366 . if !\n[doc-arg-limit] \
370 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
372 . nop \|\-\f[]\s[0]\c
373 . doc-print-and-reset
376 . ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
377 . nop \|\-\f[]\s[0]\c
378 . \*[doc-arg\n[doc-arg-ptr]]
381 . if (\n[doc-type\n[doc-arg-ptr]] == 3) \
390 .\" NS doc-flag-recursion macro
391 .\" NS `Fl' flag recursion routine (special handling)
396 .\" NS local variables:
401 .de doc-flag-recursion
402 . nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
403 . ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
405 . ie (\n[doc-reg-dfr1] == 1) \{\
410 . nr doc-reg-dfr \n[doc-arg-ptr]
412 . ie (\n[doc-reg-dfr1] == 2) \{\
413 . \" handle vertical bar -- doc-reg-Fl is set for the first call of
414 . \" doc-flag-recursion only; we need this to make `.Fl | ...' work
416 . ie "\*[doc-str-dfr]"\*[Ba]" \{\
417 . if \n[doc-reg-Fl] \
418 . nop \|\-\*[doc-space]\c
422 . ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
423 . if \n[doc-reg-Fl] \
424 . nop \|\-\*[doc-space]\c
428 . \" two consecutive hyphen characters?
429 . ie "\*[doc-str-dfr]"-" \
432 . nop \|\%\-\*[doc-str-dfr]\&\c
435 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
436 . nop \)\*[doc-str-dfr]\f[]\s[0]\c
439 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
441 . if (\n[doc-reg-dfr1] == 4) \
443 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
444 . doc-print-and-reset
448 . ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
449 . ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
452 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
455 . nop \)\*[doc-space\n[doc-reg-dfr]]\c
459 . doc-flag-recursion \$@
464 .\" NS doc-print-recursive macro
465 .\" NS general name recursion routine (print remaining arguments)
470 .\" NS local variables:
475 .de doc-print-recursive
476 . nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
477 . ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
479 . ie (\n[doc-reg-dpr1] == 1) \{\
480 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
484 . nr doc-reg-dpr \n[doc-arg-ptr]
486 . \" the `\%' prevents hyphenation on a dash (`-')
487 . ie (\n[doc-reg-dpr1] == 2) \
488 . nop \%\*[doc-str-dpr]\&\c
490 . \" punctuation character
491 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
492 . nop \)\*[doc-str-dpr]\f[]\s[0]\c
496 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
498 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
499 . doc-print-and-reset
502 . nop \)\*[doc-space\n[doc-reg-dpr]]\c
503 . doc-print-recursive
508 .\" NS doc-print-prefixes macro
509 .\" NS print leading prefixes
514 .de doc-print-prefixes
515 . while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
516 . if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
518 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
519 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
525 .\" NS doc-generic-macro macro
526 .\" NS this is the skeleton for most simple macros
532 .\" NS doc-macro-name
534 .de doc-generic-macro
535 . if !\n[doc-arg-limit] \{\
537 . ds doc-macro-name \$0
541 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
544 . if !\n[doc-arg-limit] \
548 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
549 . if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
550 . tmc mdoc warning: Using a macro as first argument
551 . tm1 " cancels effect of .\$0 (#\n[.c])
553 . \" the right action here would be to reset the argument counters
554 . \" and bail out -- unfortunately, a small number of manual pages
555 . \" (less than 2% for FreeBSD which has been used for testing)
556 . \" relied on the old behaviour (silently ignore this error),
557 . \" so it is commented out
562 . nr doc-curr-font \n[.f]
563 . nr doc-curr-size \n[.ps]
564 . nop \*[doc-\$0-font]\c
565 . doc-print-recursive
569 . tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
576 .\" NS command line `argument' macro: `.Ar [args ...]'
582 .\" NS doc-macro-name
584 .\" NS local variable:
585 .\" NS doc-str-Ar-default
587 .\" NS width register `Ar' set in doc-common
589 .ds doc-str-Ar-default "file\ .\|.\|.
592 . nr doc-curr-font \n[.f]
593 . nr doc-curr-size \n[.ps]
594 . nop \*[doc-Ar-font]\c
596 . if !\n[doc-arg-limit] \{\
597 . ds doc-macro-name Ar
602 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
605 . if !\n[doc-arg-limit] \
610 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
611 . nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
612 . doc-print-and-reset
615 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
616 . \" replace previous argument (Ar) with default value
618 . ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
619 . nr doc-type\n[doc-arg-ptr] 2
620 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
622 . \" recompute space vector for remaining arguments
623 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
624 . nr doc-arg-limit \n[doc-arg-ptr]
625 . doc-parse-space-vector
627 . doc-print-recursive
635 .\" NS width register `Ad' set in doc-common
637 .als Ad doc-generic-macro
638 .ds doc-Ad-usage address
641 .\" NS doc-indent-synopsis global register
642 .\" NS indentation in synopsis
644 .nr doc-indent-synopsis 0
647 .\" NS doc-indent-synopsis-active global register (bool)
648 .\" NS indentation in synopsis active
650 .nr doc-indent-synopsis-active 0
654 .\" NS config declaration (for section 4 SYNOPSIS)
656 .\" NS this function causes a break; it uses the `Nm' font
662 .\" NS doc-indent-synopsis
663 .\" NS doc-macro-name
665 .\" NS width register `Cd' set in doc-common
668 . if !\n[doc-arg-limit] \{\
670 . ds doc-macro-name Cd
674 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
677 . if !\n[doc-arg-limit] \
681 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
682 . nr doc-curr-font \n[.f]
683 . nr doc-curr-size \n[.ps]
685 . ie \n[doc-in-synopsis-section] \{\
686 . ie "\*[doc-macro-name]"Cd" \{\
688 . if !\n[doc-indent-synopsis] \
689 . nr doc-indent-synopsis \n[doc-display-indent]u
690 . if !\n[doc-indent-synopsis-active] \
691 . in +\n[doc-indent-synopsis]u
692 . ti -\n[doc-indent-synopsis]u
693 . nop \*[doc-Nm-font]\c
694 . doc-print-recursive
695 . if !\n[doc-indent-synopsis-active] \
696 . in -\n[doc-indent-synopsis]u
699 . nop \*[doc-Nm-font]\c
700 . doc-print-recursive
703 . nop \*[doc-Nm-font]\c
704 . doc-print-recursive
707 . tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
714 .\" NS interactive command modifier (flag)
716 .\" NS width register `Cm' set in doc-common
718 .als Cm doc-generic-macro
719 .ds doc-Cm-usage interactive_command_modifier
723 .\" NS defined variable
725 .\" NS this function uses the `Er' font
727 .\" NS width register `Dv' set in doc-common
729 .als Dv doc-generic-macro
730 .ds doc-Dv-usage defined_variable
731 .als doc-Dv-font doc-Er-font
737 .\" NS width register `Em' set in doc-common
739 .als Em doc-generic-macro
740 .ds doc-Em-usage text
746 .\" NS width register `Er' set in doc-common
748 .als Er doc-generic-macro
749 .ds doc-Er-usage text
753 .\" NS environment variable
755 .\" NS width register `Ev' set in doc-common
757 .als Ev doc-generic-macro
758 .ds doc-Ev-usage text
761 .\" NS doc-have-decl global register (bool)
762 .\" NS subroutine test (in synopsis only)
767 .\" NS doc-have-var global register (bool)
768 .\" NS whether last type is a variable type
773 .\" NS doc-do-func-decl macro
774 .\" NS do something special while in SYNOPSIS
783 . if \n[doc-in-synopsis-section] \{\
784 . \" if a variable type was the last thing given, want vertical space
785 . if \n[doc-have-var] \{\
789 . \" if a subroutine was the last thing given, want vertical space
790 . if \n[doc-have-func] \{\
791 . ie \n[doc-have-decl] \
799 . nr doc-curr-font \n[.f]
800 . nr doc-curr-size \n[.ps]
805 .\" NS function declaration -- not callable
807 .\" NS this function causes a break
809 .\" NS width register `Fd' set in doc-common
812 . ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
814 . nop \*[doc-Fd-font]\$*
816 . ft \n[doc-curr-font]
817 . ps \n[doc-curr-size]u
820 . tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
827 .\" NS #include statement in SYNOPSIS
828 .\" NS <header.h> if not in SYNOPSIS
830 .\" NS this function causes a break; it uses the `Fd' font
836 .\" NS doc-indent-synopsis
837 .\" NS doc-macro-name
839 .\" NS width register `In' set in doc-common
842 . if !\n[doc-arg-limit] \{\
844 . ds doc-macro-name In
848 . tm Usage: .In include_file ... (#\n[.c])
851 . if !\n[doc-arg-limit] \
856 . ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
857 . nr doc-curr-font \n[.f]
858 . nr doc-curr-size \n[.ps]
860 . ie \n[doc-in-synopsis-section] \{\
861 . ie "\*[doc-macro-name]"In" \{\
863 . nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
864 . ft \n[doc-curr-font]
865 . ps \n[doc-curr-size]u
868 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
869 . doc-print-recursive
874 . ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
875 . as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
876 . doc-print-recursive
879 . ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
880 . as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
881 . doc-print-recursive
884 . tm Usage: .In include_file ... (#\n[.c])
891 .\" NS function return value
893 .\" NS this function uses the `Ar' font
895 .\" NS width register `Fr' set in doc-common
897 .als Fr doc-generic-macro
898 .ds doc-Fr-usage function_return_value
899 .als doc-Fr-font doc-Ar-font
903 .\" NS interactive command
905 .\" NS width register `Ic' set in doc-common
907 .als Ic doc-generic-macro
908 .ds doc-Ic-usage interactive_command
914 .\" NS width register `Li' set in doc-common
916 .als Li doc-generic-macro
917 .ds doc-Li-usage argument
923 .\" NS this function uses the `Sy' font
925 .\" NS width register `Ms' set in doc-common
927 .als Ms doc-generic-macro
928 .ds doc-Ms-usage math_symbol
929 .als doc-Ms-font doc-Sy-font
932 .\" NS doc-command-name global string
933 .\" NS save first invocation of .Nm
939 .\" NS name of command or page topic
943 .\" NS doc-command-name
946 .\" NS doc-indent-synopsis
947 .\" NS doc-indent-synopsis-active
948 .\" NS doc-macro-name
950 .\" NS width register `Nm' set in doc-common
953 . if !\n[doc-arg-limit] \{\
954 . ds doc-macro-name Nm
958 . ie "\*[doc-command-name]"" \
959 . tm Usage: .Nm name ... (#\n[.c])
961 . doc-parse-args \*[doc-command-name]
964 . if !\n[doc-arg-limit] \
969 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
971 . ie "\*[doc-command-name]"" \{\
972 . tm Usage: .Nm name ... (#\n[.c])
976 . nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
977 . doc-print-and-reset
980 . nr doc-curr-font \n[.f]
981 . nr doc-curr-size \n[.ps]
983 . ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
984 . ie "\*[doc-command-name]"" \
985 . tm Usage: .Nm name ... (#\n[.c])
987 . \" replace previous argument (Nm) with default value
989 . ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
990 . nr doc-type\n[doc-arg-ptr] 2
991 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
993 . \" recompute space vector for remaining arguments
994 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
995 . nr doc-arg-limit \n[doc-arg-ptr]
996 . doc-parse-space-vector
999 . \" handle `.Nm ...' in SYNOPSIS
1000 . if \n[doc-in-synopsis-section] \{\
1001 . if "\*[doc-macro-name]"Nm" \{\
1003 . if !\n[doc-indent-synopsis] \{\
1004 . doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
1005 . nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
1007 . if !\n[doc-indent-synopsis-active] \{\
1008 . in +\n[doc-indent-synopsis]u
1009 . nr doc-indent-synopsis-active 1
1011 . ti -\n[doc-indent-synopsis]u
1013 . if "\*[doc-command-name]"" \
1014 . ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
1016 . nop \*[doc-Nm-font]\c
1018 . doc-print-recursive
1023 .\" NS Pa user macro
1024 .\" NS pathname: `.Pa [arg ...]'
1028 .\" NS doc-curr-font
1029 .\" NS doc-curr-size
1030 .\" NS doc-macro-name
1032 .\" NS width register `Pa' set in doc-common
1035 . if !\n[doc-arg-limit] \{\
1036 . ds doc-macro-name Pa
1037 . doc-parse-args \$@
1041 . nop \*[doc-Pa-font]~\f[]\s[0]
1044 . if !\n[doc-arg-limit] \
1048 . doc-print-prefixes
1049 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1050 . nr doc-curr-font \n[.f]
1051 . nr doc-curr-size \n[.ps]
1052 . nop \*[doc-Pa-font]\c
1053 . if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
1054 . \" replace previous argument (Pa) with default value
1056 . ds doc-arg\n[doc-arg-ptr] ~
1057 . nr doc-type\n[doc-arg-ptr] 2
1058 . ds doc-space\n[doc-arg-ptr] "\*[doc-space]
1060 . \" recompute space vector for remaining arguments
1061 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
1062 . nr doc-arg-limit \n[doc-arg-ptr]
1063 . doc-parse-space-vector
1065 . doc-print-recursive
1068 . nop \*[doc-Pa-font]~\f[]\s[0]\c
1069 . doc-print-and-reset
1074 .\" NS Sy user macro
1077 .\" NS width register `Sy' set in doc-common
1079 .als Sy doc-generic-macro
1080 .ds doc-Sy-usage symbolic_text
1083 .\" NS Me user macro
1086 .\" NS width register `Me' set in doc-common
1088 .als Me doc-generic-macro
1089 .ds doc-Me-usage menu_entry
1092 .\" NS Tn user macro
1097 .\" NS doc-curr-font
1098 .\" NS doc-curr-size
1099 .\" NS doc-macro-name
1101 .\" NS width register `Tn' set in doc-common
1104 . if !\n[doc-arg-limit] \{\
1106 . ds doc-macro-name Tn
1107 . doc-parse-args \$@
1110 . tm Usage: .Tn trade_name ... (#\n[.c])
1113 . if !\n[doc-arg-limit] \
1117 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
1118 . nr doc-curr-font \n[.f]
1119 . nr doc-curr-size \n[.ps]
1120 . nop \)\*[doc-Tn-font-size]\c
1121 . ie !\n[doc-is-reference] \{\
1122 . nop \)\*[doc-Tn-font-shape]\c
1123 . doc-print-recursive
1129 . tm Usage: .Tn trade_name ... (#\n[.c])
1135 .\" NS Va user macro
1136 .\" NS variable name
1138 .\" NS width register `Va' set in doc-common
1140 .als Va doc-generic-macro
1141 .ds doc-Va-usage variable_name
1144 .\" NS No user macro
1145 .\" NS normal text macro (default text style if mess up)
1147 .\" NS width register `No' set in doc-common
1149 .als No doc-generic-macro
1150 .ds doc-No-usage normal_text
1153 .\" NS doc-quote-left global string
1154 .\" NS left quotation character for `doc-enclose-string' and
1155 .\" NS `doc-enclose-open'
1160 .\" NS doc-quote-right global string
1161 .\" NS right quotation character for `doc-enclose-string' and
1162 .\" NS `doc-enclose-close'
1167 .\" NS Op user macro
1168 .\" NS option expression (i.e., enclose string in square brackets)
1171 .\" NS doc-macro-name
1172 .\" NS doc-quote-left
1173 .\" NS doc-quote-right
1175 .\" NS width register `Op' set in doc-common
1178 . if !\n[doc-arg-limit] \
1179 . ds doc-macro-name Op
1181 . ds doc-quote-left "\*[doc-left-bracket]
1182 . ds doc-quote-right "\*[doc-right-bracket]
1184 . doc-enclose-string \$@
1188 .\" NS Aq user macro
1189 .\" NS enclose string in angle brackets
1192 .\" NS doc-macro-name
1193 .\" NS doc-quote-left
1194 .\" NS doc-quote-right
1196 .\" NS width register `Aq' set in doc-common
1199 . if !\n[doc-arg-limit] \
1200 . ds doc-macro-name Aq
1202 . ie "\*[doc-macro-name]"An" \{\
1203 . ds doc-quote-left <
1204 . ds doc-quote-right >
1207 . ds doc-quote-left \[la]
1208 . ds doc-quote-right \[ra]
1211 . doc-enclose-string \$@
1215 .\" NS Bq user macro
1216 .\" NS enclose string in square brackets
1219 .\" NS doc-macro-name
1220 .\" NS doc-quote-left
1221 .\" NS doc-quote-right
1223 .\" NS width register `Bq' set in doc-common
1226 . if !\n[doc-arg-limit] \
1227 . ds doc-macro-name Bq
1229 . ds doc-quote-left "\*[doc-left-bracket]
1230 . ds doc-quote-right "\*[doc-right-bracket]
1232 . doc-enclose-string \$@
1236 .\" NS Brq user macro
1237 .\" NS enclose string in braces
1240 .\" NS doc-macro-name
1241 .\" NS doc-quote-left
1242 .\" NS doc-quote-right
1244 .\" NS width register `Brq' set in doc-common
1247 . if !\n[doc-arg-limit] \
1248 . ds doc-macro-name Brq
1250 . ds doc-quote-left {
1251 . ds doc-quote-right }
1253 . doc-enclose-string \$@
1257 .\" NS Dq user macro
1258 .\" NS enclose string in double quotes
1261 .\" NS doc-macro-name
1262 .\" NS doc-quote-left
1263 .\" NS doc-quote-right
1265 .\" NS width register `Dq' set in doc-common
1268 . if !\n[doc-arg-limit] \
1269 . ds doc-macro-name Dq
1271 . ds doc-quote-left "\*[Lq]
1272 . ds doc-quote-right "\*[Rq]
1274 . doc-enclose-string \$@
1278 .\" NS Eq user macro
1279 .\" NS enclose string in user-defined quotes (args 1 and 2)
1282 .\" NS doc-macro-name
1283 .\" NS doc-quote-left
1284 .\" NS doc-quote-right
1286 .\" NS width register `Eq' set in doc-common
1289 . if !\n[doc-arg-limit] \
1290 . ds doc-macro-name Eq
1292 . ds doc-quote-left "\$1
1293 . ds doc-quote-right "\$2
1296 . doc-enclose-string \$@
1300 .\" NS Pq user macro
1301 .\" NS enclose string in parentheses
1304 .\" NS doc-macro-name
1305 .\" NS doc-quote-left
1306 .\" NS doc-quote-right
1308 .\" NS width register `Pq' set in doc-common
1311 . if !\n[doc-arg-limit] \
1312 . ds doc-macro-name Pq
1314 . ds doc-quote-left "\*[doc-left-parenthesis]
1315 . ds doc-quote-right "\*[doc-right-parenthesis]
1317 . doc-enclose-string \$@
1321 .\" NS Ql user macro
1322 .\" NS quoted literal
1324 .\" is in file doc-[dit|n]roff
1327 .\" NS Qq user macro
1328 .\" NS enclose string in straight double quotes
1331 .\" NS doc-macro-name
1332 .\" NS doc-quote-left
1333 .\" NS doc-quote-right
1335 .\" NS width register `Qq' set in doc-common
1338 . if !\n[doc-arg-limit] \
1339 . ds doc-macro-name Qq
1341 . ds doc-quote-left "\*[q]
1342 . ds doc-quote-right "\*[q]
1344 . doc-enclose-string \$@
1348 .\" NS Sq user macro
1349 .\" NS enclose string in single quotes
1352 .\" NS doc-macro-name
1353 .\" NS doc-quote-left
1354 .\" NS doc-quote-right
1356 .\" NS width register `Sq' set in doc-common
1359 . if !\n[doc-arg-limit] \
1360 . ds doc-macro-name Sq
1362 . ds doc-quote-left "\*[doc-left-singlequote]
1363 . ds doc-quote-right "\*[doc-right-singlequote]
1365 . doc-enclose-string \$@
1369 .\" NS Es user macro
1370 .\" NS set up arguments (i.e., the left and right quotation character as
1371 .\" NS first and second argument) for .En call
1375 .\" NS doc-macro-name
1376 .\" NS doc-quote-left
1377 .\" NS doc-quote-right
1380 . if !\n[doc-arg-limit] \{\
1381 . ie (\n[.$] > 2) \{\
1382 . ds doc-macro-name Es
1383 . doc-parse-args \$@
1386 . ds doc-quote-left "\$1
1387 . ds doc-quote-right "\$2
1390 . if !\n[doc-arg-limit] \
1394 . ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
1396 . ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
1398 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1399 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1401 . doc-print-and-reset
1405 .\" NS doc-have-slot global register (bool)
1406 .\" NS set if `doc-enclose-string' has created a slot for closing
1412 .\" NS doc-enclose-string macro
1413 .\" NS enclose string with given args (e.g. [ and ])
1418 .\" NS doc-have-slot
1420 .\" NS local variables:
1426 .\" NS doc-quote-left
1427 .\" NS doc-quote-right
1429 .de doc-enclose-string
1430 . if \n[doc-in-synopsis-section] \
1431 . doc-set-hard-space
1433 . if !\n[doc-arg-limit] \{\
1435 . doc-parse-args \$@
1437 . nop \)\*[doc-quote-left]\*[doc-quote-right]
1440 . if !\n[doc-arg-limit] \
1443 . nr doc-curr-font \n[.f]
1444 . nr doc-curr-size \n[.ps]
1447 . doc-print-prefixes
1448 . \" the final `\)' prevents hyphenation in case the next character is `\%'
1449 . nop \)\*[doc-quote-left]\)\c
1450 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
1452 . nop \)\*[doc-quote-right]\)\c
1453 . doc-print-and-reset
1456 . \" test whether last arguments are of type closing punctuation
1458 . ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
1459 . nr doc-reg-des (\n[doc-arg-limit] - 1)
1460 . while (\n[doc-type\n[doc-reg-des]] == 3) \
1463 . \" prepend closing delimiter
1465 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1468 . \" test whether last arguments are macros which continue the line
1470 . nr doc-reg-des \n[doc-arg-limit]
1471 . while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
1472 . if !\A
\a\*[doc-arg\n[doc-reg-des]]
\a \
1474 . if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
1479 . \" if there are no trailing macros to be skipped, append argument
1480 . ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
1481 . doc-append-arg "\)\*[doc-quote-right]\)" 3
1483 . \" if a previous call to `doc-enclose-string' has already created
1484 . \" a slot, prepend argument
1485 . ie \n[doc-have-slot] \
1486 . ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
1488 . \" we have to shift all arguments to the right
1490 . nr doc-reg-des1 \n[doc-arg-limit]
1491 . nr doc-reg-des2 (\n[doc-arg-limit] + 1)
1492 . while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
1493 . rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
1494 . rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
1495 . rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
1496 . nr doc-reg-des1 -1
1497 . nr doc-reg-des2 -1
1499 . nr doc-arg-limit +1
1501 . \" finally, insert closing delimiter into the freed slot and
1502 . \" recompute spacing vector
1503 . ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
1504 . nr doc-type\n[doc-reg-des] 3
1505 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
1506 . nr doc-arg-limit (\n[doc-reg-des] - 1)
1507 . doc-parse-space-vector
1508 . nr doc-have-slot 1
1511 . doc-do-\n[doc-type\n[doc-arg-ptr]]
1514 . if \n[doc-in-synopsis-section] \
1515 . doc-set-soft-space
1519 .\" NS En user macro
1520 .\" NS enclose arguments with quotation characters set up with `.Es'
1522 .als En doc-enclose-string
1525 .\" NS Ao user macro
1529 .\" NS doc-macro-name
1530 .\" NS doc-quote-left
1532 .\" NS width register `Ao' set in doc-common
1535 . if !\n[doc-arg-limit] \
1536 . ds doc-macro-name Ao
1538 . ie "\*[doc-macro-name]"An" \
1539 . ds doc-quote-left <
1541 . ds doc-quote-left \[la]
1543 . doc-enclose-open \$@
1547 .\" NS Ac user macro
1551 .\" NS doc-macro-name
1552 .\" NS doc-quote-right
1554 .\" NS width register `Ac' set in doc-common
1557 . if !\n[doc-arg-limit] \
1558 . ds doc-macro-name Ac
1560 . ie "\*[doc-macro-name]"An" \
1561 . ds doc-quote-right >
1563 . ds doc-quote-right \[ra]
1565 . doc-enclose-close \$@
1569 .\" NS Bo user macro
1573 .\" NS doc-macro-name
1574 .\" NS doc-quote-left
1576 .\" NS width register `Bo' set in doc-common
1579 . if !\n[doc-arg-limit] \
1580 . ds doc-macro-name Bo
1582 . ds doc-quote-left "\*[doc-left-bracket]
1584 . doc-enclose-open \$@
1588 .\" NS Bc user macro
1589 .\" NS bracket close
1592 .\" NS doc-macro-name
1593 .\" NS doc-quote-right
1595 .\" NS width register `Bc' set in doc-common
1598 . if !\n[doc-arg-limit] \
1599 . ds doc-macro-name Bc
1601 . ds doc-quote-right "\*[doc-right-bracket]
1603 . doc-enclose-close \$@
1607 .\" NS Bro user macro
1611 .\" NS doc-macro-name
1612 .\" NS doc-quote-left
1614 .\" NS width register `Bro' set in doc-common
1617 . if !\n[doc-arg-limit] \
1618 . ds doc-macro-name Bo
1620 . ds doc-quote-left {
1622 . doc-enclose-open \$@
1626 .\" NS Brc user macro
1630 .\" NS doc-macro-name
1631 .\" NS doc-quote-right
1633 .\" NS width register `Brc' set in doc-common
1636 . if !\n[doc-arg-limit] \
1637 . ds doc-macro-name Bc
1639 . ds doc-quote-right }
1641 . doc-enclose-close \$@
1645 .\" NS Do user macro
1646 .\" NS double quote open
1649 .\" NS doc-macro-name
1650 .\" NS doc-quote-left
1652 .\" NS width register `Do' set in doc-common
1655 . if !\n[doc-arg-limit] \
1656 . ds doc-macro-name Do
1658 . ds doc-quote-left "\*[Lq]
1660 . doc-enclose-open \$@
1664 .\" NS Dc user macro
1665 .\" NS double quote close
1668 .\" NS doc-macro-name
1669 .\" NS doc-quote-right
1671 .\" NS width register `Dc' set in doc-common
1674 . if !\n[doc-arg-limit] \
1675 . ds doc-macro-name Dc
1677 . ds doc-quote-right "\*[Rq]
1679 . doc-enclose-close \$@
1683 .\" NS Eo user macro
1684 .\" NS enclose open (using first argument as beginning of enclosure)
1687 .\" NS doc-macro-name
1688 .\" NS doc-quote-left
1690 .\" NS width register `Eo' set in doc-common
1693 . if !\n[doc-arg-limit] \
1694 . ds doc-macro-name Eo
1696 . ds doc-quote-left "\$1
1699 . doc-enclose-open \$@
1703 .\" NS Ec user macro
1704 .\" NS enclose close (using first argument as end of enclosure)
1707 .\" NS doc-macro-name
1708 .\" NS doc-quote-right
1710 .\" NS width register `Ec' set in doc-common
1713 . if !\n[doc-arg-limit] \
1714 . ds doc-macro-name Ec
1716 . ds doc-quote-right "\$1
1719 . doc-enclose-close \$@
1723 .\" NS Oo user macro
1727 .\" NS doc-macro-name
1728 .\" NS doc-quote-left
1730 .\" NS width register `Oo' set in doc-common
1733 . if !\n[doc-arg-limit] \
1734 . ds doc-macro-name Oo
1736 . ds doc-quote-left [
1738 . doc-enclose-open \$@
1742 .\" NS Oc user macro
1746 .\" NS doc-macro-name
1747 .\" NS doc-quote-right
1749 .\" NS width register `Oc' set in doc-common
1752 . if !\n[doc-arg-limit] \
1753 . ds doc-macro-name Oc
1755 . ds doc-quote-right ]
1757 . doc-enclose-close \$@
1761 .\" NS Po user macro
1762 .\" NS parenthesis open
1765 .\" NS doc-macro-name
1766 .\" NS doc-quote-left
1768 .\" NS width register `Po' set in doc-common
1771 . if !\n[doc-arg-limit] \
1772 . ds doc-macro-name Po
1774 . ds doc-quote-left "\*[doc-left-parenthesis]
1776 . doc-enclose-open \$@
1780 .\" NS Pc user macro
1781 .\" NS parenthesis close
1784 .\" NS doc-macro-name
1785 .\" NS doc-quote-right
1787 .\" NS width register `Pc' set in doc-common
1790 . if !\n[doc-arg-limit] \
1791 . ds doc-macro-name Pc
1793 . ds doc-quote-right "\*[doc-right-parenthesis]
1795 . doc-enclose-close \$@
1799 .\" NS Qo user macro
1800 .\" NS straight double quote open
1803 .\" NS doc-macro-name
1804 .\" NS doc-quote-left
1806 .\" NS width register `Qo' set in doc-common
1809 . if !\n[doc-arg-limit] \
1810 . ds doc-macro-name Qo
1812 . ds doc-quote-left "\*[q]
1814 . doc-enclose-open \$@
1818 .\" NS Qc user macro
1819 .\" NS straight double quote close
1822 .\" NS doc-macro-name
1823 .\" NS doc-quote-right
1825 .\" NS width register `Qc' set in doc-common
1828 . if !\n[doc-arg-limit] \
1829 . ds doc-macro-name Qc
1831 . ds doc-quote-right "\*[q]
1833 . doc-enclose-close \$@
1837 .\" NS So user macro
1838 .\" NS single quote open
1841 .\" NS doc-macro-name
1842 .\" NS doc-quote-left
1844 .\" NS width register `So' set in doc-common
1847 . if !\n[doc-arg-limit] \
1848 . ds doc-macro-name So
1850 . ds doc-quote-left "\*[doc-left-singlequote]
1852 . doc-enclose-open \$@
1856 .\" NS Sc user macro
1857 .\" NS single quote close
1860 .\" NS doc-macro-name
1861 .\" NS doc-quote-right
1863 .\" NS width register `Sc' set in doc-common
1866 . if !\n[doc-arg-limit] \
1867 . ds doc-macro-name Sc
1869 . ds doc-quote-right "\*[doc-right-singlequote]
1871 . doc-enclose-close \$@
1875 .\" NS Xo user macro
1879 .\" NS doc-macro-name
1880 .\" NS doc-quote-left
1882 .\" NS width register `Xo' set in doc-common
1885 . if !\n[doc-arg-limit] \
1886 . ds doc-macro-name Xo
1890 . doc-enclose-open \$@
1894 .\" NS Xc user macro
1898 .\" NS doc-macro-name
1899 .\" NS doc-quote-right
1901 .\" NS width register `Xc' set in doc-common
1904 . if !\n[doc-arg-limit] \
1905 . ds doc-macro-name Xc
1907 . ds doc-quote-right
1909 . doc-enclose-close \$@
1913 .\" NS doc-nesting-level global register
1914 .\" NS used by `doc-enclose-open' and `doc-enclose-close'
1916 .nr doc-nesting-level 0
1919 .\" NS doc-in-list global register (bool)
1920 .\" NS whether we are in (logical) .It
1925 .\" NS doc-enclose-open macro
1926 .\" NS enclose string open
1930 .\" NS doc-nesting-level
1932 .de doc-enclose-open
1933 . if !\n[doc-arg-limit] \
1934 . doc-parse-args \$@
1937 . doc-print-prefixes
1940 . nop \)\*[doc-quote-left]\)\c
1942 . \" start enclosure box
1943 . box doc-enclosure-box\n[doc-nesting-level]
1944 . ev doc-enclosure-env\n[doc-nesting-level]
1948 . \" we insert something to make .chop always work
1951 . \" increase nesting level *after* parsing of arguments
1952 . nr doc-nesting-level +1
1954 . if \n[doc-arg-limit] \{\
1956 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
1957 . doc-print-recursive
1964 .\" NS doc-enclose-close macro
1965 .\" NS enclose string close
1968 .\" NS doc-nesting-level
1970 .de doc-enclose-close
1971 . nr doc-nesting-level -1
1973 . \" finish enclosure box
1977 . chop doc-enclosure-box\n[doc-nesting-level]
1978 . unformat doc-enclosure-box\n[doc-nesting-level]
1981 . nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
1982 . nop \)\*[doc-quote-right]\)\c
1984 . if !\n[doc-arg-limit] \{\
1985 . doc-parse-args \$@
1988 . doc-print-and-reset
1991 . if \n[doc-arg-limit] \{\
1992 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
1993 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
1995 . doc-print-recursive
1998 . doc-print-and-reset
2001 . \" shall we finish .It macro?
2002 . if !"\*[doc-macro-name]"It" \
2003 . if \n[doc-in-list] \
2004 . if !\n[doc-nesting-level] \
2005 . doc-\*[doc-list-type-stack\n[doc-list-depth]]
2009 .\" NS Pf user macro
2010 .\" NS prefix: `.Pf prefix arg ...'
2014 .\" NS doc-macro-name
2015 .\" NS doc-quote-left
2017 .\" NS width register `Pf' set in doc-common
2020 . if !\n[doc-arg-limit] \
2021 . ds doc-macro-name Pf
2023 . ie \n[doc-arg-limit] \{\
2024 . ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
2026 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
2029 . tm mdoc warning: .Pf: trailing prefix (#\n[.c])
2035 . doc-parse-args \$@
2037 . tm mdoc warning: .Pf: missing arguments (#\n[.c])
2041 . if \n[doc-arg-limit] \{\
2043 . ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
2044 . doc-print-and-reset
2046 . doc-do-\n[doc-type\n[doc-arg-ptr]]
2051 .\" NS Ns user macro
2052 .\" NS remove space (space removal done by `doc-parse-args')
2056 .\" NS doc-macro-name
2058 .\" NS width register `Ns' set in doc-common
2061 . if !\n[doc-arg-limit] \{\
2063 . ds doc-macro-name Ns
2064 . doc-parse-args \$@
2067 . tm Usage: .Ns must be called with arguments (#\n[.c])
2070 . if \n[doc-arg-limit] \{\
2072 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2073 . doc-print-recursive
2080 .\" NS Ap user macro
2081 .\" NS append an apostrophe
2083 .\" NS width register `Ap' set in doc-common
2086 . ie !\n[doc-arg-limit] \
2087 . tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
2091 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
2092 . doc-print-recursive
2099 .\" NS doc-space global string
2100 .\" NS current inter-argument space
2102 .ds doc-space "\*[doc-soft-space]
2105 .\" NS doc-soft-space constant string
2106 .\" NS soft (stretchable) space (defined in doc-common)
2109 .\" NS doc-hard-space constant string
2110 .\" NS hard (unpaddable) space (defined in doc-common)
2113 .\" NS doc-set-hard-space macro
2114 .\" NS set current space string to hard (unpaddable) space.
2117 .\" NS doc-saved-space
2120 .de doc-set-hard-space
2121 . ie "\*[doc-space]"" \
2122 . ds doc-saved-space "\*[doc-hard-space]
2124 . ds doc-space "\*[doc-hard-space]
2128 .\" NS doc-set-soft-space macro
2129 .\" NS set current space string to soft space
2132 .\" NS doc-saved-space
2135 .de doc-set-soft-space
2136 . ie "\*[doc-space]"" \
2137 . ds doc-saved-space "\*[doc-soft-space]
2139 . ds doc-space "\*[doc-soft-space]
2143 .\" NS doc-space-mode global register (bool)
2144 .\" NS default is one (space mode on)
2146 .nr doc-space-mode 1
2149 .\" NS doc-saved-space global string
2150 .\" NS saved value of `doc-space'
2152 .ds doc-saved-space "\*[doc-space]
2155 .\" NS doc-have-space global register (bool)
2156 .\" NS set if last command was horizontal space
2158 .nr doc-have-space 0
2161 .\" NS Sm user macro
2162 .\" NS space mode (`.Sm'/`.Sm on'/`.Sm off')
2164 .\" NS without argument, toggle space mode
2167 .\" NS doc-arg-limit
2170 .\" NS doc-macro-name
2172 .\" NS doc-saved-space
2174 .\" NS doc-space-mode
2177 .\" NS local variables:
2180 .\" NS width register `Sm' set in doc-common
2183 . ie \n[doc-have-space] \
2188 . if !\n[doc-arg-limit] \{\
2190 . ds doc-macro-name Sm
2191 . doc-parse-args \$@
2194 . ie \n[doc-space-mode] \{\
2195 . ds doc-saved-space "\*[doc-space]
2197 . nr doc-space-mode 0
2200 . ds doc-space "\*[doc-saved-space]
2201 . nr doc-space-mode 1
2203 . \" finish line only if it is interrupted and `doc-have-space'
2205 . if \n[doc-reg-Sm] \
2211 . if !\n[doc-arg-limit] \
2216 . \" avoid a warning message in case `Sm' is the last parameter
2217 . if !d doc-arg\n[doc-arg-ptr] \
2218 . ds doc-arg\n[doc-arg-ptr]
2220 . ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
2221 . ds doc-space "\*[doc-saved-space]
2222 . nr doc-space-mode 1
2225 . ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
2226 . ds doc-saved-space "\*[doc-space]
2228 . nr doc-space-mode 0
2231 . \" no argument for Sm
2233 . ie \n[doc-space-mode] \{\
2234 . ds doc-saved-space "\*[doc-space]
2236 . nr doc-space-mode 0
2239 . ds doc-space "\*[doc-saved-space]
2240 . nr doc-space-mode 1
2244 . ie \n[doc-space-mode] \{\
2245 . \" recompute space vector for remaining arguments
2246 . nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
2247 . nr doc-arg-limit \n[doc-arg-ptr]
2248 . if \n[doc-num-args] \
2249 . doc-parse-space-vector
2251 . \" finish line only if it is interrupted and `doc-have-space'
2253 . if \n[doc-reg-Sm] \
2258 . \" reset remaining space vector elements
2259 . nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
2260 . while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
2261 . ds doc-space\n[doc-reg-Sm]
2263 . \" the body of a `while' request must end with the fitting `\}'!
2267 . \" do we have parameters to print?
2268 . ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
2269 . \" skip `Sm' argument
2271 . doc-print-recursive
2278 .\" NS doc-arg-type immediate register
2279 .\" NS argument type (macro=1, string=2, punctuation suffix=3,
2280 .\" NS punctuation prefix=4)
2285 .\" NS doc-get-arg-type macro
2286 .\" NS get argument type
2288 .\" NS this macro expects the width of the argument in `doc-width'
2293 .de doc-get-arg-type
2296 . if ((\n[doc-width] < 4) & \A
\a\$1
\a) \{\
2297 . ie (\n[doc-width] == 1) \{\
2298 . if r doc-punct\$1 \
2299 . nr doc-arg-type \n[doc-punct\$1]
2309 .\" NS doc-get-arg-type* macro
2310 .\" NS similar to as `doc-get-arg-type' but uses doc-argXXX strings
2312 .\" NS this macro sets the `doc-width' register using the `length' request
2313 .\" NS to get the number of characters in a string literally
2319 .de doc-get-arg-type*
2321 . length doc-width "\*[doc-arg\$1]
2323 . if ((\n[doc-width] < 4) & \A
\a\*[doc-arg\$1]
\a) \{\
2324 . ie (\n[doc-width] == 1) \{\
2325 . if r doc-punct\*[doc-arg\$1] \
2326 . nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
2329 . if r \*[doc-arg\$1] \
2330 . if d \*[doc-arg\$1] \
2336 .\" NS doc-set-spacing-1 macro
2337 .\" NS set spacing for macros
2342 .\" NS local variables:
2343 .\" NS doc-reg-dssfm
2344 .\" NS doc-reg-dssfm1
2346 .de doc-set-spacing-1
2347 . nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
2349 . \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
2351 . ie (\n[doc-reg-dssfm1] == 3) \{\
2352 . if \n[doc-arg-limit] \{\
2353 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2354 . ds doc-space\n[doc-reg-dssfm]
2356 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2359 . \" macros like .Ap and .Ns have value 2 (remove space before and after
2361 . ie (\n[doc-reg-dssfm1] == 2) \{\
2362 . if \n[doc-arg-limit] \{\
2363 . nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
2364 . ds doc-space\n[doc-reg-dssfm]
2366 . ds doc-space\n[doc-arg-limit]
2369 . ds doc-space\n[doc-arg-limit]
2374 .\" NS doc-set-spacing-2 macro
2375 .\" NS set spacing for strings
2380 .de doc-set-spacing-2
2381 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2385 .\" NS doc-set-spacing-3 macro
2386 .\" NS set spacing for punctuation suffixes
2391 .\" NS local variables:
2392 .\" NS doc-reg-dssfps
2394 .de doc-set-spacing-3
2395 . if \n[doc-arg-limit] \{\
2396 . nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
2397 . ds doc-space\n[doc-reg-dssfps]
2400 . ds doc-space\n[doc-arg-limit] "\*[doc-space]
2404 .\" NS doc-set-spacing-4 macro
2405 .\" NS set spacing for punctuation prefixes
2410 .de doc-set-spacing-4
2411 . ds doc-space\n[doc-arg-limit]
2415 .\" type switches (on current argument doc-arg-ptr)
2418 .\" NS doc-do-1 macro
2419 .\" NS call request if macro
2422 . \*[doc-arg\n[doc-arg-ptr]]
2426 .\" NS doc-do-2 macro
2427 .\" NS call .doc-print-recursive if string
2429 .als doc-do-2 doc-print-recursive
2432 .\" NS doc-do-3 macro
2433 .\" NS call .doc-print-recursive if punctuation suffix
2435 .als doc-do-3 doc-print-recursive
2438 .\" NS doc-do-4 macro
2439 .\" NS call .doc-print-recursive if punctuation prefix
2441 .als doc-do-4 doc-print-recursive
2444 .\" NS doc-fontmode-depth global register
2445 .\" NS font mode level
2447 .nr doc-fontmode-depth 0
2450 .\" NS doc-fontmode-font-stackXXX global register
2451 .\" NS stack of saved current font values from `Bf' macro
2454 .\" NS doc-fontmode-depth
2456 .nr doc-fontmode-font-stack0 0
2459 .\" NS doc-fontmode-size-stackXXX global register
2460 .\" NS stack of saved current size values from `Bf' macro
2463 .\" NS doc-fontmode-depth
2465 .nr doc-fontmode-size-stack0 0
2468 .\" NS Bf user macro
2469 .\" NS begin font mode (will be begin-mode/end-mode in groff & TeX)
2472 .\" NS doc-fontmode-depth
2473 .\" NS doc-fontmode-font-stackXXX
2474 .\" NS doc-fontmode-size-stackXXX
2475 .\" NS doc-macro-name
2477 .\" NS width register `Bf' set in doc-common
2480 . ds doc-macro-name Bf
2483 . nr doc-fontmode-depth +1
2485 . \" save current font and size
2486 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
2487 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
2490 . nop \*[doc-Em-font]\c
2491 . el \{ .ie "\$1"Li" \
2492 . nop \*[doc-Li-font]\c
2493 . el \{ .ie "\$1"Sy" \
2494 . nop \*[doc-Sy-font]\c
2495 . el \{ .ie "\$1"-emphasis" \
2496 . nop \*[doc-Em-font]\c
2497 . el \{ .ie "\$1"-literal" \
2498 . nop \*[doc-Li-font]\c
2499 . el \{ .ie "\$1"-symbolic" \
2500 . nop \*[doc-Sy-font]\c
2502 . tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
2506 . tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
2510 .\" NS Ef user macro
2511 .\" NS end font mode
2514 .\" NS doc-macro-name
2516 .\" NS width register `Ef' set in doc-common
2519 . ds doc-macro-name Ef
2521 . ie \n[doc-fontmode-depth] \{\
2522 . \" restore saved font and size
2523 . nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
2524 . nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
2526 . nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
2527 . nr doc-curr-font \n[.f]
2528 . nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
2529 . nr doc-curr-size \n[.ps]
2530 . nr doc-fontmode-depth -1
2533 . tm mdoc warning: Extraneous .Ef (#\n[.c])
2537 .\" NS doc-keep-type global register
2538 .\" NS current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
2543 .\" NS Bk user macro
2547 .\" NS doc-keep-type
2548 .\" NS doc-macro-name
2550 .\" NS width register `Bk' set in doc-common
2553 . ds doc-macro-name Bk
2555 . if \n[doc-keep-type] \
2556 . tm .Bk: nesting keeps not implemented yet. (#\n[.c])
2558 . ie "\$1"-lines" \{\
2559 . nr doc-keep-type 2
2560 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2562 . el \{ .ie "\$1"-words" \{\
2563 . nr doc-keep-type 1
2564 . doc-set-hard-space
2566 . el \{ .ie "\$1"" \{\
2568 . nr doc-keep-type 1
2569 . doc-set-hard-space
2572 . tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
2573 . nr doc-keep-type 3
2576 \#. nr doc-nesting-level +1
2580 .\" NS Ek user macro
2584 .\" NS doc-keep-type
2585 .\" NS doc-macro-name
2587 .\" NS width register `Ek' set in doc-common
2590 . ds doc-macro-name Ek
2592 \#. nr doc-nesting-level -1
2595 . tm Usage: .Ek (does not take arguments) (#\n[.c])
2597 . if !\n[doc-keep-type] \
2598 . tm mdoc warning: .Ek found without .Bk before (#\n[.c])
2600 . ie (\n[doc-keep-type] == 1) \
2601 . doc-set-soft-space
2602 . el \{ .if (\n[doc-keep-type] == 2) \
2603 . tm .Bk -lines: Not implemented yet. (#\n[.c])
2606 . nr doc-keep-type 0
2608 \#. if !"\*[doc-out-string]"" \
2609 \#. doc-print-out-string
2613 .\" NS doc-display-depth global register
2614 .\" NS display level
2616 .nr doc-display-depth 0
2619 .\" NS doc-is-compact global register (bool)
2620 .\" NS set if the `compact' keyword is given
2622 .nr doc-is-compact 0
2625 .\" NS doc-display-type-stackXXX global string
2626 .\" NS the display type stack
2629 .\" NS doc-display-depth
2631 .ds doc-display-type-stack0
2634 .\" NS doc-display-indent-stackXXX global register
2635 .\" NS stack of display indentation values
2638 .\" NS doc-display-depth
2640 .nr doc-display-indent-stack0 0
2643 .\" NS doc-display-ad-stackXXX global register
2644 .\" NS stack of saved adjustment modes
2647 .\" NS doc-display-depth
2649 .nr doc-display-ad-stack0 0
2652 .\" NS doc-display-fi-stackXXX global register
2653 .\" NS stack of saved fill modes
2656 .\" NS doc-display-depth
2658 .nr doc-display-fi-stack0 0
2661 .\" NS doc-display-ft-stackXXX global register
2662 .\" NS stack of saved fonts
2665 .\" NS doc-display-depth
2667 .nr doc-display-ft-stack0 0
2670 .\" NS doc-display-ps-stackXXX global register
2671 .\" NS stack of saved font sizes
2674 .\" NS doc-display-depth
2676 .nr doc-display-ps-stack0 0
2679 .\" NS Bd user macro
2680 .\" NS begin display
2682 .\" NS width register `Bd' set in doc-common
2685 .\" NS doc-curr-font
2686 .\" NS doc-curr-size
2687 .\" NS doc-display-depth
2688 .\" NS doc-display-ad-stackXXX
2689 .\" NS doc-display-fi-stackXXX
2690 .\" NS doc-display-ft-stackXXX
2691 .\" NS doc-display-ps-stackXXX
2692 .\" NS doc-display-file
2693 .\" NS doc-display-indent-stackXXX
2694 .\" NS doc-display-type-stackXXX
2695 .\" NS doc-is-compact
2696 .\" NS doc-macro-name
2698 .\" NS local variables:
2702 . ds doc-macro-name Bd
2705 . tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
2706 . tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c])
2710 . nr doc-is-compact 0
2711 . ds doc-display-file
2713 . nr doc-display-depth +1
2715 . \" save current adjustment and fill modes
2716 . nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
2717 . nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
2719 . ie "\$1"-literal" \{\
2720 . ds doc-display-type-stack\n[doc-display-depth] literal
2721 . nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
2722 . nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
2730 . el \{ .ie "\$1"-filled" \{\
2731 . ds doc-display-type-stack\n[doc-display-depth] filled
2735 . el \{ .ie "\$1"-ragged" \{\
2736 . ds doc-display-type-stack\n[doc-display-depth] ragged
2740 . el \{ .ie "\$1"-centered" \{\
2741 . ds doc-display-type-stack\n[doc-display-depth] centered
2745 . el \{ .ie "\$1"-unfilled" \{\
2746 . ds doc-display-type-stack\n[doc-display-depth] unfilled
2750 . tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
2751 . tm1 " in .Bd macro (#\n[.c])
2755 . \" have we seen an argument?
2756 . if \n[doc-reg-Bd] \{\
2758 . \" check other arguments
2760 . doc-do-Bd-args \$@
2763 . \" avoid warning about non-existent register
2764 . if !r doc-display-indent-stack\n[doc-display-depth] \
2765 . nr doc-display-indent-stack\n[doc-display-depth] 0
2767 . if \n[doc-display-indent-stack\n[doc-display-depth]] \
2768 . in +\n[doc-display-indent-stack\n[doc-display-depth]]u
2770 . if !\n[doc-is-compact] \
2771 . sp \n[doc-display-vertical]u
2773 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
2775 . nop \*[doc-Li-font]\c
2780 . if !"\*[doc-display-file]"" \
2781 . so \*[doc-display-file]
2783 . nr doc-is-compact 0
2784 . ds doc-display-file
2788 .\" NS doc-do-Bd-args macro
2789 .\" NS resolve remaining .Bd arguments
2792 .\" NS doc-display-file
2793 .\" NS doc-display-indent-stackXXX
2794 .\" NS doc-is-compact
2796 .\" NS local variables:
2798 .\" NS doc-reg-ddBa1
2799 .\" NS doc-reg-ddBa2
2800 .\" NS doc-reg-ddBa3
2801 .\" NS doc-reg-ddBa4
2807 . ie "\$1"-offset" \{\
2811 . nr doc-display-indent-stack\n[doc-display-depth] 0
2812 . el \{ .ie "\$2"right" \
2813 . nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
2814 . el \{ .ie "\$2"center" \
2815 . nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
2816 . el \{ .ie "\$2"indent" \
2817 . nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
2818 . el \{ .ie "\$2"indent-two" \
2819 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
2824 . \" not a known keyword
2825 . if (\n[doc-reg-ddBa] == 1) \{\
2828 . nr doc-reg-ddBa1 0
2829 . if \B
\a(\$2)
\a \{\
2830 . \" disable warnings related to scaling indicators (32)
2831 . nr doc-reg-ddBa2 \n[.warn]
2832 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
2834 . \" values without a scaling indicator are taken as strings;
2835 . \" we test whether the parameter string with and without the last
2836 . \" character yields identical numerical results (ignoring the
2837 . \" scaling indicator)
2838 . ds doc-str-ddBa "\$2
2839 . substring doc-str-ddBa 0 -2
2840 . if \B
\a(\*[doc-str-ddBa])
\a \{\
2841 . nr doc-reg-ddBa3 (;(\$2))
2842 . nr doc-reg-ddBa4 (\*[doc-str-ddBa])
2843 . if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
2844 . nr doc-reg-ddBa1 1
2847 . \" enable all warnings again
2848 . warn \n[doc-reg-ddBa2]
2851 . ie \n[doc-reg-ddBa1] \
2852 . nr doc-display-indent-stack\n[doc-display-depth] \$2
2854 . doc-get-width "\$2"
2855 . ie (\n[doc-width] <= 3) \{\
2856 . \" if the offset parameter is a macro, use the macro's
2857 . \" width as specified in doc-common
2858 . doc-get-arg-type "\$2"
2859 . ie (\n[doc-arg-type] == 1) \
2860 . nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
2862 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2865 . nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
2868 . el \{ .ie "\$1"-compact" \
2869 . nr doc-is-compact 1
2870 . el \{ .ie "\$1"-file" \{\
2872 . ds doc-display-file "\$2
2876 . tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
2879 . tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
2882 . if (\n[doc-reg-ddBa] < \n[.$]) \{\
2883 . shift \n[doc-reg-ddBa]
2884 . doc-do-Bd-args \$@
2889 .\" NS Ed user macro
2893 .\" NS doc-display-depth
2894 .\" NS doc-display-indent-stackXXX
2895 .\" NS doc-display-type-stackXXX
2896 .\" NS doc-macro-name
2898 .\" NS width register `Ed' set in doc-common
2901 . ds doc-macro-name Ed
2905 . if !\n[doc-display-depth] \{\
2906 . tm mdoc warning: Extraneous .Ed (#\n[.c])
2907 . nr doc-display-depth 1
2910 . if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
2911 . ft \n[doc-display-ft-stack\n[doc-display-depth]]
2912 . ps \n[doc-display-ps-stack\n[doc-display-depth]]u
2915 . in -\n[doc-display-indent-stack\n[doc-display-depth]]u
2917 . \" restore saved adjustment and fill modes
2918 . ie \n[doc-display-fi-stack\n[doc-display-depth]] \
2922 . ad \n[doc-display-ad-stack\n[doc-display-depth]]
2924 . nr doc-display-indent-stack\n[doc-display-depth] 0
2925 . ds doc-display-type-stack\n[doc-display-depth]
2926 . nr doc-display-depth -1
2930 .\" NS doc-list-type-stackXXX global string
2931 .\" NS stack of list types
2934 .\" NS doc-list-depth
2936 .ds doc-list-type-stack1
2939 .\" NS doc-list-indent-stackXXX global register
2940 .\" NS stack of list indentation values
2943 .\" NS doc-list-depth
2945 .nr doc-list-indent-stack1 0
2948 .\" NS doc-list-have-indent-stackXXX global register (bool)
2949 .\" NS an indentation value is active
2952 .\" NS doc-list-depth
2954 .nr doc-list-have-indent-stack1 0
2957 .\" NS Bl user macro
2960 .\" NS width register `Bl' set in doc-common
2965 .\" NS doc-list-depth
2966 .\" NS doc-list-have-indent-stackXXX
2967 .\" NS doc-list-indent-stackXXX
2968 .\" NS doc-list-type-stackXXX
2969 .\" NS doc-macro-name
2971 .\" NS doc-num-columns
2973 .\" NS local variables:
2982 . ds doc-macro-name Bl
2983 . nr doc-list-depth +1
2986 . ie "\$1"-hang" \{\
2987 . ds doc-list-type-stack\n[doc-list-depth] hang-list
2988 . nr doc-list-indent-stack\n[doc-list-depth] 6n
2989 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2991 . el \{ .ie "\$1"-tag" \{\
2992 . ds doc-list-type-stack\n[doc-list-depth] tag-list
2993 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2995 . el \{ .ie "\$1"-item" \{\
2996 . ds doc-list-type-stack\n[doc-list-depth] item-list
2997 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2999 . el \{ .ie "\$1"-enum" \{\
3000 . ds doc-list-type-stack\n[doc-list-depth] enum-list
3001 . nr doc-list-indent-stack\n[doc-list-depth] 3n
3002 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3004 . el \{ .ie "\$1"-bullet" \{\
3005 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
3006 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3007 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3009 . el \{ .ie "\$1"-dash" \{\
3010 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3011 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3012 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3014 . el \{ .ie "\$1"-hyphen" \{\
3015 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3016 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3017 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3019 . el \{ .ie "\$1"-inset" \{\
3020 . ds doc-list-type-stack\n[doc-list-depth] inset-list
3021 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3023 . el \{ .ie "\$1"-diag" \{\
3024 . ds doc-list-type-stack\n[doc-list-depth] diag-list
3026 . el \{ .ie "\$1"-ohang" \{\
3027 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
3028 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3030 . el \{ .ie "\$1"-column" \{\
3031 . ds doc-list-type-stack\n[doc-list-depth] column-list
3035 . tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
3036 . tm1 " in .Bl macro
3039 . \}\}\}\}\}\}\}\}\}\}\}
3041 . \" we have seen a list type
3042 . if !\n[doc-arg-ptr] \{\
3045 . nr doc-list-depth -1
3051 . \" fill argument vector
3053 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
3054 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
3055 . \" dummy type and space so that doc-save-global-vars() doesn't warn
3056 . nr doc-type\n[doc-reg-Bl] 0
3057 . ds doc-space\n[doc-reg-Bl]
3061 . doc-increment-list-stack
3064 . nr doc-arg-limit \n[.$]
3068 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
3070 . \" initialize column list
3071 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3072 . doc-set-column-tab \n[doc-num-columns]
3073 ' in -\n[doc-column-indent-width]u
3074 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3075 . sp \n[doc-display-vertical]u
3078 . nr doc-num-columns 0
3085 .\" NS doc-Bl-usage macro
3088 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3089 . tm1 " [-width <string>]
3090 . tm1 " [-offset <string>] [-compact]
3091 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3092 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3093 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3097 .\" NS doc-do-Bl-args macro
3098 .\" NS resolve remaining .Bl arguments
3103 .\" NS doc-compact-list-stackXXX
3104 .\" NS doc-list-indent-stackXXX
3105 .\" NS doc-list-offset-stackXXX
3106 .\" NS doc-num-columns
3107 .\" NS doc-tag-prefix-stackXXX
3108 .\" NS doc-tag-width-stackXXX
3110 .\" NS local variables:
3114 .\" NS doc-reg-dBla1
3115 .\" NS doc-reg-dBla2
3116 .\" NS doc-reg-dBla3
3117 .\" NS doc-reg-dBla4
3119 .\" NS doc-str-dBla1
3124 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
3127 . \" avoid a warning message in case e.g. `-offset' has no parameter
3128 . nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
3129 . if !d doc-arg\n[doc-reg-dBla] \
3130 . ds doc-arg\n[doc-reg-dBla]
3134 . ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
3135 . nr doc-compact-list-stack\n[doc-list-depth] 1
3137 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
3138 . ie (\n[doc-list-depth] > 1) \{\
3139 . nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
3140 . ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
3141 . as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
3142 . length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
3143 . nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
3146 . tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
3149 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
3151 . ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
3153 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3154 . substring doc-str-dBla 0 0
3155 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3156 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3157 . substring doc-str-dBla 1
3158 . doc-first-parameter \*[doc-str-dBla]
3159 . doc-get-width "\*[doc-str-dfp]
3160 . doc-get-arg-type "\*[doc-str-dfp]
3161 . ie (\n[doc-arg-type] == 1) \
3162 . nr doc-reg-dBla1 1
3164 . nr doc-reg-dBla1 0
3167 . nr doc-reg-dBla1 0
3168 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3170 . ie \n[doc-reg-dBla1] \{\
3171 . \" execute string in a box to get the width of the diversion
3172 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3173 . doc-save-global-vars
3180 . nop \*[doc-str-dBla]
3184 . doc-restore-global-vars
3185 . doc-get-width \h'\n[dl]u'
3186 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3189 . \" test whether argument is a valid numeric expression
3190 . nr doc-reg-dBla1 0
3191 . if \B
\a(\*[doc-str-dBla])
\a \{\
3192 . \" disable warnings related to scaling indicators (32)
3193 . nr doc-reg-dBla2 \n[.warn]
3194 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3196 . \" values without a scaling indicator are taken as strings;
3197 . \" we test whether the parameter string with and without the last
3198 . \" character yields identical numerical results (ignoring the
3199 . \" scaling indicator)
3200 . ds doc-str-dBla1 "\*[doc-str-dBla]
3201 . substring doc-str-dBla1 0 -2
3202 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3203 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3204 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3205 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3206 . nr doc-reg-dBla1 1
3209 . \" enable all warnings again
3210 . warn \n[doc-reg-dBla2]
3213 . ie \n[doc-reg-dBla1] \
3214 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3216 . doc-get-arg-width \n[doc-arg-ptr]
3217 . ie (\n[doc-width] == 2) \{\
3218 . \" if the width parameter is a macro, use the macro's
3219 . \" width as specified in doc-common
3220 . doc-get-arg-type \*[doc-str-dBla]
3221 . ie (\n[doc-arg-type] == 1) \
3222 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3224 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3227 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3230 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3233 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3234 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3236 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3237 . nr doc-reg-dBla1 0
3238 . if \B
\a(\*[doc-str-dBla])
\a \{\
3239 . nr doc-reg-dBla2 \n[.warn]
3240 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3242 . ds doc-str-dBla1 "\*[doc-str-dBla]
3243 . substring doc-str-dBla1 0 -2
3244 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3245 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3246 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3247 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3248 . nr doc-reg-dBla1 1
3251 . warn \n[doc-reg-dBla2]
3254 . ie \n[doc-reg-dBla1] \
3255 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3257 . doc-get-arg-width \n[doc-arg-ptr]
3258 . ie (\n[doc-width] <= 3) \{\
3259 . \" if the offset parameter is a macro, use the macro's
3260 . \" width as specified in doc-common
3261 . doc-get-arg-type \*[doc-str-dBla]
3262 . ie (\n[doc-arg-type] == 1) \
3263 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3265 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3268 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3274 . \" not a known keyword, so it specifies the width of the next column
3275 . \" (if it is a column list)
3276 . if !\n[doc-reg-dBla] \{\
3277 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3278 . nr doc-num-columns +1
3279 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3280 . substring doc-str-dBla 0 0
3281 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3282 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3283 . substring doc-str-dBla 1
3284 . doc-first-parameter \*[doc-str-dBla]
3285 . doc-get-width "\*[doc-str-dfp]
3286 . doc-get-arg-type "\*[doc-str-dfp]
3287 . ie (\n[doc-arg-type] == 1) \
3288 . nr doc-reg-dBla1 1
3290 . nr doc-reg-dBla1 0
3293 . nr doc-reg-dBla1 0
3294 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3296 . ie \n[doc-reg-dBla1] \{\
3297 . \" execute string in a box to get the width of the diversion
3298 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3299 . doc-save-global-vars
3306 . nop \*[doc-str-dBla]
3310 . doc-restore-global-vars
3311 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3314 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3317 . tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
3318 . tm1 " in .Bl macro (#\n[.c])
3321 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3326 .\" NS doc-save-global-vars macro
3327 .\" NS save all global variables
3329 .\" NS local variables:
3332 .de doc-save-global-vars
3333 . ds doc-macro-name-saved "\*[doc-macro-name]
3334 . nr doc-arg-limit-saved \n[doc-arg-limit]
3335 . nr doc-num-args-saved \n[doc-num-args]
3336 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3339 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3340 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3341 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3342 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3343 . nr doc-reg-dsgv +1
3346 . nr doc-curr-font-saved \n[doc-curr-font]
3347 . nr doc-curr-size-saved \n[doc-curr-size]
3348 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3349 . nr doc-in-library-section-saved \n[doc-in-library-section]
3350 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3351 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3352 . nr doc-have-decl-saved \n[doc-have-decl]
3353 . nr doc-have-var-saved \n[doc-have-var]
3354 . ds doc-command-name-saved "\*[doc-command-name]
3355 . ds doc-quote-left-saved "\*[doc-quote-left]
3356 . ds doc-quote-right-saved "\*[doc-quote-right]
3357 . nr doc-nesting-level-saved \n[doc-nesting-level]
3358 . nr doc-in-list-saved \n[doc-in-list]
3359 . ds doc-space-saved "\*[doc-space]
3360 . ds doc-saved-space-saved "\*[doc-saved-space]
3361 . nr doc-space-mode-saved \n[doc-space-mode]
3362 . nr doc-have-space-saved \n[doc-have-space]
3363 . nr doc-have-slot-saved \n[doc-have-slot]
3364 . nr doc-keep-type-saved \n[doc-keep-type]
3365 . nr doc-display-depth-saved \n[doc-display-depth]
3366 . nr doc-is-compact-saved \n[doc-is-compact]
3369 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3370 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3371 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3372 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3373 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3374 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3375 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3376 . nr doc-reg-dsgv +1
3379 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3382 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3383 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3384 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3385 . nr doc-reg-dsgv +1
3388 . nr doc-list-depth-saved \n[doc-list-depth]
3391 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3392 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3393 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3394 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3395 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3396 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3397 . ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
3398 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3399 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3400 . nr doc-reg-dsgv +1
3403 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3404 . nr doc-curr-type-saved \n[doc-curr-type]
3405 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3406 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3407 . nr doc-num-columns-saved \n[doc-num-columns]
3408 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3409 . nr doc-is-func-saved \n[doc-is-func]
3410 . nr doc-have-old-func-saved \n[doc-have-old-func]
3411 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3412 . ds doc-func-arg-saved "\*[doc-func-arg]
3413 . nr doc-num-func-args-saved \n[doc-num-func-args]
3414 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3415 . nr doc-have-func-saved \n[doc-have-func]
3416 . nr doc-is-reference-saved \n[doc-is-reference]
3417 . nr doc-reference-count-saved \n[doc-reference-count]
3418 . nr doc-author-count-saved \n[doc-author-count]
3421 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3422 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3423 . nr doc-reg-dsgv +1
3426 . nr doc-book-count-saved \n[doc-book-count]
3427 . ds doc-book-name-saved "\*[doc-book-name]
3428 . nr doc-city-count-saved \n[doc-city-count]
3429 . ds doc-city-name-saved "\*[doc-city-name]
3430 . nr doc-date-count-saved \n[doc-date-count]
3431 . ds doc-date-saved "\*[doc-date]
3432 . nr doc-publisher-count-saved \n[doc-publisher-count]
3433 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3434 . nr doc-journal-count-saved \n[doc-journal-count]
3435 . ds doc-journal-name-saved "\*[doc-journal-name]
3436 . nr doc-issue-count-saved \n[doc-issue-count]
3437 . ds doc-issue-name-saved "\*[doc-issue-name]
3438 . nr doc-optional-count-saved \n[doc-optional-count]
3439 . ds doc-optional-string-saved "\*[doc-optional-string]
3440 . nr doc-page-number-count-saved \n[doc-page-number-count]
3441 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3442 . nr doc-corporate-count-saved \n[doc-corporate-count]
3443 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3444 . nr doc-report-count-saved \n[doc-report-count]
3445 . ds doc-report-name-saved "\*[doc-report-name]
3446 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3447 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3448 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3449 . nr doc-url-count-saved \n[doc-url-count]
3450 . ds doc-url-name-saved "\*[doc-url-name]
3451 . nr doc-volume-count-saved \n[doc-volume-count]
3452 . ds doc-volume-name-saved "\*[doc-volume-name]
3453 . nr doc-have-author-saved \n[doc-have-author]
3455 . ds doc-document-title-saved "\*[doc-document-title]
3456 . ds doc-volume-saved "\*[doc-volume]
3457 . ds doc-section-saved "\*[doc-section]
3458 . ds doc-operating-system-saved "\*[doc-operating-system]
3459 . ds doc-date-string-saved "\*[doc-date-string]
3460 . nr doc-header-space-saved \n[doc-header-space]
3461 . nr doc-footer-space-saved \n[doc-footer-space]
3462 . nr doc-display-vertical-saved \n[doc-display-vertical]
3463 . ds doc-header-string-saved "\*[doc-header-string]
3464 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3465 . nr doc-in-files-section-saved \n[doc-in-files-section]
3466 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3470 .\" NS doc-restore-global-vars macro
3471 .\" NS restore all global variables
3473 .\" NS local variables:
3476 .de doc-restore-global-vars
3477 . ds doc-macro-name "\*[doc-macro-name-saved]
3478 . nr doc-arg-limit \n[doc-arg-limit-saved]
3479 . nr doc-num-args \n[doc-num-args-saved]
3480 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3483 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3484 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3485 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3486 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3487 . nr doc-reg-drgv +1
3490 . nr doc-curr-font \n[doc-curr-font-saved]
3491 . nr doc-curr-size \n[doc-curr-size-saved]
3492 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3493 . nr doc-in-library-section \n[doc-in-library-section-saved]
3494 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3495 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3496 . nr doc-have-decl \n[doc-have-decl-saved]
3497 . nr doc-have-var \n[doc-have-var-saved]
3498 . ds doc-command-name "\*[doc-command-name-saved]
3499 . ds doc-quote-left "\*[doc-quote-left-saved]
3500 . ds doc-quote-right "\*[doc-quote-right-saved]
3501 . nr doc-nesting-level \n[doc-nesting-level-saved]
3502 . nr doc-in-list \n[doc-in-list-saved]
3503 . ds doc-space "\*[doc-space-saved]
3504 . ds doc-saved-space "\*[doc-saved-space-saved]
3505 . nr doc-space-mode \n[doc-space-mode-saved]
3506 . nr doc-have-space \n[doc-have-space-saved]
3507 . nr doc-have-slot \n[doc-have-slot-saved]
3508 . nr doc-keep-type \n[doc-keep-type-saved]
3509 . nr doc-display-depth \n[doc-display-depth-saved]
3510 . nr doc-is-compact \n[doc-is-compact-saved]
3513 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3514 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3515 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3516 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3517 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3518 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3519 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3520 . nr doc-reg-drgv +1
3523 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3526 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3527 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3528 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3529 . nr doc-reg-drgv +1
3532 . nr doc-list-depth \n[doc-list-depth-saved]
3535 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3536 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3537 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3538 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3539 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3540 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3541 . ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
3542 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3543 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3544 . nr doc-reg-drgv +1
3547 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3548 . nr doc-curr-type \n[doc-curr-type-saved]
3549 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3550 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3551 . nr doc-num-columns \n[doc-num-columns-saved]
3552 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3553 . nr doc-is-func \n[doc-is-func-saved]
3554 . nr doc-have-old-func \n[doc-have-old-func-saved]
3555 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3556 . ds doc-func-arg "\*[doc-func-arg-saved]
3557 . nr doc-num-func-args \n[doc-num-func-args-saved]
3558 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3559 . nr doc-have-func \n[doc-have-func-saved]
3560 . nr doc-is-reference \n[doc-is-reference-saved]
3561 . nr doc-reference-count \n[doc-reference-count-saved]
3562 . nr doc-author-count \n[doc-author-count-saved]
3565 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3566 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3567 . nr doc-reg-drgv +1
3570 . nr doc-book-count \n[doc-book-count-saved]
3571 . ds doc-book-name "\*[doc-book-name-saved]
3572 . nr doc-city-count \n[doc-city-count-saved]
3573 . ds doc-city-name "\*[doc-city-name-saved]
3574 . nr doc-date-count \n[doc-date-count-saved]
3575 . ds doc-date "\*[doc-date-saved]
3576 . nr doc-publisher-count \n[doc-publisher-count-saved]
3577 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3578 . nr doc-journal-count \n[doc-journal-count-saved]
3579 . ds doc-journal-name "\*[doc-journal-name-saved]
3580 . nr doc-issue-count \n[doc-issue-count-saved]
3581 . ds doc-issue-name "\*[doc-issue-name-saved]
3582 . nr doc-optional-count \n[doc-optional-count-saved]
3583 . ds doc-optional-string "\*[doc-optional-string-saved]
3584 . nr doc-page-number-count \n[doc-page-number-count-saved]
3585 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3586 . nr doc-corporate-count \n[doc-corporate-count-saved]
3587 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3588 . nr doc-report-count \n[doc-report-count-saved]
3589 . ds doc-report-name "\*[doc-report-name-saved]
3590 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3591 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3592 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3593 . nr doc-url-count \n[doc-url-count-saved]
3594 . ds doc-url-name "\*[doc-url-name-saved]
3595 . nr doc-volume-count \n[doc-volume-count-saved]
3596 . ds doc-volume-name "\*[doc-volume-name-saved]
3597 . nr doc-have-author \n[doc-have-author-saved]
3599 . ds doc-document-title "\*[doc-document-title-saved]
3600 . ds doc-volume "\*[doc-volume-saved]
3601 . ds doc-section "\*[doc-section-saved]
3602 . ds doc-operating-system "\*[doc-operating-system-saved]
3603 . ds doc-date-string "\*[doc-date-string-saved]
3604 . nr doc-header-space \n[doc-header-space-saved]
3605 . nr doc-footer-space \n[doc-footer-space-saved]
3606 . nr doc-display-vertical \n[doc-display-vertical-saved]
3607 . ds doc-header-string "\*[doc-header-string-saved]
3608 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3609 . nr doc-in-files-section \n[doc-in-files-section-saved]
3610 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3614 .\" NS El user macro
3618 .\" NS doc-list-depth
3619 .\" NS doc-macro-name
3621 .\" NS local variables:
3624 .\" NS width register `El' set in doc-common
3628 . tm Usage: .El (does not take arguments) (#\n[.c])
3632 . ds doc-macro-name El
3633 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3635 . ie "\*[doc-str-El]"diag-list" \
3637 . el \{ .ie "\*[doc-str-El]"column-list" \
3638 . doc-end-column-list
3639 . el \{ .ie "\*[doc-str-El]"item-list" \
3641 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3643 . el \{ .ie "\*[doc-str-El]"inset-list" \
3653 .\" NS doc-saved-Pa-font global string
3654 .\" NS saved doc-Pa-font string for section FILES (no underline if
3657 .ds doc-saved-Pa-font
3660 .\" NS doc-curr-type global register
3661 .\" NS current argument type
3666 .\" NS doc-curr-arg global string
3667 .\" NS current argument
3672 .\" NS doc-item-boxXXX global box
3673 .\" NS item boxes associated list depth
3676 .\" NS doc-list-depth
3679 .\" NS It user macro
3686 .\" NS doc-curr-type
3688 .\" NS doc-macro-name
3690 .\" NS doc-saved-Pa-font
3692 .\" NS local variables:
3695 .\" NS doc-XXX-list-type
3697 .\" NS width register `It' set in doc-common
3699 .nr doc-bullet-list-type 1
3700 .nr doc-column-list-type 0
3701 .nr doc-dash-list-type 1
3702 .nr doc-diag-list-type 0
3703 .nr doc-enum-list-type 1
3704 .nr doc-hang-list-type 2
3705 .nr doc-inset-list-type 2
3706 .nr doc-item-list-type 1
3707 .nr doc-ohang-list-type 2
3708 .nr doc-tag-list-type 2
3711 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3713 . if "\*[doc-str-It]"" \
3714 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3716 . if \n[doc-nesting-level] \{\
3717 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3726 . ds doc-macro-name It
3728 . \" fill argument vector
3730 . while (\n[doc-reg-It] <= \n[.$]) \{\
3731 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3735 . nr doc-num-args \n[.$]
3739 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3741 . if \n[doc-reg-It] \{\
3743 . box doc-item-box\n[doc-list-depth]
3744 . ev doc-item-env\n[doc-list-depth]
3750 . ie (\n[doc-reg-It] == 1) \{\
3752 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3753 . tm1 " don't take arguments (#\n[.c])
3757 . if (\n[doc-reg-It] == 2) \{\
3758 . \" handle list types with arguments
3759 . doc-parse-arg-vector
3763 . nr doc-curr-type \n[doc-type1]
3764 . ds doc-curr-arg "\*[doc-arg1]
3766 . if \n[doc-in-files-section] \{\
3767 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3769 . ds doc-Pa-font "\*[doc-No-font]
3772 . ie (\n[doc-type1] == 1) \
3776 . doc-print-recursive
3779 . tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
3780 . tm1 " require arguments (#\n[.c])
3784 . \" the previous call of `.doc-print-recursive' can contain calls to
3785 . \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
3786 . if !\n[doc-nesting-level] \
3787 . doc-\*[doc-str-It]
3791 .\" NS doc-inset-list macro
3792 .\" NS .It item of list-type inset
3798 . \" finish item box
3802 . unformat doc-item-box\n[doc-list-depth]
3804 . doc-set-vertical-and-indent 0
3808 . doc-item-box\n[doc-list-depth]
3810 . if \n[doc-in-files-section] \
3812 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3819 .\" NS doc-hang-list macro
3820 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3823 .\" NS doc-have-space
3826 .\" NS local variables:
3831 . \" finish item box
3835 . unformat doc-item-box\n[doc-list-depth]
3837 . doc-set-vertical-and-indent 1
3838 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3839 . ti -\n[doc-reg-dhl]u
3842 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3843 . doc-item-box\n[doc-list-depth]
3845 . chop doc-item-box\n[doc-list-depth]
3846 . nr doc-reg-dhl1 \n[.k]u
3847 . nop \*[doc-item-box\n[doc-list-depth]]\c
3848 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3849 . nr doc-have-space 1
3852 . if \n[doc-in-files-section] \
3854 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3861 .\" NS doc-ohang-list macro
3862 .\" NS .It item of list-type overhanging tag
3868 . \" finish item box
3872 . unformat doc-item-box\n[doc-list-depth]
3874 . doc-set-vertical-and-indent 0
3876 . doc-item-box\n[doc-list-depth]
3879 . if \n[doc-in-files-section] \
3881 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3888 .\" NS doc-item-list macro
3889 .\" NS .It item of list-type [empty tag]
3892 . \" finish (dummy) item box
3897 . doc-set-vertical-and-indent 0
3904 .\" NS doc-enum-list-count-stackXXX global register
3905 .\" NS stack of current enum count values
3908 .\" NS doc-list-depth
3910 .nr doc-enum-list-count-stack1 0
3913 .\" NS doc-enum-list macro
3914 .\" NS enumerated list
3917 .\" NS doc-enum-list-count-stackXXX
3922 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3924 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3926 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3927 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3932 .\" NS doc-bullet-list macro
3933 .\" NS bullet paragraph list
3940 . nop \)\*[doc-Sy-font]\[bu]\f[]
3945 .\" NS doc-dash-list macro
3946 .\" NS hyphen paragraph list (sub bullet list)
3953 . nop \)\*[doc-Sy-font]\-\f[]
3958 .\" NS doc-do-list macro
3959 .\" NS .It item of list-type enum/bullet/hyphen
3961 .als doc-do-list doc-hang-list
3964 .\" NS doc-diag-list-input-line-count global register
3965 .\" NS saved line number to be checked in next diag-list item
3967 .nr doc-diag-list-input-line-count 0
3970 .\" NS doc-diag-list macro
3971 .\" NS .It item of list-type diagnostic-message
3974 .\" NS doc-curr-font
3975 .\" NS doc-curr-size
3976 .\" NS doc-diag-list-input-line-count
3979 . nr doc-curr-font \n[.f]
3980 . nr doc-curr-size \n[.ps]
3982 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3983 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3990 . nr doc-diag-list-input-line-count \n[.c]
3993 . nop \*[doc-Sy-font]\c
3994 . if \n[doc-num-args] \
3995 . doc-remaining-args
3996 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
3998 . doc-print-and-reset
4002 .\" NS doc-tag-list macro
4003 .\" NS .It item of list-type `tag'
4006 .\" NS doc-have-space
4009 .\" NS local variables:
4015 . \" finish item box
4019 . unformat doc-item-box\n[doc-list-depth]
4021 . \" we use a box without `.nf' to compute the tag width (via `dl' register)
4028 . doc-item-box\n[doc-list-depth]
4033 . if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
4034 . if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4035 . in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4036 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
4040 . doc-set-vertical-and-indent 1
4041 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4042 . ti -\n[doc-reg-dtl]u
4045 . doc-item-box\n[doc-list-depth]
4046 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
4049 . \" format the tag separately to prevent stretching of spaces
4055 . nr doc-have-space 1
4058 . if \n[doc-in-files-section] \
4060 . ds doc-Pa-font "\*[doc-saved-Pa-font]
4067 .\" NS doc-get-tag-width macro
4068 .\" NS resolve unknown tag width (`tag' list-type only)
4071 .\" NS doc-list-indent-stackXXX
4072 .\" NS doc-tag-width-stackXXX
4076 .\" NS doc-curr-type
4078 .de doc-get-tag-width
4079 . ie (\n[doc-curr-type] == 1) \{\
4080 . ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
4081 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
4084 . ds doc-tag-width-stack\n[doc-list-depth] No
4085 . nr doc-list-indent-stack\n[doc-list-depth] \n[No]
4090 .\" NS doc-set-vertical-and-indent macro
4091 .\" NS set up vertical spacing (if not compact) and indentation (with
4092 .\" NS offset if argument is non-zero)
4095 .\" NS doc-list-have-indent-stackXXX
4097 .de doc-set-vertical-and-indent
4098 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4099 . sp \n[doc-display-vertical]u
4101 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4102 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4104 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4112 .\" NS doc-list-depth global register
4113 .\" NS list type stack counter
4115 .nr doc-list-depth 0
4118 .\" NS doc-num-columns global register
4119 .\" NS number of columns
4121 .nr doc-num-columns 0
4124 .\" NS doc-compact-list-stackXXX global register (bool)
4125 .\" NS stack of flags to indicate whether a particular list is compact
4128 .\" NS doc-list-depth
4130 .nr doc-compact-list-stack1 0
4133 .\" NS doc-tag-prefix-stackXXX global string
4134 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4137 .\" NS doc-list-depth
4139 .ds doc-tag-prefix-stack1
4142 .\" NS doc-tag-width-stackXXX global string
4143 .\" NS stack of strings indicating how to set up current element of
4144 .\" NS doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
4145 .\" NS directly; if it is a macro name, use the macro's width value;
4146 .\" NS otherwise, `doc-get-tag-width' uses width value of `No'.
4149 .\" NS doc-list-depth
4151 .ds doc-tag-width-stack0
4152 .ds doc-tag-width-stack1
4155 .\" NS doc-list-offset-stackXXX global register
4156 .\" NS stack of list offsets
4159 .\" NS doc-list-depth
4161 .nr doc-list-offset-stack1 0
4164 .\" NS doc-end-list macro
4165 .\" NS list end function; resets indentation (and offset if argument is
4169 .\" NS doc-list-depth
4170 .\" NS doc-list-offset-stackXXX
4174 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4176 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4178 . if (\n[doc-list-depth] <= 0) \
4179 . tm mdoc warning: extraneous .El call (#\n[.c])
4181 . doc-decrement-list-stack
4182 . nr doc-list-depth -1
4186 .\" NS doc-increment-list-stack macro
4187 .\" NS set up next block for list
4190 .\" NS doc-compact-list-stackXXX
4191 .\" NS doc-list-have-indent-stackXXX
4192 .\" NS doc-list-indent-stackXXX
4193 .\" NS doc-list-offset-stackXXX
4194 .\" NS doc-list-type-stackXXX
4195 .\" NS doc-tag-prefix-stackXXX
4196 .\" NS doc-tag-width-stackXXX
4197 .\" NS doc-enum-list-count-stackXXX
4199 .\" NS local variables:
4202 .de doc-increment-list-stack
4203 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4204 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4205 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4206 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4207 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4208 . ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
4209 . ds doc-list-type-stack\n[doc-reg-dils]
4210 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4211 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4215 .\" NS doc-decrement-list-stack macro
4216 .\" NS decrement stack
4219 .\" NS doc-compact-list-stackXXX
4220 .\" NS doc-list-have-indent-stackXXX
4221 .\" NS doc-list-indent-stackXXX
4222 .\" NS doc-list-offset-stackXXX
4223 .\" NS doc-list-type-stackXXX
4224 .\" NS doc-tag-prefix-stackXXX
4225 .\" NS doc-tag-width-stackXXX
4226 .\" NS doc-enum-list-count-stackXXX
4228 .de doc-decrement-list-stack
4229 . ds doc-list-type-stack\n[doc-list-depth]
4230 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4231 . nr doc-list-indent-stack\n[doc-list-depth] 0
4232 . nr doc-list-offset-stack\n[doc-list-depth] 0
4233 . ds doc-tag-prefix-stack\n[doc-list-depth]
4234 . ds doc-tag-width-stack\n[doc-list-depth]
4235 . nr doc-compact-list-stack\n[doc-list-depth] 0
4236 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4240 .\" NS Xr user macro
4241 .\" NS cross reference (for man pages only)
4245 .\" NS doc-macro-name
4247 .\" NS local variables:
4250 .\" NS width register `Xr' set in doc-common
4253 . if !\n[doc-arg-limit] \{\
4255 . ds doc-macro-name Xr
4256 . doc-parse-args \$@
4262 . if !\n[doc-arg-limit] \
4266 . doc-print-prefixes
4267 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4268 . \" first argument must be a string
4269 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4270 . nr doc-curr-font \n[.f]
4271 . nr doc-curr-size \n[.ps]
4272 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4274 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4275 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4276 . \" modify second argument if it is a string and
4277 . \" remove space in between
4278 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4279 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4280 . ds doc-space\n[doc-arg-ptr]
4283 . doc-print-recursive
4293 .\" NS doc-Xr-usage macro
4296 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4301 .\" NS Sx user macro
4302 .\" NS cross section reference
4304 .\" NS width register `Sx' set in doc-common
4306 .als Sx doc-generic-macro
4307 .ds doc-Sx-usage section_header
4310 .\" NS doc-end-column-list macro
4311 .\" NS column-list end-list
4314 .\" NS doc-list-depth
4316 .de doc-end-column-list
4318 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4321 . doc-decrement-list-stack
4322 . nr doc-list-depth -1
4326 .\" NS doc-column-indent-width global register
4327 .\" NS holds the indent width for a column list
4329 .nr doc-column-indent-width 0
4332 .\" NS doc-set-column-tab macro
4333 .\" NS establish tabs for list-type column: `.doc-set-column-tab num_cols'
4336 .\" NS doc-column-indent-width
4338 .\" NS local variables:
4341 .\" NS doc-str-dsct1
4343 .de doc-set-column-tab
4346 . nr doc-column-indent-width 0
4349 . ds doc-str-dsct1 " \"
4352 . ds doc-str-dsct1 " \"
4354 . \" XXX: this is packed abnormally close -- intercolumn width
4355 . \" should be configurable
4356 . ds doc-str-dsct1 " \"
4359 . while (\n[doc-reg-dsct] <= \$1) \{\
4360 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4361 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4362 . nr doc-reg-dsct +1
4365 . ta \*[doc-str-dsct]
4366 ' in +\n[doc-column-indent-width]u
4370 .\" NS doc-column-list macro
4375 .\" NS doc-list-indent-stackXXX
4378 .\" NS local variables:
4382 . if \n[doc-num-args] \
4383 . doc-parse-arg-vector
4386 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4387 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4391 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4392 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4393 . ds doc-space\n[doc-reg-dcl]
4396 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4397 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4400 . in +\n[doc-column-indent-width]u
4402 . ti -\n[doc-column-indent-width]u
4404 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4408 .\" NS Ta user macro
4409 .\" NS append tab (\t)
4414 .\" NS width register `Ta' set in doc-common
4417 . ie \n[doc-arg-limit] \{\
4420 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4421 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4426 . tm1 "Usage: Ta must follow column entry: e.g.
4427 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4432 .\" NS Dl user macro
4433 .\" NS display (one line) literal
4435 .\" NS this function uses the `Li' font
4439 .\" NS doc-curr-font
4440 .\" NS doc-curr-size
4441 .\" NS doc-macro-name
4443 .\" NS width register `Dl' set in doc-common
4447 . in +\n[doc-display-indent]u
4449 . ie \n[doc-arg-limit] \{\
4450 . tm Usage: .Dl not callable by other macros (#\n[.c])
4455 . ds doc-macro-name Dl
4456 . doc-parse-args \$@
4458 . nr doc-curr-font \n[.f]
4459 . nr doc-curr-size \n[.ps]
4460 . nop \*[doc-Li-font]\c
4461 . doc-print-recursive
4464 . tm Usage: .Dl argument ... (#\n[.c])
4467 . in -\n[doc-display-indent]u
4471 .\" NS D1 user macro
4472 .\" NS display (one line)
4476 .\" NS doc-macro-name
4478 .\" NS width register `D1' set in doc-common
4482 . in +\n[doc-display-indent]u
4484 . ie \n[doc-arg-limit] \{\
4485 . tm Usage: .D1 not callable by other macros (#\n[.c])
4490 . ds doc-macro-name D1
4491 . doc-parse-args \$@
4493 . doc-print-recursive
4496 . tm Usage: .D1 argument ... (#\n[.c])
4499 . in -\n[doc-display-indent]u
4503 .\" NS Vt user macro
4504 .\" NS variable type (for forcing old style variable declarations);
4505 .\" NS this is not done in the same manner as .Ot for fortrash --
4506 .\" NS clean up later
4509 .\" NS doc-curr-font
4510 .\" NS doc-curr-size
4511 .\" NS doc-have-decl
4513 .\" NS doc-macro-name
4515 .\" NS width register `Vt' set in doc-common
4518 . if !\n[doc-arg-limit] \{\
4520 . ds doc-macro-name Vt
4521 . doc-parse-args \$@
4524 . tm Usage: .Vt variable_type ... (#\n[.c])
4527 . if !\n[doc-arg-limit] \
4531 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4532 . tm Usage: .Vt variable_type ... (#\n[.c])
4537 . if \n[doc-in-synopsis-section] \{\
4538 . \" if a function declaration was the last thing given,
4539 . \" want vertical space
4540 . if \n[doc-have-decl] \{\
4542 . nr doc-have-decl 0
4545 . \" if a subroutine was the last thing given, want vertical space
4546 . if \n[doc-have-func] \{\
4547 . ie \n[doc-have-var] \
4556 . nr doc-curr-font \n[.f]
4557 . nr doc-curr-size \n[.ps]
4558 . nop \*[doc-Ft-font]\c
4559 . doc-print-recursive
4561 . if \n[doc-in-synopsis-section] \{\
4562 . ie \n[doc-have-old-func] \
4563 . nop \*[doc-soft-space]\c
4570 .\" NS doc-is-func global register (bool)
4571 .\" NS set if subroutine (in synopsis only) (fortran only)
4576 .\" NS Ft user macro
4577 .\" NS function type
4580 .\" NS doc-curr-font
4581 .\" NS doc-curr-size
4582 .\" NS doc-have-decl
4585 .\" NS doc-macro-name
4587 .\" NS width register `Ft' set in doc-common
4590 . if !\n[doc-arg-limit] \{\
4592 . ds doc-macro-name Ft
4593 . doc-parse-args \$@
4596 . tm Usage: .Ft function_type ... (#\n[.c])
4599 . if !\n[doc-arg-limit] \
4603 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4604 . tm Usage: .Ft function_type ... (#\n[.c])
4609 . if \n[doc-in-synopsis-section] \{\
4610 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4612 . nr doc-have-decl 0
4616 . if \n[doc-have-var] \{\
4624 . nr doc-curr-font \n[.f]
4625 . nr doc-curr-size \n[.ps]
4626 . nop \*[doc-Ft-font]\c
4627 . doc-print-recursive
4631 .\" NS doc-have-old-func global register (bool)
4632 .\" NS set if `Ot' has been called
4634 .nr doc-have-old-func 0
4637 .\" NS Ot user macro
4638 .\" NS old function type (fortran -- no newline)
4641 .\" NS doc-have-decl
4642 .\" NS doc-have-old-func
4646 .\" NS width register `Ot' set in doc-common
4649 . nr doc-have-old-func 1
4651 . if \n[doc-in-synopsis-section] \{\
4652 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4654 . nr doc-have-decl 0
4658 . if \n[doc-have-var] \{\
4667 . nop \*[doc-Ft-font]\$*\c
4672 .\" NS Fa user macro
4673 .\" NS function arguments
4677 .\" NS doc-curr-font
4678 .\" NS doc-curr-size
4679 .\" NS doc-macro-name
4681 .\" NS width register `Fa' set in doc-common
4684 . if !\n[doc-arg-limit] \{\
4686 . ds doc-macro-name Fa
4687 . doc-parse-args \$@
4690 . tm Usage: .Fa function_arguments ... (#\n[.c])
4693 . ie \n[doc-func-arg-count] \
4697 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4698 . nr doc-curr-font \n[.f]
4699 . nr doc-curr-size \n[.ps]
4700 . nop \*[doc-Fa-font]\c
4701 . doc-print-recursive
4703 . if \n[doc-in-synopsis-section] \
4704 . if \n[doc-have-func] \
4710 .\" NS doc-func-arg-count global register
4711 .\" NS how many function arguments have been processed so far
4713 .nr doc-func-arg-count 0
4716 .\" NS doc-func-arg global string
4717 .\" NS work buffer for function name strings
4722 .\" NS doc-num-func-args global register
4723 .\" NS number of function arguments
4725 .nr doc-num-func-args 0
4728 .\" NS doc-func-args-processed global register
4729 .\" NS function arguments processed so far
4731 .nr doc-func-args-processed 0
4734 .\" NS doc-do-func macro
4735 .\" NS internal .Fa for .Fc
4741 .\" NS doc-func-arg-count
4742 .\" NS doc-func-args-processed
4743 .\" NS doc-num-func-args
4746 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4754 . nr doc-num-func-args 0
4755 . nr doc-func-args-processed 0
4757 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4758 . if (\n[doc-num-func-args] > 1) \
4759 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4761 . if (\n[doc-func-arg-count] > 1) \{\
4762 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4763 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4764 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4766 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4767 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4770 . if (\n[doc-func-arg-count] == 1) \{\
4771 . nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4774 . nr doc-func-arg-count +1
4779 .\" NS doc-have-func global register (bool)
4780 .\" NS whether we have more than one function in synopsis
4785 .\" NS Fn user macro
4790 .\" NS doc-curr-font
4791 .\" NS doc-curr-size
4792 .\" NS doc-have-decl
4793 .\" NS doc-have-func
4795 .\" NS doc-indent-synopsis
4797 .\" NS doc-macro-name
4799 .\" NS width register `Fn' set in doc-common
4802 . if !\n[doc-arg-limit] \{\
4804 . ds doc-macro-name Fn
4805 . doc-parse-args \$@
4808 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4811 . if !\n[doc-arg-limit] \
4814 . if \n[doc-in-synopsis-section] \{\
4815 . \" if there is/has been more than one subroutine declaration
4816 . ie \n[doc-is-func] \{\
4819 . nr doc-have-decl 0
4823 . if \n[doc-have-func] \{\
4826 . nr doc-have-decl 0
4829 . if \n[doc-have-decl] \{\
4834 . if \n[doc-have-var] \{\
4836 . nr doc-have-decl 0
4839 . nr doc-have-func 1
4843 . if !\n[doc-indent-synopsis] \
4844 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
4845 . if !\n[doc-indent-synopsis-active] \
4846 . in +\n[doc-indent-synopsis]u
4847 . ti -\n[doc-indent-synopsis]u
4851 . doc-print-prefixes
4852 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4853 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4858 . nr doc-curr-font \n[.f]
4859 . nr doc-curr-size \n[.ps]
4860 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4861 . nop \f[]\s[0]\*[lp]\)\c
4864 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4865 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4866 . nop \*[doc-Fa-font]\c
4868 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4872 . if \n[doc-in-synopsis-section] \
4875 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4876 . \" output the space (if needed)
4878 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4881 . doc-print-recursive
4884 . doc-print-and-reset
4886 . if \n[doc-in-synopsis-section] \
4887 . if !\n[doc-indent-synopsis-active] \
4888 . in -\n[doc-indent-synopsis]u
4892 .\" NS doc-do-func-args macro
4893 .\" NS handle function arguments
4899 .\" NS doc-func-args-processed
4900 .\" NS doc-num-func-args
4902 .\" NS local variables:
4905 .de doc-do-func-args
4906 . if \n[doc-in-synopsis-section] \{\
4908 . nr doc-num-func-args 0
4909 . nr doc-func-args-processed 0
4911 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4912 . if (\n[doc-num-func-args] > 1) \
4913 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4916 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4919 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4920 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4921 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4922 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4923 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4924 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4926 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4932 .\" NS doc-saved-nesting-level global register
4934 .nr doc-saved-nesting-level 0
4937 .\" NS doc-in-func-enclosure global register (bool)
4939 .nr doc-in-func-enclosure 0
4942 .\" NS Fo user macro
4943 .\" NS function open
4947 .\" NS doc-curr-font
4948 .\" NS doc-curr-size
4949 .\" NS doc-func-arg-count
4950 .\" NS doc-have-decl
4951 .\" NS doc-have-func
4953 .\" NS doc-in-func-enclosure
4954 .\" NS doc-indent-synopsis
4956 .\" NS doc-macro-name
4957 .\" NS doc-saved-nesting-level
4959 .\" NS width register `Fo' set in doc-common
4962 . if (\n[doc-in-func-enclosure]) \{\
4963 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4967 . nr doc-saved-nesting-level \n[doc-nesting-level]
4968 . nr doc-in-func-enclosure 1
4970 . if !\n[doc-arg-limit] \{\
4972 . ds doc-macro-name Fo
4973 . doc-parse-args \$@
4976 . tm Usage: .Fo function_name (#\n[.c])
4979 . if \n[doc-in-synopsis-section] \{\
4980 . \" if there is/has been more than one subroutine declaration
4981 . ie \n[doc-is-func] \{\
4984 . nr doc-have-decl 0
4988 . if \n[doc-have-func] \{\
4991 . nr doc-have-decl 0
4994 . if \n[doc-have-decl] \{\
4999 . if \n[doc-have-var] \{\
5001 . nr doc-have-decl 0
5004 . nr doc-have-func 1
5008 . if !\n[doc-indent-synopsis] \
5009 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
5012 . \" start function box
5020 . doc-print-prefixes
5021 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5022 . nr doc-func-arg-count 1
5023 . nr doc-curr-font \n[.f]
5024 . nr doc-curr-size \n[.ps]
5026 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
5027 . nop \f[]\s[0]\*[lp]\)\c
5033 .\" NS Fc user macro
5034 .\" NS function close
5038 .\" NS doc-func-arg-count
5039 .\" NS doc-in-func-enclosure
5040 .\" NS doc-saved-nesting-level
5041 .\" NS doc-macro-name
5043 .\" NS width register `Fc' set in doc-common
5046 . if !\n[doc-in-func-enclosure] \{\
5047 . tm mdoc warning: Extraneous .Fc (#\n[.c])
5052 . ds doc-macro-name Fc
5053 . \" the first (dummy) argument is used to get the correct spacing
5054 . doc-parse-args \) \$@
5057 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
5058 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
5060 . nr doc-func-arg-count 0
5061 . nr doc-in-func-enclosure 0
5063 . ie \n[doc-in-synopsis-section] \
5068 . \" finish function box
5073 . unformat doc-func-box
5075 . if \n[doc-in-synopsis-section] \{\
5076 . if !\n[doc-indent-synopsis-active] \
5077 . in +\n[doc-indent-synopsis]u
5078 . ti -\n[doc-indent-synopsis]u
5082 . nop \*[doc-func-box]\c
5085 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5086 . nr doc-curr-font \n[.f]
5087 . nr doc-curr-size \n[.ps]
5088 . doc-print-recursive
5091 . doc-print-and-reset
5093 . if \n[doc-in-synopsis-section] \
5094 . if !\n[doc-indent-synopsis-active] \
5095 . in -\n[doc-indent-synopsis]u
5099 .\" NS doc-build-func-string macro
5100 .\" NS collect function arguments and set hard spaces in between
5104 .\" NS doc-func-args-processed
5105 .\" NS doc-num-func-args
5107 .de doc-build-func-string
5108 . if !\n[doc-num-func-args] \{\
5109 . nr doc-num-func-args \n[.$]
5110 . nr doc-func-args-processed 0
5114 . nr doc-func-args-processed +1
5115 . as doc-func-arg "\$1
5117 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5118 . as doc-func-arg "\*[doc-hard-space]
5121 . doc-build-func-string \$@
5126 .\" Very crude references: Stash all reference info into boxes, print out
5127 .\" reference on .Re macro and clean up. Ordering very limited, no fancy
5128 .\" citations, but can do articles, journals, and books -- need to add
5129 .\" several missing options (like city etc). Should be able to grab a refer
5130 .\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
5134 .\" NS doc-is-reference global register (bool)
5135 .\" NS set if in reference
5137 .nr doc-is-reference 0
5140 .\" NS doc-reference-count global register
5141 .\" NS reference element counter
5143 .nr doc-reference-count 0
5146 .\" NS Rs user macro
5147 .\" NS reference start
5150 .\" NS doc-is-reference
5151 .\" NS doc-reference-count
5153 .\" NS width register `Rs' set in doc-common
5157 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5159 . nr doc-is-reference 1
5160 . doc-reset-reference
5161 . if \n[doc-in-see-also-section] \
5163 . nr doc-reference-count 0
5168 .\" NS Re user macro
5169 .\" NS reference end
5172 .\" NS doc-is-reference
5174 .\" NS width register `Re' set in doc-common
5178 . tm Usage: .Re (does not take arguments) (#\n[.c])
5180 . if !\n[doc-is-reference] \{\
5181 . tm mdoc warning: Extraneous .Re (#\n[.c])
5184 . doc-print-reference
5185 . doc-reset-reference
5186 . nr doc-is-reference 0
5191 .\" NS doc-reset-reference macro
5192 .\" NS reference cleanup
5195 .\" NS doc-author-count
5196 .\" NS doc-author-nameXXX
5197 .\" NS doc-book-count
5198 .\" NS doc-book-name
5199 .\" NS doc-city-count
5200 .\" NS doc-city-name
5201 .\" NS doc-corporate-count
5202 .\" NS doc-corporate-name
5204 .\" NS doc-date-count
5205 .\" NS doc-issue-count
5206 .\" NS doc-issue-name
5207 .\" NS doc-journal-count
5208 .\" NS doc-journal-name
5209 .\" NS doc-optional-count
5210 .\" NS doc-optional-string
5211 .\" NS doc-page-number-count
5212 .\" NS doc-page-number-string
5213 .\" NS doc-publisher-count
5214 .\" NS doc-publisher-name
5215 .\" NS doc-reference-count
5216 .\" NS doc-reference-title-count
5217 .\" NS doc-reference-title-name
5218 .\" NS doc-reference-title-name-for-book
5219 .\" NS doc-report-count
5220 .\" NS doc-report-name
5221 .\" NS doc-url-count
5223 .\" NS doc-volume-count
5224 .\" NS doc-volume-name
5226 .de doc-reset-reference
5227 . while (\n[doc-author-count]) \{\
5228 . ds doc-author-name\n[doc-author-count]
5229 . nr doc-author-count -1
5231 . nr doc-journal-count 0
5232 . nr doc-issue-count 0
5233 . nr doc-optional-count 0
5234 . nr doc-corporate-count 0
5235 . nr doc-report-count 0
5236 . nr doc-reference-title-count 0
5237 . nr doc-url-count 0
5238 . nr doc-volume-count 0
5239 . nr doc-city-count 0
5240 . nr doc-date-count 0
5241 . nr doc-page-number-count 0
5242 . nr doc-book-count 0
5243 . nr doc-publisher-count 0
5244 . nr doc-reference-count 0
5246 . ds doc-journal-name
5248 . ds doc-optional-string
5249 . ds doc-corporate-name
5250 . ds doc-report-name
5251 . ds doc-reference-title-name
5252 . ds doc-reference-title-name-for-book
5254 . ds doc-volume-name
5257 . ds doc-page-number-string
5259 . ds doc-publisher-name
5263 .\" NS doc-finish-reference macro
5264 .\" NS auxiliary macro for doc-print-reference
5267 .\" NS doc-reference-count
5269 .de doc-finish-reference
5270 . nr doc-reference-count -\$1
5271 . ie \n[doc-reference-count] \
5278 .\" NS doc-print-reference macro
5279 .\" NS reference print
5282 .\" NS doc-reference-count
5284 .de doc-print-reference
5288 . if \n[doc-author-count] \{\
5289 . doc-print-reference-authors
5290 . nr doc-reference-count -\n[doc-author-count]
5293 . if \n[doc-reference-title-count] \{\
5294 . unformat doc-reference-title-name
5295 . chop doc-reference-title-name
5296 . unformat doc-reference-title-name-for-book
5297 . chop doc-reference-title-name-for-book
5298 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5299 . nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
5300 . doc-finish-reference \n[doc-reference-title-count]
5303 . nop \*[doc-reference-title-name]\c
5304 . doc-finish-reference \n[doc-reference-title-count]
5307 . if \n[doc-book-count] \{\
5308 . unformat doc-book-name
5309 . chop doc-book-name
5310 . nop \*[doc-book-name]\c
5311 . doc-finish-reference \n[doc-book-count]
5314 . if \n[doc-publisher-count] \{\
5315 . unformat doc-publisher-name
5316 . chop doc-publisher-name
5317 . nop \*[doc-publisher-name]\c
5318 . doc-finish-reference \n[doc-publisher-count]
5321 . if \n[doc-journal-count] \{\
5322 . unformat doc-journal-name
5323 . chop doc-journal-name
5324 . nop \*[doc-journal-name]\c
5325 . doc-finish-reference \n[doc-journal-count]
5328 . if \n[doc-report-count] \{\
5329 . unformat doc-report-name
5330 . chop doc-report-name
5331 . nop \*[doc-report-name]\c
5332 . doc-finish-reference \n[doc-report-count]
5335 . if \n[doc-issue-count] \{\
5336 . unformat doc-issue-name
5337 . chop doc-issue-name
5338 . nop \*[doc-issue-name]\c
5339 . doc-finish-reference \n[doc-issue-count]
5342 . if \n[doc-volume-count] \{\
5343 . unformat doc-volume-name
5344 . chop doc-volume-name
5345 . nop \*[doc-volume-name]\c
5346 . doc-finish-reference \n[doc-volume-count]
5349 . if \n[doc-url-count] \{\
5350 . unformat doc-url-name
5352 . nop \*[doc-url-name]\c
5353 . doc-finish-reference \n[doc-url-count]
5356 . if \n[doc-page-number-count] \{\
5357 . unformat doc-page-number-string
5358 . chop doc-page-number-string
5359 . nop \*[doc-page-number-string]\c
5360 . doc-finish-reference \n[doc-page-number-count]
5363 . if \n[doc-corporate-count] \{\
5364 . unformat doc-corporate-name
5365 . chop doc-corporate-name
5366 . nop \*[doc-corporate-name]\c
5367 . doc-finish-reference \n[doc-corporate-count]
5370 . if \n[doc-city-count] \{\
5371 . unformat doc-city-name
5372 . chop doc-city-name
5373 . nop \*[doc-city-name]\c
5374 . doc-finish-reference \n[doc-city-count]
5377 . if \n[doc-date-count] \{\
5380 . nop \*[doc-date]\c
5381 . doc-finish-reference \n[doc-date-count]
5384 . if \n[doc-optional-count] \{\
5385 . unformat doc-optional-string
5386 . chop doc-optional-string
5387 . nop \*[doc-optional-string]\c
5388 . doc-finish-reference \n[doc-optional-count]
5391 . if \n[doc-reference-count] \
5392 . tm mdoc warning: unresolved reference problem
5394 . hy \n[doc-hyphen-flags]
5398 .\" NS doc-print-reference-authors macro
5399 .\" NS print out reference authors
5401 .\" NS local variables:
5405 .ds doc-str-dpra "and
5407 .de doc-print-reference-authors
5410 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5411 . unformat doc-author-name\n[doc-reg-dpra]
5412 . chop doc-author-name\n[doc-reg-dpra]
5413 . ie (\n[doc-author-count] > 2) \
5414 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5416 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5417 . nr doc-reg-dpra +1
5420 . unformat doc-author-name\n[doc-reg-dpra]
5421 . chop doc-author-name\n[doc-reg-dpra]
5422 . if (\n[doc-author-count] > 1) \
5423 . nop \)\*[doc-str-dpra]
5424 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5428 .\" NS doc-author-count global register
5429 .\" NS counter of author references
5431 .nr doc-author-count 0
5434 .\" NS doc-author-nameXXX global box
5435 .\" NS array of author names
5438 .\" NS doc-author-count
5440 .ds doc-author-name0
5443 .\" NS %A user macro
5444 .\" NS reference author(s)
5448 .\" NS doc-author-count
5449 .\" NS doc-curr-font
5450 .\" NS doc-curr-size
5451 .\" NS doc-macro-name
5452 .\" NS doc-reference-count
5454 .\" NS local variables:
5457 .\" NS width register `%A' set in doc-common
5460 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5461 . tm Usage: .%A author_name ... (#\n[.c])
5465 . nr doc-author-count +1
5466 . nr doc-reference-count +1
5468 . ds doc-macro-name %A
5469 . doc-parse-args \$@
5472 . nr doc-curr-font \n[.f]
5473 . nr doc-curr-size \n[.ps]
5475 . \" save to reference box
5476 . box doc-author-name\n[doc-author-count]
5485 .\" NS doc-book-count global register
5486 .\" NS counter of book references
5488 .nr doc-book-count 0
5491 .\" NS doc-book-name global box
5492 .\" NS string of collected book references
5497 .\" NS %B user macro
5498 .\" NS [reference] book name
5502 .\" NS doc-book-count
5503 .\" NS doc-curr-font
5504 .\" NS doc-curr-size
5505 .\" NS doc-macro-name
5506 .\" NS doc-reference-count
5508 .\" NS local variables:
5511 .\" NS width register `%B' set in doc-common
5514 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5515 . tm Usage: .%B book_name ... (#\n[.c])
5519 . if \n[doc-is-reference] \{\
5520 . nr doc-book-count +1
5521 . nr doc-reference-count +1
5524 . ds doc-macro-name %B
5525 . doc-parse-args \$@
5528 . nr doc-curr-font \n[.f]
5529 . nr doc-curr-size \n[.ps]
5531 . ie \n[doc-is-reference] \{\
5532 . \" append to reference box
5533 . boxa doc-book-name
5538 . nop \*[doc-Em-font]\c
5542 . nop \*[doc-Em-font]\c
5543 . doc-print-recursive
5548 .\" NS doc-city-count global register
5549 .\" NS counter of city references
5551 .nr doc-city-count 0
5554 .\" NS doc-city-name global box
5555 .\" NS string of collected city references
5560 .\" NS %C user macro
5561 .\" NS [reference] city
5565 .\" NS doc-curr-font
5566 .\" NS doc-curr-size
5567 .\" NS doc-city-count
5568 .\" NS doc-macro-name
5569 .\" NS doc-reference-count
5571 .\" NS local variables:
5574 .\" NS width register `%C' set in doc-common
5577 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5578 . tm Usage: .%C city_name ... (#\n[.c])
5582 . nr doc-city-count +1
5583 . nr doc-reference-count +1
5585 . ds doc-macro-name %C
5586 . doc-parse-args \$@
5589 . nr doc-curr-font \n[.f]
5590 . nr doc-curr-size \n[.ps]
5592 . \" append to reference box
5593 . boxa doc-city-name
5602 .\" NS doc-date-count global register
5603 .\" NS counter of date references
5605 .nr doc-date-count 0
5608 .\" NS doc-date global box
5609 .\" NS string of collected date references
5614 .\" NS %D user macro
5615 .\" NS [reference] date
5619 .\" NS doc-curr-font
5620 .\" NS doc-curr-size
5621 .\" NS doc-date-count
5622 .\" NS doc-macro-name
5623 .\" NS doc-reference-count
5625 .\" NS local variables:
5628 .\" NS width register `%D' set in doc-common
5631 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5632 . tm Usage: .%D date ... (#\n[.c])
5636 . nr doc-date-count +1
5637 . nr doc-reference-count +1
5639 . ds doc-macro-name %D
5640 . doc-parse-args \$@
5643 . nr doc-curr-font \n[.f]
5644 . nr doc-curr-size \n[.ps]
5646 . \" append to reference box
5656 .\" NS doc-publisher-count global register
5657 .\" NS counter of publisher references
5659 .nr doc-publisher-count 0
5662 .\" NS doc-publisher-name global box
5663 .\" NS string of collected publisher references
5665 .ds doc-publisher-name
5668 .\" NS %I user macro
5669 .\" NS [reference] issuer/publisher name
5673 .\" NS doc-curr-font
5674 .\" NS doc-curr-size
5675 .\" NS doc-macro-name
5676 .\" NS doc-publisher-count
5677 .\" NS doc-reference-count
5679 .\" NS local variables:
5682 .\" NS width register `%I' set in doc-common
5685 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5686 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5690 . nr doc-publisher-count +1
5691 . nr doc-reference-count +1
5693 . ds doc-macro-name %I
5694 . doc-parse-args \$@
5697 . nr doc-curr-font \n[.f]
5698 . nr doc-curr-size \n[.ps]
5700 . \" append to reference box
5701 . boxa doc-publisher-name
5706 . nop \*[doc-Em-font]\c
5711 .\" NS doc-journal-count global register
5712 .\" NS counter of journal references
5714 .nr doc-journal-count 0
5717 .\" NS doc-journal-name global box
5718 .\" NS string of collected journal references
5720 .ds doc-journal-name
5723 .\" NS %J user macro
5724 .\" NS [reference] Journal Name
5728 .\" NS doc-curr-font
5729 .\" NS doc-curr-size
5730 .\" NS doc-journal-count
5731 .\" NS doc-macro-name
5732 .\" NS doc-reference-count
5734 .\" NS local variables:
5737 .\" NS width register `%J' set in doc-common
5740 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5741 . tm Usage: .%J journal_name ... (#\n[.c])
5745 . nr doc-journal-count +1
5746 . nr doc-reference-count +1
5748 . ds doc-macro-name %J
5749 . doc-parse-args \$@
5752 . nr doc-curr-font \n[.f]
5753 . nr doc-curr-size \n[.ps]
5755 . \" append to reference box
5756 . boxa doc-journal-name
5761 . nop \*[doc-Em-font]\c
5766 .\" NS doc-issue-count global register
5767 .\" NS counter of issue number references
5769 .nr doc-issue-count 0
5772 .\" NS doc-issue-name global box
5773 .\" NS string of collected issue number references
5778 .\" NS %N user macro
5779 .\" NS [reference] issue number
5783 .\" NS doc-curr-font
5784 .\" NS doc-curr-size
5785 .\" NS doc-issue-count
5786 .\" NS doc-macro-name
5787 .\" NS doc-reference-count
5789 .\" NS local variables:
5792 .\" NS width register `%N' set in doc-common
5795 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5796 . tm Usage: .%N issue_number ... (#\n[.c])
5800 . nr doc-issue-count +1
5801 . nr doc-reference-count +1
5803 . ds doc-macro-name %N
5804 . doc-parse-args \$@
5807 . nr doc-curr-font \n[.f]
5808 . nr doc-curr-size \n[.ps]
5810 . \" append to reference box
5811 . boxa doc-issue-name
5820 .\" NS doc-optional-count global register
5821 .\" NS counter of optional information references
5823 .nr doc-optional-count 0
5826 .\" NS doc-optional-string global box
5827 .\" NS string of collected optional information references
5829 .ds doc-optional-string
5832 .\" NS %O user macro
5833 .\" NS [reference] optional information
5837 .\" NS doc-curr-font
5838 .\" NS doc-curr-size
5839 .\" NS doc-macro-name
5840 .\" NS doc-optional-count
5841 .\" NS doc-reference-count
5843 .\" NS local variables:
5846 .\" NS width register `%O' set in doc-common
5849 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5850 . tm Usage: .%O optional_information ... (#\n[.c])
5854 . nr doc-optional-count +1
5855 . nr doc-reference-count +1
5857 . ds doc-macro-name %O
5858 . doc-parse-args \$@
5861 . nr doc-curr-font \n[.f]
5862 . nr doc-curr-size \n[.ps]
5864 . \" append to reference box
5865 . boxa doc-optional-string
5874 .\" NS doc-page-number-count global register
5875 .\" NS counter of page number references
5877 .nr doc-page-number-count 0
5880 .\" NS doc-page-number-string global box
5881 .\" NS string of collected page number references
5883 .ds doc-page-number-string
5886 .\" NS %P user macro
5887 .\" NS [reference] page numbers
5891 .\" NS doc-curr-font
5892 .\" NS doc-curr-size
5893 .\" NS doc-macro-name
5894 .\" NS doc-page-number-count
5895 .\" NS doc-reference-count
5897 .\" NS local variables:
5900 .\" NS width register `%P' set in doc-common
5903 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5904 . tm Usage: .%P page_number ... (#\n[.c])
5908 . nr doc-page-number-count +1
5909 . nr doc-reference-count +1
5911 . ds doc-macro-name %P
5912 . doc-parse-args \$@
5915 . nr doc-curr-font \n[.f]
5916 . nr doc-curr-size \n[.ps]
5918 . \" append to reference box
5919 . boxa doc-page-number-string
5928 .\" NS doc-corporate-count global register
5929 .\" NS counter of corporate references
5931 .nr doc-corporate-count 0
5934 .\" NS doc-corporate-name global box
5935 .\" NS string of collected corporate references
5937 .ds doc-corporate-name
5940 .\" NS %Q user macro
5941 .\" NS corporate or foreign author
5945 .\" NS doc-corporate-count
5946 .\" NS doc-curr-font
5947 .\" NS doc-curr-size
5948 .\" NS doc-macro-name
5949 .\" NS doc-reference-count
5951 .\" NS local variables:
5954 .\" NS width register `%Q' set in doc-common
5957 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5958 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5962 . nr doc-corporate-count +1
5963 . nr doc-reference-count +1
5965 . ds doc-macro-name %Q
5966 . doc-parse-args \$@
5969 . nr doc-curr-font \n[.f]
5970 . nr doc-curr-size \n[.ps]
5972 . \" append to reference box
5973 . boxa doc-corporate-name
5982 .\" NS doc-report-count global register
5983 .\" NS counter of report references
5985 .nr doc-report-count 0
5988 .\" NS doc-report-name global box
5989 .\" NS string of collected report references
5994 .\" NS %R user macro
5995 .\" NS [reference] report name
5999 .\" NS doc-curr-font
6000 .\" NS doc-curr-size
6001 .\" NS doc-macro-name
6002 .\" NS doc-reference-count
6003 .\" NS doc-report-count
6005 .\" NS local variables:
6008 .\" NS width register `%R' set in doc-common
6011 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6012 . tm Usage: .%R reference_report ... (#\n[.c])
6016 . nr doc-report-count +1
6017 . nr doc-reference-count +1
6019 . ds doc-macro-name %R
6020 . doc-parse-args \$@
6023 . nr doc-curr-font \n[.f]
6024 . nr doc-curr-size \n[.ps]
6026 . \" append to reference box
6027 . boxa doc-report-name
6036 .\" NS doc-reference-title-count global register
6037 .\" NS counter of reference title references
6039 .nr doc-reference-title-count 0
6042 .\" NS doc-reference-title-name global box
6043 .\" NS string of collected reference title references
6045 .ds doc-reference-title-name
6048 .\" NS doc-reference-title-name-for-book global box
6049 .\" NS string of collected reference title references
6050 .\" NS (saved with another font; this is a shortcoming of groff)
6052 .ds doc-reference-title-name-for-book
6055 .\" NS %T user macro
6056 .\" NS reference title
6060 .\" NS doc-curr-font
6061 .\" NS doc-curr-size
6062 .\" NS doc-macro-name
6063 .\" NS doc-reference-title-count
6064 .\" NS doc-report-count
6066 .\" NS local variables:
6069 .\" NS width register `%T' set in doc-common
6072 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6073 . tm Usage: .%T reference_title ... (#\n[.c])
6077 . if \n[doc-is-reference] \{\
6078 . nr doc-reference-title-count +1
6079 . nr doc-reference-count +1
6082 . ds doc-macro-name %T
6083 . doc-parse-args \$@
6086 . nr doc-curr-font \n[.f]
6087 . nr doc-curr-size \n[.ps]
6088 . ie \n[doc-is-reference] \{\
6089 . \" append to reference box
6090 . boxa doc-reference-title-name-for-book
6095 . nop \*[doc-No-font]\c
6098 . \" do it a second time with another font
6099 . ds doc-macro-name %T
6100 . doc-parse-args \$@
6103 . nr doc-curr-font \n[.f]
6104 . nr doc-curr-size \n[.ps]
6105 . boxa doc-reference-title-name
6110 . nop \*[doc-Em-font]\c
6114 . nop \*[doc-Em-font]\c
6115 . doc-print-recursive
6120 .\" NS doc-url-count global register
6121 .\" NS counter of hypertext references
6126 .\" NS doc-url-name global box
6127 .\" NS string of collected hypertext references
6132 .\" NS doc-volume-count global register
6133 .\" NS counter of reference title references
6135 .nr doc-volume-count 0
6138 .\" NS doc-volume-name global box
6139 .\" NS string of collected volume references
6144 .\" NS %U user macro
6145 .\" NS hypertext reference
6149 .\" NS doc-curr-font
6150 .\" NS doc-curr-size
6151 .\" NS doc-macro-name
6152 .\" NS doc-reference-count
6153 .\" NS doc-url-count
6155 .\" NS local variables:
6158 .\" NS width register `%U' set in doc-common
6161 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6162 . tm Usage: .%U URL ... (#\n[.c])
6166 . nr doc-url-count +1
6167 . nr doc-reference-count +1
6169 . ds doc-macro-name %U
6170 . doc-parse-args \$@
6173 . nr doc-curr-font \n[.f]
6174 . nr doc-curr-size \n[.ps]
6176 . \" append to reference box
6186 .\" NS %V user macro
6187 .\" NS reference volume
6191 .\" NS doc-curr-font
6192 .\" NS doc-curr-size
6193 .\" NS doc-macro-name
6194 .\" NS doc-reference-count
6195 .\" NS doc-volume-count
6197 .\" NS local variables:
6200 .\" NS width register `%V' set in doc-common
6203 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6204 . tm Usage: .%V volume ... (#\n[.c])
6208 . nr doc-volume-count +1
6209 . nr doc-reference-count +1
6211 . ds doc-macro-name %V
6212 . doc-parse-args \$@
6215 . nr doc-curr-font \n[.f]
6216 . nr doc-curr-size \n[.ps]
6218 . \" append to reference box
6219 . boxa doc-volume-name
6228 .\" NS doc-do-references macro
6229 .\" NS reference recursion routine
6234 .\" NS local variables:
6238 .de doc-do-references
6239 . if !\n[doc-is-reference] \
6240 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6242 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6244 . ie (\n[doc-reg-ddr1] == 1) \{\
6245 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6246 . doc-append-arg \c 3
6247 . \*[doc-arg\n[doc-arg-ptr]]
6250 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6252 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6253 . \" finish reference box
6261 . nr doc-reg-ddr \n[doc-arg-ptr]
6263 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6269 .\" NS Hf user macro
6270 .\" NS source include header files.
6273 .\" NS doc-curr-font
6274 .\" NS doc-curr-size
6276 .\" NS width register `Hf' set in doc-common
6279 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6291 . Usage: .Hf file (#\n[.c])
6295 .\" NS doc-have-author global register (bool)
6298 .nr doc-have-author 0
6301 .\" NS An user macro
6306 .\" NS doc-curr-font
6307 .\" NS doc-curr-size
6308 .\" NS doc-have-author
6309 .\" NS doc-macro-name
6311 .\" NS width register `An' set in doc-common
6314 . if !\n[doc-arg-limit] \{\
6316 . ie "\$1"-nosplit" \
6317 . nr doc-in-authors-section 0
6318 . el \{ .ie "\$1"-split" \
6319 . nr doc-in-authors-section 1
6321 . ds doc-macro-name An
6322 . doc-parse-args \$@
6325 . tm1 "Usage: .An {-nosplit | -split}
6326 . tm1 " .An author_name ... (#\n[.c])
6329 . if \n[doc-in-authors-section] \{\
6330 . ie \n[doc-have-author] \
6333 . nr doc-have-author 1
6336 . if \n[doc-arg-limit] \{\
6338 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6339 . nr doc-curr-font \n[.f]
6340 . nr doc-curr-size \n[.ps]
6341 . doc-print-recursive
6344 . tm Usage: .An author_name ... (#\n[.c])
6350 .\" NS Rv user macro
6351 .\" NS return values
6353 .\" NS width register `Rv' set in doc-common
6355 .\" NS local variables:
6356 .\" NS doc-str-Rv-std-prefix
6357 .\" NS doc-str-Rv-std-suffix
6358 .\" NS doc-str-Rv-stds-prefix
6359 .\" NS doc-str-Rv-stds-and
6360 .\" NS doc-str-Rv-stds-suffix
6361 .\" NS doc-str-Rv-std0
6363 .ds doc-str-Rv-std-prefix "The
6364 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6365 .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
6366 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6367 .as doc-str-Rv-std-suffix " is set to indicate the error.
6369 .ds doc-str-Rv-stds-prefix "The
6370 .ds doc-str-Rv-stds-and "and
6371 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6372 .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
6373 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6374 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6376 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6377 .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
6378 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6379 .as doc-str-Rv-std0 " is set to indicate the error.
6383 .\" XXX: what does this function without `-std'?
6385 . if \n[doc-arg-limit] \{\
6386 . tm Usage: .Rv not callable by other macros (#\n[.c])
6392 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6397 . nr doc-reg-Rv \*[doc-section]
6398 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6399 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6402 . ie (\n[.$] > 1) \{\
6403 . nop \)\*[doc-str-Rv-stds-prefix]
6405 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6407 . Fn \$\n[doc-reg-Rv] ,
6409 . Fn \$\n[doc-reg-Rv]
6412 . nop \)\*[doc-str-Rv-stds-and]
6414 . nop \)\*[doc-str-Rv-stds-suffix]
6416 . el \{ .ie (\n[.$] == 1) \{\
6417 . nop \)\*[doc-str-Rv-std-prefix]
6419 . nop \)\*[doc-str-Rv-std-suffix]
6422 . nop \)\*[doc-str-Rv-std0]
6427 .\" NS Ex user macro
6430 .\" NS width register `Ex' set in doc-common
6432 .\" NS local variables:
6433 .\" NS doc-str-Ex-std-prefix
6434 .\" NS doc-str-Ex-std-suffix
6436 .ds doc-str-Ex-std-prefix "The
6437 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6438 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6440 .ds doc-str-Ex-stds-prefix "The
6441 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6442 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6443 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6447 .\" XXX: what does this function without `-std'?
6449 . if \n[doc-arg-limit] \{\
6450 . tm Usage: .Ex not callable by other macros (#\n[.c])
6456 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6461 . nr doc-reg-Ex \*[doc-section]
6462 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6463 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6466 . ie (\n[.$] > 1) \{\
6467 . nop \)\*[doc-str-Ex-stds-prefix]
6469 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6471 . Nm \$\n[doc-reg-Ex] ,
6473 . Nm \$\n[doc-reg-Ex]
6476 . nop \)\*[doc-str-Ex-stds-and]
6478 . nop \)\*[doc-str-Ex-stds-suffix]
6481 . nop \)\*[doc-str-Ex-std-prefix]
6483 . nop \)\*[doc-str-Ex-std-suffix]
6488 .\" NS Mt user macro
6489 .\" NS mailto (for conversion to HTML)
6492 . \" XXX: error handling missing
6497 .\" NS Lk user macro
6498 .\" NS link (for conversion to HTML)
6500 .\" NS local variables:
6505 . ds doc-str-Lk Sy \$@
6507 . ie (\n[.$] > 1) \{\
6508 . doc-get-arg-type \$2
6509 . ie (\n[doc-arg-type] < 3) \{\
6511 . ds doc-str-Lk Sy "\$1"
6512 . doc-get-width "\$1"
6515 . as doc-str-Lk " \$@
6518 . doc-get-width "\$1"
6521 . doc-get-width "\$1"
6527 . ie (\n[doc-width] >= \n[doc-reg-Lk]) \
6534 .\" NS doc-defunct-macro macro
6535 .\" NS this is the skeleton for defunct macros
6538 .de doc-defunct-macro
6539 . tmc mdoc error: .\$0 defunct
6540 . if d doc-\$0-usage \
6541 . tmc , \*[doc-\$0-usage]
6548 .als Db doc-defunct-macro
6550 .als Ds doc-defunct-macro
6552 .als Or doc-defunct-macro
6553 .ds doc-Or-usage use `|'
6555 .als Sf doc-defunct-macro
6556 .ds doc-Sf-usage use .Pf or .Ns
6562 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6563 . tm1 " Should this have been `.Em ...'?
6568 .\" NS doc-empty-line macro
6569 .\" NS emit warning and print empty line
6572 . if !\n[doc-display-depth] \
6573 . tm mdoc warning: Empty input line #\n[.c]
6583 .\" For UTF-8, map some characters conservatively for the sake
6584 .\" of easy cut and paste.
6586 .if '\*[.T]'utf8' \{\
6596 .\" load local modifications