1 .\" Copyright (c) 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in
11 .\" the documentation and/or other materials provided with the
14 .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
15 .\" 4. Neither the name of the University nor the names of its
16 .\" contributors may be used to endorse or promote products derived
17 .\" from this software without specific prior written permission.
19 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
20 .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 .\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
23 .\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 .\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 .\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27 .\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 .\" 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
35 .\" to be installed as mdoc/doc-* rather than tmac.doc-* (the filename
36 .\" 'tmac.doc-common' would be too long); when using groff, the doc-*
37 .\" files 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
1371 .\" NS as 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 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
1484 . \" created 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'
2313 .\" NS request 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
2350 . \" before argument)
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
2360 . \" after argument)
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
2836 . \" last character yields identical numerical results (ignoring
2837 . \" the 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-indent-stack\n[doc-list-depth] 6n
2994 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
2996 . el \{ .ie "\$1"-item" \{\
2997 . ds doc-list-type-stack\n[doc-list-depth] item-list
2998 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3000 . el \{ .ie "\$1"-enum" \{\
3001 . ds doc-list-type-stack\n[doc-list-depth] enum-list
3002 . nr doc-list-indent-stack\n[doc-list-depth] 3n
3003 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3005 . el \{ .ie "\$1"-bullet" \{\
3006 . ds doc-list-type-stack\n[doc-list-depth] bullet-list
3007 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3008 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3010 . el \{ .ie "\$1"-dash" \{\
3011 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3012 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3013 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3015 . el \{ .ie "\$1"-hyphen" \{\
3016 . ds doc-list-type-stack\n[doc-list-depth] dash-list
3017 . nr doc-list-indent-stack\n[doc-list-depth] 2n
3018 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3020 . el \{ .ie "\$1"-inset" \{\
3021 . ds doc-list-type-stack\n[doc-list-depth] inset-list
3022 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3024 . el \{ .ie "\$1"-diag" \{\
3025 . ds doc-list-type-stack\n[doc-list-depth] diag-list
3027 . el \{ .ie "\$1"-ohang" \{\
3028 . ds doc-list-type-stack\n[doc-list-depth] ohang-list
3029 . nr doc-list-have-indent-stack\n[doc-list-depth] 1
3031 . el \{ .ie "\$1"-column" \{\
3032 . ds doc-list-type-stack\n[doc-list-depth] column-list
3036 . tm1 "mdoc warning: Unknown list type '\$1' (or missing list type)
3037 . tm1 " in .Bl macro
3040 . \}\}\}\}\}\}\}\}\}\}\}
3042 . \" we have seen a list type
3043 . if !\n[doc-arg-ptr] \{\
3046 . nr doc-list-depth -1
3052 . \" fill argument vector
3054 . while (\n[doc-reg-Bl] <= \n[.$]) \{\
3055 . ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
3056 . \" dummy type and space so that doc-save-global-vars() doesn't warn
3057 . nr doc-type\n[doc-reg-Bl] 0
3058 . ds doc-space\n[doc-reg-Bl]
3062 . doc-increment-list-stack
3065 . nr doc-arg-limit \n[.$]
3069 . in +\n[doc-list-offset-stack\n[doc-list-depth]]u
3071 . \" initialize column list
3072 . if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3073 . doc-set-column-tab \n[doc-num-columns]
3074 ' in -\n[doc-column-indent-width]u
3075 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
3076 . sp \n[doc-display-vertical]u
3079 . nr doc-num-columns 0
3086 .\" NS doc-Bl-usage macro
3089 . tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
3090 . tm1 " [-width <string>]
3091 . tm1 " [-offset <string>] [-compact]
3092 . tm1 " .Bl -column [-offset <string>] <string1> <string2> ...
3093 . tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
3094 . tm1 " [-offset <string>] [-compact] (#\n[.c])
3098 .\" NS doc-do-Bl-args macro
3099 .\" NS resolve remaining .Bl arguments
3104 .\" NS doc-compact-list-stackXXX
3105 .\" NS doc-list-indent-stackXXX
3106 .\" NS doc-list-offset-stackXXX
3107 .\" NS doc-num-columns
3108 .\" NS doc-tag-prefix-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 (\n[doc-arg-limit] < \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-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3152 . substring doc-str-dBla 0 0
3153 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3154 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3155 . substring doc-str-dBla 1
3156 . doc-first-parameter \*[doc-str-dBla]
3157 . doc-get-width "\*[doc-str-dfp]
3158 . doc-get-arg-type "\*[doc-str-dfp]
3159 . ie (\n[doc-arg-type] == 1) \
3160 . nr doc-reg-dBla1 1
3162 . nr doc-reg-dBla1 0
3165 . nr doc-reg-dBla1 0
3166 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3168 . ie \n[doc-reg-dBla1] \{\
3169 . \" execute string in a box to get the width of the diversion
3170 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3171 . doc-save-global-vars
3178 . nop \*[doc-str-dBla]
3182 . doc-restore-global-vars
3183 . doc-get-width \h'\n[dl]u'
3184 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3187 . \" test whether argument is a valid numeric expression
3188 . nr doc-reg-dBla1 0
3189 . if \B
\a(\*[doc-str-dBla])
\a \{\
3190 . \" disable warnings related to scaling indicators (32)
3191 . nr doc-reg-dBla2 \n[.warn]
3192 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3194 . \" values without a scaling indicator are taken as strings;
3195 . \" we test whether the parameter string with and without the
3196 . \" last character yields identical numerical results (ignoring
3197 . \" the scaling indicator)
3198 . ds doc-str-dBla1 "\*[doc-str-dBla]
3199 . substring doc-str-dBla1 0 -2
3200 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3201 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3202 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3203 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3204 . nr doc-reg-dBla1 1
3207 . \" enable all warnings again
3208 . warn \n[doc-reg-dBla2]
3211 . ie \n[doc-reg-dBla1] \
3212 . nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
3214 . doc-get-arg-width \n[doc-arg-ptr]
3215 . ie (\n[doc-width] == 2) \{\
3216 . \" if the width parameter is a macro, use the macro's
3217 . \" width as specified in doc-common
3218 . doc-get-arg-type \*[doc-str-dBla]
3219 . ie (\n[doc-arg-type] == 1) \
3220 . nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3222 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3225 . nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3228 . el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
3231 . ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
3232 . nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
3234 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3235 . nr doc-reg-dBla1 0
3236 . if \B
\a(\*[doc-str-dBla])
\a \{\
3237 . nr doc-reg-dBla2 \n[.warn]
3238 . warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
3240 . ds doc-str-dBla1 "\*[doc-str-dBla]
3241 . substring doc-str-dBla1 0 -2
3242 . if \B
\a(\*[doc-str-dBla1])
\a \{\
3243 . nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
3244 . nr doc-reg-dBla4 (\*[doc-str-dBla1])
3245 . if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
3246 . nr doc-reg-dBla1 1
3249 . warn \n[doc-reg-dBla2]
3252 . ie \n[doc-reg-dBla1] \
3253 . nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
3255 . doc-get-arg-width \n[doc-arg-ptr]
3256 . ie (\n[doc-width] <= 3) \{\
3257 . \" if the offset parameter is a macro, use the macro's
3258 . \" width as specified in doc-common
3259 . doc-get-arg-type \*[doc-str-dBla]
3260 . ie (\n[doc-arg-type] == 1) \
3261 . nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
3263 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3266 . nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
3272 . \" not a known keyword, so it specifies the width of the next column
3273 . \" (if it is a column list)
3274 . if !\n[doc-reg-dBla] \{\
3275 . ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
3276 . nr doc-num-columns +1
3277 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3278 . substring doc-str-dBla 0 0
3279 . ie
\a.
\a\*[doc-str-dBla]
\a \{\
3280 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3281 . substring doc-str-dBla 1
3282 . doc-first-parameter \*[doc-str-dBla]
3283 . doc-get-width "\*[doc-str-dfp]
3284 . doc-get-arg-type "\*[doc-str-dfp]
3285 . ie (\n[doc-arg-type] == 1) \
3286 . nr doc-reg-dBla1 1
3288 . nr doc-reg-dBla1 0
3291 . nr doc-reg-dBla1 0
3292 . ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
3294 . ie \n[doc-reg-dBla1] \{\
3295 . \" execute string in a box to get the width of the diversion
3296 . ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
3297 . doc-save-global-vars
3304 . nop \*[doc-str-dBla]
3308 . doc-restore-global-vars
3309 . ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
3312 . ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
3315 . tmc mdoc warning: Unknown keyword '\*[doc-arg\n[doc-arg-ptr]]'
3316 . tm1 " in .Bl macro (#\n[.c])
3319 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
3324 .\" NS doc-save-global-vars macro
3325 .\" NS save all global variables
3327 .\" NS local variables:
3330 .de doc-save-global-vars
3331 . ds doc-macro-name-saved "\*[doc-macro-name]
3332 . nr doc-arg-limit-saved \n[doc-arg-limit]
3333 . nr doc-num-args-saved \n[doc-num-args]
3334 . nr doc-arg-ptr-saved \n[doc-arg-ptr]
3337 . while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
3338 . ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
3339 . nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
3340 . ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
3341 . nr doc-reg-dsgv +1
3344 . nr doc-curr-font-saved \n[doc-curr-font]
3345 . nr doc-curr-size-saved \n[doc-curr-size]
3346 . nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
3347 . nr doc-in-library-section-saved \n[doc-in-library-section]
3348 . nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
3349 . nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
3350 . nr doc-have-decl-saved \n[doc-have-decl]
3351 . nr doc-have-var-saved \n[doc-have-var]
3352 . ds doc-command-name-saved "\*[doc-command-name]
3353 . ds doc-quote-left-saved "\*[doc-quote-left]
3354 . ds doc-quote-right-saved "\*[doc-quote-right]
3355 . nr doc-nesting-level-saved \n[doc-nesting-level]
3356 . nr doc-in-list-saved \n[doc-in-list]
3357 . ds doc-space-saved "\*[doc-space]
3358 . ds doc-saved-space-saved "\*[doc-saved-space]
3359 . nr doc-space-mode-saved \n[doc-space-mode]
3360 . nr doc-have-space-saved \n[doc-have-space]
3361 . nr doc-have-slot-saved \n[doc-have-slot]
3362 . nr doc-keep-type-saved \n[doc-keep-type]
3363 . nr doc-display-depth-saved \n[doc-display-depth]
3364 . nr doc-is-compact-saved \n[doc-is-compact]
3367 . while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
3368 . ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
3369 . nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
3370 . nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
3371 . nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
3372 . nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
3373 . nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
3374 . nr doc-reg-dsgv +1
3377 . nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
3380 . while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
3381 . nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
3382 . nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
3383 . nr doc-reg-dsgv +1
3386 . nr doc-list-depth-saved \n[doc-list-depth]
3389 . while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
3390 . ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
3391 . nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
3392 . nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
3393 . nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
3394 . ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
3395 . nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
3396 . nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
3397 . nr doc-reg-dsgv +1
3400 . ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
3401 . nr doc-curr-type-saved \n[doc-curr-type]
3402 . ds doc-curr-arg-saved "\*[doc-curr-arg]
3403 . nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
3404 . nr doc-num-columns-saved \n[doc-num-columns]
3405 . nr doc-column-indent-width-saved \n[doc-column-indent-width]
3406 . nr doc-is-func-saved \n[doc-is-func]
3407 . nr doc-have-old-func-saved \n[doc-have-old-func]
3408 . nr doc-func-arg-count-saved \n[doc-func-arg-count]
3409 . ds doc-func-arg-saved "\*[doc-func-arg]
3410 . nr doc-num-func-args-saved \n[doc-num-func-args]
3411 . nr doc-func-args-processed-saved \n[doc-func-args-processed]
3412 . nr doc-have-func-saved \n[doc-have-func]
3413 . nr doc-is-reference-saved \n[doc-is-reference]
3414 . nr doc-reference-count-saved \n[doc-reference-count]
3415 . nr doc-author-count-saved \n[doc-author-count]
3418 . while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
3419 . ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
3420 . nr doc-reg-dsgv +1
3423 . nr doc-book-count-saved \n[doc-book-count]
3424 . ds doc-book-name-saved "\*[doc-book-name]
3425 . nr doc-city-count-saved \n[doc-city-count]
3426 . ds doc-city-name-saved "\*[doc-city-name]
3427 . nr doc-date-count-saved \n[doc-date-count]
3428 . ds doc-date-saved "\*[doc-date]
3429 . nr doc-publisher-count-saved \n[doc-publisher-count]
3430 . ds doc-publisher-name-saved "\*[doc-publisher-name]
3431 . nr doc-journal-count-saved \n[doc-journal-count]
3432 . ds doc-journal-name-saved "\*[doc-journal-name]
3433 . nr doc-issue-count-saved \n[doc-issue-count]
3434 . ds doc-issue-name-saved "\*[doc-issue-name]
3435 . nr doc-optional-count-saved \n[doc-optional-count]
3436 . ds doc-optional-string-saved "\*[doc-optional-string]
3437 . nr doc-page-number-count-saved \n[doc-page-number-count]
3438 . ds doc-page-number-string-saved "\*[doc-page-number-string]
3439 . nr doc-corporate-count-saved \n[doc-corporate-count]
3440 . ds doc-corporate-name-saved "\*[doc-corporate-name]
3441 . nr doc-report-count-saved \n[doc-report-count]
3442 . ds doc-report-name-saved "\*[doc-report-name]
3443 . nr doc-reference-title-count-saved \n[doc-reference-title-count]
3444 . ds doc-reference-title-name-saved "\*[doc-reference-title-name]
3445 . ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
3446 . nr doc-url-count-saved \n[doc-url-count]
3447 . ds doc-url-name-saved "\*[doc-url-name]
3448 . nr doc-volume-count-saved \n[doc-volume-count]
3449 . ds doc-volume-name-saved "\*[doc-volume-name]
3450 . nr doc-have-author-saved \n[doc-have-author]
3452 . ds doc-document-title-saved "\*[doc-document-title]
3453 . ds doc-volume-saved "\*[doc-volume]
3454 . ds doc-section-saved "\*[doc-section]
3455 . ds doc-operating-system-saved "\*[doc-operating-system]
3456 . ds doc-date-string-saved "\*[doc-date-string]
3457 . nr doc-header-space-saved \n[doc-header-space]
3458 . nr doc-footer-space-saved \n[doc-footer-space]
3459 . nr doc-display-vertical-saved \n[doc-display-vertical]
3460 . ds doc-header-string-saved "\*[doc-header-string]
3461 . nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
3462 . nr doc-in-files-section-saved \n[doc-in-files-section]
3463 . nr doc-in-authors-section-saved \n[doc-in-authors-section]
3467 .\" NS doc-restore-global-vars macro
3468 .\" NS restore all global variables
3470 .\" NS local variables:
3473 .de doc-restore-global-vars
3474 . ds doc-macro-name "\*[doc-macro-name-saved]
3475 . nr doc-arg-limit \n[doc-arg-limit-saved]
3476 . nr doc-num-args \n[doc-num-args-saved]
3477 . nr doc-arg-ptr \n[doc-arg-ptr-saved]
3480 . while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
3481 . ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
3482 . nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
3483 . ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
3484 . nr doc-reg-drgv +1
3487 . nr doc-curr-font \n[doc-curr-font-saved]
3488 . nr doc-curr-size \n[doc-curr-size-saved]
3489 . nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
3490 . nr doc-in-library-section \n[doc-in-library-section-saved]
3491 . nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
3492 . nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
3493 . nr doc-have-decl \n[doc-have-decl-saved]
3494 . nr doc-have-var \n[doc-have-var-saved]
3495 . ds doc-command-name "\*[doc-command-name-saved]
3496 . ds doc-quote-left "\*[doc-quote-left-saved]
3497 . ds doc-quote-right "\*[doc-quote-right-saved]
3498 . nr doc-nesting-level \n[doc-nesting-level-saved]
3499 . nr doc-in-list \n[doc-in-list-saved]
3500 . ds doc-space "\*[doc-space-saved]
3501 . ds doc-saved-space "\*[doc-saved-space-saved]
3502 . nr doc-space-mode \n[doc-space-mode-saved]
3503 . nr doc-have-space \n[doc-have-space-saved]
3504 . nr doc-have-slot \n[doc-have-slot-saved]
3505 . nr doc-keep-type \n[doc-keep-type-saved]
3506 . nr doc-display-depth \n[doc-display-depth-saved]
3507 . nr doc-is-compact \n[doc-is-compact-saved]
3510 . while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
3511 . ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
3512 . nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
3513 . nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
3514 . nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
3515 . nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
3516 . nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
3517 . nr doc-reg-drgv +1
3520 . nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
3523 . while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
3524 . nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
3525 . nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
3526 . nr doc-reg-drgv +1
3529 . nr doc-list-depth \n[doc-list-depth-saved]
3532 . while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
3533 . ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
3534 . nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
3535 . nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
3536 . nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
3537 . ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
3538 . nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
3539 . nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
3540 . nr doc-reg-drgv +1
3543 . ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
3544 . nr doc-curr-type \n[doc-curr-type-saved]
3545 . ds doc-curr-arg "\*[doc-curr-arg-saved]
3546 . nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
3547 . nr doc-num-columns \n[doc-num-columns-saved]
3548 . nr doc-column-indent-width \n[doc-column-indent-width-saved]
3549 . nr doc-is-func \n[doc-is-func-saved]
3550 . nr doc-have-old-func \n[doc-have-old-func-saved]
3551 . nr doc-func-arg-count \n[doc-func-arg-count-saved]
3552 . ds doc-func-arg "\*[doc-func-arg-saved]
3553 . nr doc-num-func-args \n[doc-num-func-args-saved]
3554 . nr doc-func-args-processed \n[doc-func-args-processed-saved]
3555 . nr doc-have-func \n[doc-have-func-saved]
3556 . nr doc-is-reference \n[doc-is-reference-saved]
3557 . nr doc-reference-count \n[doc-reference-count-saved]
3558 . nr doc-author-count \n[doc-author-count-saved]
3561 . while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
3562 . ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
3563 . nr doc-reg-drgv +1
3566 . nr doc-book-count \n[doc-book-count-saved]
3567 . ds doc-book-name "\*[doc-book-name-saved]
3568 . nr doc-city-count \n[doc-city-count-saved]
3569 . ds doc-city-name "\*[doc-city-name-saved]
3570 . nr doc-date-count \n[doc-date-count-saved]
3571 . ds doc-date "\*[doc-date-saved]
3572 . nr doc-publisher-count \n[doc-publisher-count-saved]
3573 . ds doc-publisher-name "\*[doc-publisher-name-saved]
3574 . nr doc-journal-count \n[doc-journal-count-saved]
3575 . ds doc-journal-name "\*[doc-journal-name-saved]
3576 . nr doc-issue-count \n[doc-issue-count-saved]
3577 . ds doc-issue-name "\*[doc-issue-name-saved]
3578 . nr doc-optional-count \n[doc-optional-count-saved]
3579 . ds doc-optional-string "\*[doc-optional-string-saved]
3580 . nr doc-page-number-count \n[doc-page-number-count-saved]
3581 . ds doc-page-number-string "\*[doc-page-number-string-saved]
3582 . nr doc-corporate-count \n[doc-corporate-count-saved]
3583 . ds doc-corporate-name "\*[doc-corporate-name-saved]
3584 . nr doc-report-count \n[doc-report-count-saved]
3585 . ds doc-report-name "\*[doc-report-name-saved]
3586 . nr doc-reference-title-count \n[doc-reference-title-count-saved]
3587 . ds doc-reference-title-name "\*[doc-reference-title-name-saved]
3588 . ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
3589 . nr doc-url-count \n[doc-url-count-saved]
3590 . ds doc-url-name "\*[doc-url-name-saved]
3591 . nr doc-volume-count \n[doc-volume-count-saved]
3592 . ds doc-volume-name "\*[doc-volume-name-saved]
3593 . nr doc-have-author \n[doc-have-author-saved]
3595 . ds doc-document-title "\*[doc-document-title-saved]
3596 . ds doc-volume "\*[doc-volume-saved]
3597 . ds doc-section "\*[doc-section-saved]
3598 . ds doc-operating-system "\*[doc-operating-system-saved]
3599 . ds doc-date-string "\*[doc-date-string-saved]
3600 . nr doc-header-space \n[doc-header-space-saved]
3601 . nr doc-footer-space \n[doc-footer-space-saved]
3602 . nr doc-display-vertical \n[doc-display-vertical-saved]
3603 . ds doc-header-string "\*[doc-header-string-saved]
3604 . nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
3605 . nr doc-in-files-section \n[doc-in-files-section-saved]
3606 . nr doc-in-authors-section \n[doc-in-authors-section-saved]
3610 .\" NS El user macro
3614 .\" NS doc-list-depth
3615 .\" NS doc-macro-name
3617 .\" NS local variables:
3620 .\" NS width register 'El' set in doc-common
3624 . tm Usage: .El (does not take arguments) (#\n[.c])
3628 . ds doc-macro-name El
3629 . ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
3631 . ie "\*[doc-str-El]"diag-list" \
3633 . el \{ .ie "\*[doc-str-El]"column-list" \
3634 . doc-end-column-list
3635 . el \{ .ie "\*[doc-str-El]"item-list" \
3637 . el \{ .ie "\*[doc-str-El]"ohang-list" \
3639 . el \{ .ie "\*[doc-str-El]"inset-list" \
3649 .\" NS doc-saved-Pa-font global string
3650 .\" NS saved doc-Pa-font string for section FILES (no underline if
3653 .ds doc-saved-Pa-font
3656 .\" NS doc-curr-type global register
3657 .\" NS current argument type
3662 .\" NS doc-curr-arg global string
3663 .\" NS current argument
3668 .\" NS doc-item-boxXXX global box
3669 .\" NS item boxes associated list depth
3672 .\" NS doc-list-depth
3675 .\" NS It user macro
3682 .\" NS doc-curr-type
3684 .\" NS doc-macro-name
3686 .\" NS doc-saved-Pa-font
3688 .\" NS local variables:
3691 .\" NS doc-XXX-list-type
3693 .\" NS width register 'It' set in doc-common
3695 .nr doc-bullet-list-type 1
3696 .nr doc-column-list-type 0
3697 .nr doc-dash-list-type 1
3698 .nr doc-diag-list-type 0
3699 .nr doc-enum-list-type 1
3700 .nr doc-hang-list-type 2
3701 .nr doc-inset-list-type 2
3702 .nr doc-item-list-type 1
3703 .nr doc-ohang-list-type 2
3704 .nr doc-tag-list-type 2
3707 . ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
3709 . if "\*[doc-str-It]"" \
3710 . tm mdoc error: .It without preceding .Bl (#\n[.c])
3712 . if \n[doc-nesting-level] \{\
3713 . tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
3722 . ds doc-macro-name It
3724 . \" fill argument vector
3726 . while (\n[doc-reg-It] <= \n[.$]) \{\
3727 . ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
3731 . nr doc-num-args \n[.$]
3735 . nr doc-reg-It \n[doc-\*[doc-str-It]-type]
3737 . if \n[doc-reg-It] \{\
3739 . box doc-item-box\n[doc-list-depth]
3740 . ev doc-item-env\n[doc-list-depth]
3746 . ie (\n[doc-reg-It] == 1) \{\
3748 . tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]'
3749 . tm1 " don't take arguments (#\n[.c])
3753 . if (\n[doc-reg-It] == 2) \{\
3754 . \" handle list types with arguments
3755 . doc-parse-arg-vector
3759 . nr doc-curr-type \n[doc-type1]
3760 . ds doc-curr-arg "\*[doc-arg1]
3762 . if \n[doc-in-files-section] \{\
3763 . ds doc-saved-Pa-font "\*[doc-Pa-font]
3765 . ds doc-Pa-font "\*[doc-No-font]
3768 . ie (\n[doc-type1] == 1) \
3772 . doc-print-recursive
3775 . tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]'
3776 . tm1 " require arguments (#\n[.c])
3780 . \" the previous call of '.doc-print-recursive' can contain calls to
3781 . \" opening macros like '.Ao'; we then defer the call of
3783 . if !\n[doc-nesting-level] \
3784 . doc-\*[doc-str-It]
3788 .\" NS doc-inset-list macro
3789 .\" NS .It item of list-type inset
3795 . \" finish item box
3799 . unformat doc-item-box\n[doc-list-depth]
3801 . doc-set-vertical-and-indent 0
3805 . doc-item-box\n[doc-list-depth]
3807 . if \n[doc-in-files-section] \
3809 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3816 .\" NS doc-hang-list macro
3817 .\" NS .It item of list-type hanging tag (as opposed to tagged)
3820 .\" NS doc-have-space
3823 .\" NS local variables:
3828 . \" finish item box
3832 . unformat doc-item-box\n[doc-list-depth]
3834 . doc-set-vertical-and-indent 1
3835 . nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
3836 . ti -\n[doc-reg-dhl]u
3839 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
3840 . doc-item-box\n[doc-list-depth]
3842 . chop doc-item-box\n[doc-list-depth]
3843 . nr doc-reg-dhl1 \n[.k]u
3844 . nop \*[doc-item-box\n[doc-list-depth]]\c
3845 . nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
3846 . nr doc-have-space 1
3849 . if \n[doc-in-files-section] \
3851 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3858 .\" NS doc-ohang-list macro
3859 .\" NS .It item of list-type overhanging tag
3865 . \" finish item box
3869 . unformat doc-item-box\n[doc-list-depth]
3871 . doc-set-vertical-and-indent 0
3873 . doc-item-box\n[doc-list-depth]
3876 . if \n[doc-in-files-section] \
3878 . ds doc-Pa-font "\*[doc-saved-Pa-font]
3885 .\" NS doc-item-list macro
3886 .\" NS .It item of list-type [empty tag]
3889 . \" finish (dummy) item box
3894 . doc-set-vertical-and-indent 0
3901 .\" NS doc-enum-list-count-stackXXX global register
3902 .\" NS stack of current enum count values
3905 .\" NS doc-list-depth
3907 .nr doc-enum-list-count-stack1 0
3910 .\" NS doc-enum-list macro
3911 .\" NS enumerated list
3914 .\" NS doc-enum-list-count-stackXXX
3919 . nr doc-enum-list-count-stack\n[doc-list-depth] +1
3921 \#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
3923 . nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
3924 . nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
3929 .\" NS doc-bullet-list macro
3930 .\" NS bullet paragraph list
3937 . nop \)\*[doc-Sy-font]\[bu]\f[]
3942 .\" NS doc-dash-list macro
3943 .\" NS hyphen paragraph list (sub bullet list)
3950 . nop \)\*[doc-Sy-font]\-\f[]
3955 .\" NS doc-do-list macro
3956 .\" NS .It item of list-type enum/bullet/hyphen
3958 .als doc-do-list doc-hang-list
3961 .\" NS doc-diag-list-input-line-count global register
3962 .\" NS saved line number to be checked in next diag-list item
3964 .nr doc-diag-list-input-line-count 0
3967 .\" NS doc-diag-list macro
3968 .\" NS .It item of list-type diagnostic-message
3971 .\" NS doc-curr-font
3972 .\" NS doc-curr-size
3973 .\" NS doc-diag-list-input-line-count
3976 . nr doc-curr-font \n[.f]
3977 . nr doc-curr-size \n[.ps]
3979 . ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
3980 . ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
3987 . nr doc-diag-list-input-line-count \n[.c]
3990 . nop \*[doc-Sy-font]\c
3991 . if \n[doc-num-args] \
3992 . doc-remaining-args
3993 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
3995 . doc-print-and-reset
3999 .\" NS doc-tag-list macro
4000 .\" NS .It item of list-type 'tag'
4003 .\" NS doc-have-space
4006 .\" NS local variables:
4012 . \" finish item box
4016 . unformat doc-item-box\n[doc-list-depth]
4018 . \" we use a box without '.nf' to compute the tag width (via 'dl' register)
4025 . doc-item-box\n[doc-list-depth]
4030 . doc-set-vertical-and-indent 1
4031 . nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4032 . ti -\n[doc-reg-dtl]u
4035 . doc-item-box\n[doc-list-depth]
4036 . ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
4039 . \" format the tag separately to prevent stretching of spaces
4045 . nr doc-have-space 1
4048 . if \n[doc-in-files-section] \
4050 . ds doc-Pa-font "\*[doc-saved-Pa-font]
4057 .\" NS doc-set-vertical-and-indent macro
4058 .\" NS set up vertical spacing (if not compact) and indentation (with
4059 .\" NS offset if argument is non-zero)
4062 .\" NS doc-list-have-indent-stackXXX
4064 .de doc-set-vertical-and-indent
4065 . if !\n[doc-compact-list-stack\n[doc-list-depth]] \
4066 . sp \n[doc-display-vertical]u
4068 . if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
4069 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4071 . in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4079 .\" NS doc-list-depth global register
4080 .\" NS list type stack counter
4082 .nr doc-list-depth 0
4085 .\" NS doc-num-columns global register
4086 .\" NS number of columns
4088 .nr doc-num-columns 0
4091 .\" NS doc-compact-list-stackXXX global register (bool)
4092 .\" NS stack of flags to indicate whether a particular list is compact
4095 .\" NS doc-list-depth
4097 .nr doc-compact-list-stack1 0
4100 .\" NS doc-tag-prefix-stackXXX global string
4101 .\" NS stack of tag prefixes (currently used for -nested -enum lists)
4104 .\" NS doc-list-depth
4106 .ds doc-tag-prefix-stack1
4109 .\" NS doc-list-offset-stackXXX global register
4110 .\" NS stack of list offsets
4113 .\" NS doc-list-depth
4115 .nr doc-list-offset-stack1 0
4118 .\" NS doc-end-list macro
4119 .\" NS list end function; resets indentation (and offset if argument
4123 .\" NS doc-list-depth
4124 .\" NS doc-list-offset-stackXXX
4128 ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
4130 ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u
4132 . if (\n[doc-list-depth] <= 0) \
4133 . tm mdoc warning: extraneous .El call (#\n[.c])
4135 . doc-decrement-list-stack
4136 . nr doc-list-depth -1
4140 .\" NS doc-increment-list-stack macro
4141 .\" NS set up next block for list
4144 .\" NS doc-compact-list-stackXXX
4145 .\" NS doc-list-have-indent-stackXXX
4146 .\" NS doc-list-indent-stackXXX
4147 .\" NS doc-list-offset-stackXXX
4148 .\" NS doc-list-type-stackXXX
4149 .\" NS doc-tag-prefix-stackXXX
4150 .\" NS doc-enum-list-count-stackXXX
4152 .\" NS local variables:
4155 .de doc-increment-list-stack
4156 . nr doc-reg-dils (\n[doc-list-depth] + 1)
4157 . nr doc-list-have-indent-stack\n[doc-reg-dils] 0
4158 . nr doc-list-indent-stack\n[doc-reg-dils] 0
4159 . nr doc-list-offset-stack\n[doc-reg-dils] 0
4160 . ds doc-tag-prefix-stack\n[doc-reg-dils]
4161 . ds doc-list-type-stack\n[doc-reg-dils]
4162 . nr doc-compact-list-stack\n[doc-reg-dils] 0
4163 . nr doc-enum-list-count-stack\n[doc-reg-dils] 0
4167 .\" NS doc-decrement-list-stack macro
4168 .\" NS decrement stack
4171 .\" NS doc-compact-list-stackXXX
4172 .\" NS doc-list-have-indent-stackXXX
4173 .\" NS doc-list-indent-stackXXX
4174 .\" NS doc-list-offset-stackXXX
4175 .\" NS doc-list-type-stackXXX
4176 .\" NS doc-tag-prefix-stackXXX
4177 .\" NS doc-enum-list-count-stackXXX
4179 .de doc-decrement-list-stack
4180 . ds doc-list-type-stack\n[doc-list-depth]
4181 . nr doc-list-have-indent-stack\n[doc-list-depth] 0
4182 . nr doc-list-indent-stack\n[doc-list-depth] 0
4183 . nr doc-list-offset-stack\n[doc-list-depth] 0
4184 . ds doc-tag-prefix-stack\n[doc-list-depth]
4185 . nr doc-compact-list-stack\n[doc-list-depth] 0
4186 . nr doc-enum-list-count-stack\n[doc-list-depth] 0
4190 .\" NS Xr user macro
4191 .\" NS cross reference (for man pages only)
4195 .\" NS doc-macro-name
4197 .\" NS local variables:
4200 .\" NS width register 'Xr' set in doc-common
4203 . if !\n[doc-arg-limit] \{\
4205 . ds doc-macro-name Xr
4206 . doc-parse-args \$@
4212 . if !\n[doc-arg-limit] \
4216 . doc-print-prefixes
4217 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4218 . \" first argument must be a string
4219 . ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4220 . nr doc-curr-font \n[.f]
4221 . nr doc-curr-size \n[.ps]
4222 . ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
4224 . if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
4225 . nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
4226 . \" modify second argument if it is a string and
4227 . \" remove space in between
4228 . if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
4229 . ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
4230 . ds doc-space\n[doc-arg-ptr]
4233 . doc-print-recursive
4243 .\" NS doc-Xr-usage macro
4246 . tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
4251 .\" NS Sx user macro
4252 .\" NS cross section reference
4254 .\" NS width register 'Sx' set in doc-common
4256 .als Sx doc-generic-macro
4257 .ds doc-Sx-usage section_header
4260 .\" NS doc-end-column-list macro
4261 .\" NS column-list end-list
4264 .\" NS doc-list-depth
4266 .de doc-end-column-list
4268 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
4271 . doc-decrement-list-stack
4272 . nr doc-list-depth -1
4276 .\" NS doc-column-indent-width global register
4277 .\" NS holds the indent width for a column list
4279 .nr doc-column-indent-width 0
4282 .\" NS doc-set-column-tab macro
4283 .\" NS establish tabs for list-type column: '.doc-set-column-tab num_cols'
4286 .\" NS doc-column-indent-width
4288 .\" NS local variables:
4291 .\" NS doc-str-dsct1
4293 .de doc-set-column-tab
4296 . nr doc-column-indent-width 0
4299 . ds doc-str-dsct1 " \"
4302 . ds doc-str-dsct1 " \"
4304 . \" XXX: this is packed abnormally close -- intercolumn width
4305 . \" should be configurable
4306 . ds doc-str-dsct1 " \"
4309 . while (\n[doc-reg-dsct] <= \$1) \{\
4310 . as doc-str-dsct " +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4311 . nr doc-column-indent-width +\w
\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]
\au
4312 . nr doc-reg-dsct +1
4315 . ta \*[doc-str-dsct]
4316 ' in +\n[doc-column-indent-width]u
4320 .\" NS doc-column-list macro
4325 .\" NS doc-list-indent-stackXXX
4328 .\" NS local variables:
4332 . if \n[doc-num-args] \
4333 . doc-parse-arg-vector
4336 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4337 . tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
4341 . if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
4342 . nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
4343 . ds doc-space\n[doc-reg-dcl]
4346 . if !\n[doc-list-indent-stack\n[doc-list-depth]] \
4347 . nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
4350 . in +\n[doc-column-indent-width]u
4352 . ti -\n[doc-column-indent-width]u
4354 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4358 .\" NS Ta user macro
4359 .\" NS append tab (\t)
4364 .\" NS width register 'Ta' set in doc-common
4367 . ie \n[doc-arg-limit] \{\
4370 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
4371 . doc-do-\n[doc-type\n[doc-arg-ptr]]
4376 . tm1 "Usage: Ta must follow column entry: e.g.
4377 . tm1 " .It column_string [Ta [column_string ...]] (#\n[.c])
4382 .\" NS Dl user macro
4383 .\" NS display (one line) literal
4385 .\" NS this function uses the 'Li' font
4389 .\" NS doc-curr-font
4390 .\" NS doc-curr-size
4391 .\" NS doc-macro-name
4393 .\" NS width register 'Dl' set in doc-common
4397 . in +\n[doc-display-indent]u
4399 . ie \n[doc-arg-limit] \{\
4400 . tm Usage: .Dl not callable by other macros (#\n[.c])
4405 . ds doc-macro-name Dl
4406 . doc-parse-args \$@
4408 . nr doc-curr-font \n[.f]
4409 . nr doc-curr-size \n[.ps]
4410 . nop \*[doc-Li-font]\c
4411 . doc-print-recursive
4414 . tm Usage: .Dl argument ... (#\n[.c])
4417 . in -\n[doc-display-indent]u
4421 .\" NS D1 user macro
4422 .\" NS display (one line)
4426 .\" NS doc-macro-name
4428 .\" NS width register 'D1' set in doc-common
4432 . in +\n[doc-display-indent]u
4434 . ie \n[doc-arg-limit] \{\
4435 . tm Usage: .D1 not callable by other macros (#\n[.c])
4440 . ds doc-macro-name D1
4441 . doc-parse-args \$@
4443 . doc-print-recursive
4446 . tm Usage: .D1 argument ... (#\n[.c])
4449 . in -\n[doc-display-indent]u
4453 .\" NS Vt user macro
4454 .\" NS variable type (for forcing old style variable declarations);
4455 .\" NS this is not done in the same manner as .Ot for fortrash --
4456 .\" NS clean up later
4459 .\" NS doc-curr-font
4460 .\" NS doc-curr-size
4461 .\" NS doc-have-decl
4463 .\" NS doc-macro-name
4465 .\" NS width register 'Vt' set in doc-common
4468 . if !\n[doc-arg-limit] \{\
4470 . ds doc-macro-name Vt
4471 . doc-parse-args \$@
4474 . tm Usage: .Vt variable_type ... (#\n[.c])
4477 . if !\n[doc-arg-limit] \
4481 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4482 . tm Usage: .Vt variable_type ... (#\n[.c])
4487 . if \n[doc-in-synopsis-section] \{\
4488 . \" if a function declaration was the last thing given,
4489 . \" want vertical space
4490 . if \n[doc-have-decl] \{\
4492 . nr doc-have-decl 0
4495 . \" if a subroutine was the last thing given, want vertical space
4496 . if \n[doc-have-func] \{\
4497 . ie \n[doc-have-var] \
4506 . nr doc-curr-font \n[.f]
4507 . nr doc-curr-size \n[.ps]
4508 . nop \*[doc-Ft-font]\c
4509 . doc-print-recursive
4511 . if \n[doc-in-synopsis-section] \{\
4512 . ie \n[doc-have-old-func] \
4513 . nop \*[doc-soft-space]\c
4520 .\" NS doc-is-func global register (bool)
4521 .\" NS set if subroutine (in synopsis only) (fortran only)
4526 .\" NS Ft user macro
4527 .\" NS function type
4530 .\" NS doc-curr-font
4531 .\" NS doc-curr-size
4532 .\" NS doc-have-decl
4535 .\" NS doc-macro-name
4537 .\" NS width register 'Ft' set in doc-common
4540 . if !\n[doc-arg-limit] \{\
4542 . ds doc-macro-name Ft
4543 . doc-parse-args \$@
4546 . tm Usage: .Ft function_type ... (#\n[.c])
4549 . if !\n[doc-arg-limit] \
4553 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4554 . tm Usage: .Ft function_type ... (#\n[.c])
4559 . if \n[doc-in-synopsis-section] \{\
4560 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4562 . nr doc-have-decl 0
4566 . if \n[doc-have-var] \{\
4574 . nr doc-curr-font \n[.f]
4575 . nr doc-curr-size \n[.ps]
4576 . nop \*[doc-Ft-font]\c
4577 . doc-print-recursive
4581 .\" NS doc-have-old-func global register (bool)
4582 .\" NS set if 'Ot' has been called
4584 .nr doc-have-old-func 0
4587 .\" NS Ot user macro
4588 .\" NS old function type (fortran -- no newline)
4591 .\" NS doc-have-decl
4592 .\" NS doc-have-old-func
4596 .\" NS width register 'Ot' set in doc-common
4599 . nr doc-have-old-func 1
4601 . if \n[doc-in-synopsis-section] \{\
4602 . if (\n[doc-have-func] : \n[doc-have-decl]) \{\
4604 . nr doc-have-decl 0
4608 . if \n[doc-have-var] \{\
4617 . nop \*[doc-Ft-font]\$*\c
4622 .\" NS Fa user macro
4623 .\" NS function arguments
4627 .\" NS doc-curr-font
4628 .\" NS doc-curr-size
4629 .\" NS doc-macro-name
4631 .\" NS width register 'Fa' set in doc-common
4634 . if !\n[doc-arg-limit] \{\
4636 . ds doc-macro-name Fa
4637 . doc-parse-args \$@
4640 . tm Usage: .Fa function_arguments ... (#\n[.c])
4643 . ie \n[doc-func-arg-count] \
4647 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4648 . nr doc-curr-font \n[.f]
4649 . nr doc-curr-size \n[.ps]
4650 . nop \*[doc-Fa-font]\c
4651 . doc-print-recursive
4653 . if \n[doc-in-synopsis-section] \
4654 . if \n[doc-have-func] \
4660 .\" NS doc-func-arg-count global register
4661 .\" NS how many function arguments have been processed so far
4663 .nr doc-func-arg-count 0
4666 .\" NS doc-func-arg global string
4667 .\" NS work buffer for function name strings
4672 .\" NS doc-num-func-args global register
4673 .\" NS number of function arguments
4675 .nr doc-num-func-args 0
4678 .\" NS doc-func-args-processed global register
4679 .\" NS function arguments processed so far
4681 .nr doc-func-args-processed 0
4684 .\" NS doc-do-func macro
4685 .\" NS internal .Fa for .Fc
4691 .\" NS doc-func-arg-count
4692 .\" NS doc-func-args-processed
4693 .\" NS doc-num-func-args
4696 . if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
4704 . nr doc-num-func-args 0
4705 . nr doc-func-args-processed 0
4707 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4708 . if (\n[doc-num-func-args] > 1) \
4709 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4711 . if (\n[doc-func-arg-count] > 1) \{\
4712 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4713 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4714 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4716 . nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
4717 . nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
4720 . if (\n[doc-func-arg-count] == 1) \{\
4721 . nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
4724 . nr doc-func-arg-count +1
4729 .\" NS doc-have-func global register (bool)
4730 .\" NS whether we have more than one function in synopsis
4735 .\" NS Fn user macro
4740 .\" NS doc-curr-font
4741 .\" NS doc-curr-size
4742 .\" NS doc-have-decl
4743 .\" NS doc-have-func
4745 .\" NS doc-indent-synopsis
4747 .\" NS doc-macro-name
4749 .\" NS width register 'Fn' set in doc-common
4752 . if !\n[doc-arg-limit] \{\
4754 . ds doc-macro-name Fn
4755 . doc-parse-args \$@
4758 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4761 . if !\n[doc-arg-limit] \
4764 . if \n[doc-in-synopsis-section] \{\
4765 . \" if there is/has been more than one subroutine declaration
4766 . ie \n[doc-is-func] \{\
4769 . nr doc-have-decl 0
4773 . if \n[doc-have-func] \{\
4776 . nr doc-have-decl 0
4779 . if \n[doc-have-decl] \{\
4784 . if \n[doc-have-var] \{\
4786 . nr doc-have-decl 0
4789 . nr doc-have-func 1
4793 . if !\n[doc-indent-synopsis] \
4794 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
4795 . if !\n[doc-indent-synopsis-active] \
4796 . in +\n[doc-indent-synopsis]u
4797 . ti -\n[doc-indent-synopsis]u
4801 . doc-print-prefixes
4802 . if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
4803 . tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
4808 . nr doc-curr-font \n[.f]
4809 . nr doc-curr-size \n[.ps]
4810 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4811 . nop \f[]\s[0]\*[lp]\)\c
4814 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4815 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4816 . nop \*[doc-Fa-font]\c
4818 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
4822 . if \n[doc-in-synopsis-section] \
4825 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4826 . \" output the space (if needed)
4828 . nop \)\*[doc-space\n[doc-arg-ptr]]\c
4831 . doc-print-recursive
4834 . doc-print-and-reset
4836 . if \n[doc-in-synopsis-section] \
4837 . if !\n[doc-indent-synopsis-active] \
4838 . in -\n[doc-indent-synopsis]u
4842 .\" NS doc-do-func-args macro
4843 .\" NS handle function arguments
4849 .\" NS doc-func-args-processed
4850 .\" NS doc-num-func-args
4852 .\" NS local variables:
4855 .de doc-do-func-args
4856 . if \n[doc-in-synopsis-section] \{\
4858 . nr doc-num-func-args 0
4859 . nr doc-func-args-processed 0
4861 . doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
4862 . if (\n[doc-num-func-args] > 1) \
4863 . ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
4866 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
4869 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4870 . if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
4871 . nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
4872 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
4873 . if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
4874 . if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
4876 . nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
4882 .\" NS doc-saved-nesting-level global register
4884 .nr doc-saved-nesting-level 0
4887 .\" NS doc-in-func-enclosure global register (bool)
4889 .nr doc-in-func-enclosure 0
4892 .\" NS Fo user macro
4893 .\" NS function open
4897 .\" NS doc-curr-font
4898 .\" NS doc-curr-size
4899 .\" NS doc-func-arg-count
4900 .\" NS doc-have-decl
4901 .\" NS doc-have-func
4903 .\" NS doc-in-func-enclosure
4904 .\" NS doc-indent-synopsis
4906 .\" NS doc-macro-name
4907 .\" NS doc-saved-nesting-level
4909 .\" NS width register 'Fo' set in doc-common
4912 . if (\n[doc-in-func-enclosure]) \{\
4913 . tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
4917 . nr doc-saved-nesting-level \n[doc-nesting-level]
4918 . nr doc-in-func-enclosure 1
4920 . if !\n[doc-arg-limit] \{\
4922 . ds doc-macro-name Fo
4923 . doc-parse-args \$@
4926 . tm Usage: .Fo function_name (#\n[.c])
4929 . if \n[doc-in-synopsis-section] \{\
4930 . \" if there is/has been more than one subroutine declaration
4931 . ie \n[doc-is-func] \{\
4934 . nr doc-have-decl 0
4938 . if \n[doc-have-func] \{\
4941 . nr doc-have-decl 0
4944 . if \n[doc-have-decl] \{\
4949 . if \n[doc-have-var] \{\
4951 . nr doc-have-decl 0
4954 . nr doc-have-func 1
4958 . if !\n[doc-indent-synopsis] \
4959 . nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
4962 . \" start function box
4970 . doc-print-prefixes
4971 . if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
4972 . nr doc-func-arg-count 1
4973 . nr doc-curr-font \n[.f]
4974 . nr doc-curr-size \n[.ps]
4976 . nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
4977 . nop \f[]\s[0]\*[lp]\)\c
4983 .\" NS Fc user macro
4984 .\" NS function close
4988 .\" NS doc-func-arg-count
4989 .\" NS doc-in-func-enclosure
4990 .\" NS doc-saved-nesting-level
4991 .\" NS doc-macro-name
4993 .\" NS width register 'Fc' set in doc-common
4996 . if !\n[doc-in-func-enclosure] \{\
4997 . tm mdoc warning: Extraneous .Fc (#\n[.c])
5002 . ds doc-macro-name Fc
5003 . \" the first (dummy) argument is used to get the correct spacing
5004 . doc-parse-args \) \$@
5007 . if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
5008 . tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
5010 . nr doc-func-arg-count 0
5011 . nr doc-in-func-enclosure 0
5013 . ie \n[doc-in-synopsis-section] \
5018 . \" finish function box
5023 . unformat doc-func-box
5025 . if \n[doc-in-synopsis-section] \{\
5026 . if !\n[doc-indent-synopsis-active] \
5027 . in +\n[doc-indent-synopsis]u
5028 . ti -\n[doc-indent-synopsis]u
5032 . nop \*[doc-func-box]\c
5035 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
5036 . nr doc-curr-font \n[.f]
5037 . nr doc-curr-size \n[.ps]
5038 . doc-print-recursive
5041 . doc-print-and-reset
5043 . if \n[doc-in-synopsis-section] \
5044 . if !\n[doc-indent-synopsis-active] \
5045 . in -\n[doc-indent-synopsis]u
5049 .\" NS doc-build-func-string macro
5050 .\" NS collect function arguments and set hard spaces in between
5054 .\" NS doc-func-args-processed
5055 .\" NS doc-num-func-args
5057 .de doc-build-func-string
5058 . if !\n[doc-num-func-args] \{\
5059 . nr doc-num-func-args \n[.$]
5060 . nr doc-func-args-processed 0
5064 . nr doc-func-args-processed +1
5065 . as doc-func-arg "\$1
5067 . if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
5068 . as doc-func-arg "\*[doc-hard-space]
5071 . doc-build-func-string \$@
5076 .\" Very crude references: Stash all reference info into boxes, print
5077 .\" out reference on .Re macro and clean up. Ordering very limited, no
5078 .\" fancy citations, but can do articles, journals, and books -- need to
5079 .\" add several missing options (like city etc). Should be able to grab
5080 .\" a refer entry, massage it a wee bit (prefix a '.' to the %[A-Z]) and
5081 .\" not worry (ha!).
5084 .\" NS doc-is-reference global register (bool)
5085 .\" NS set if in reference
5087 .nr doc-is-reference 0
5090 .\" NS doc-reference-count global register
5091 .\" NS reference element counter
5093 .nr doc-reference-count 0
5096 .\" NS Rs user macro
5097 .\" NS reference start
5100 .\" NS doc-is-reference
5101 .\" NS doc-reference-count
5103 .\" NS width register 'Rs' set in doc-common
5107 . tm Usage: .Rs (does not take arguments) (#\n[.c])
5109 . nr doc-is-reference 1
5110 . doc-reset-reference
5111 . if \n[doc-in-see-also-section] \
5113 . nr doc-reference-count 0
5118 .\" NS Re user macro
5119 .\" NS reference end
5122 .\" NS doc-is-reference
5124 .\" NS width register 'Re' set in doc-common
5128 . tm Usage: .Re (does not take arguments) (#\n[.c])
5130 . if !\n[doc-is-reference] \{\
5131 . tm mdoc warning: Extraneous .Re (#\n[.c])
5134 . doc-print-reference
5135 . doc-reset-reference
5136 . nr doc-is-reference 0
5141 .\" NS doc-reset-reference macro
5142 .\" NS reference cleanup
5145 .\" NS doc-author-count
5146 .\" NS doc-author-nameXXX
5147 .\" NS doc-book-count
5148 .\" NS doc-book-name
5149 .\" NS doc-city-count
5150 .\" NS doc-city-name
5151 .\" NS doc-corporate-count
5152 .\" NS doc-corporate-name
5154 .\" NS doc-date-count
5155 .\" NS doc-issue-count
5156 .\" NS doc-issue-name
5157 .\" NS doc-journal-count
5158 .\" NS doc-journal-name
5159 .\" NS doc-optional-count
5160 .\" NS doc-optional-string
5161 .\" NS doc-page-number-count
5162 .\" NS doc-page-number-string
5163 .\" NS doc-publisher-count
5164 .\" NS doc-publisher-name
5165 .\" NS doc-reference-count
5166 .\" NS doc-reference-title-count
5167 .\" NS doc-reference-title-name
5168 .\" NS doc-reference-title-name-for-book
5169 .\" NS doc-report-count
5170 .\" NS doc-report-name
5171 .\" NS doc-url-count
5173 .\" NS doc-volume-count
5174 .\" NS doc-volume-name
5176 .de doc-reset-reference
5177 . while (\n[doc-author-count]) \{\
5178 . ds doc-author-name\n[doc-author-count]
5179 . nr doc-author-count -1
5181 . nr doc-journal-count 0
5182 . nr doc-issue-count 0
5183 . nr doc-optional-count 0
5184 . nr doc-corporate-count 0
5185 . nr doc-report-count 0
5186 . nr doc-reference-title-count 0
5187 . nr doc-url-count 0
5188 . nr doc-volume-count 0
5189 . nr doc-city-count 0
5190 . nr doc-date-count 0
5191 . nr doc-page-number-count 0
5192 . nr doc-book-count 0
5193 . nr doc-publisher-count 0
5194 . nr doc-reference-count 0
5196 . ds doc-journal-name
5198 . ds doc-optional-string
5199 . ds doc-corporate-name
5200 . ds doc-report-name
5201 . ds doc-reference-title-name
5202 . ds doc-reference-title-name-for-book
5204 . ds doc-volume-name
5207 . ds doc-page-number-string
5209 . ds doc-publisher-name
5213 .\" NS doc-finish-reference macro
5214 .\" NS auxiliary macro for doc-print-reference
5217 .\" NS doc-reference-count
5219 .de doc-finish-reference
5220 . nr doc-reference-count -\$1
5221 . ie \n[doc-reference-count] \
5228 .\" NS doc-print-reference macro
5229 .\" NS reference print
5232 .\" NS doc-reference-count
5234 .de doc-print-reference
5238 . if \n[doc-author-count] \{\
5239 . doc-print-reference-authors
5240 . nr doc-reference-count -\n[doc-author-count]
5243 . if \n[doc-reference-title-count] \{\
5244 . unformat doc-reference-title-name
5245 . chop doc-reference-title-name
5246 . unformat doc-reference-title-name-for-book
5247 . chop doc-reference-title-name-for-book
5248 . ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
5249 . nop \)\*[Lq]\)\*[doc-reference-title-name-for-book]\)\*[Rq]\c
5250 . doc-finish-reference \n[doc-reference-title-count]
5253 . nop \*[doc-reference-title-name]\c
5254 . doc-finish-reference \n[doc-reference-title-count]
5257 . if \n[doc-book-count] \{\
5258 . unformat doc-book-name
5259 . chop doc-book-name
5260 . nop \*[doc-book-name]\c
5261 . doc-finish-reference \n[doc-book-count]
5264 . if \n[doc-publisher-count] \{\
5265 . unformat doc-publisher-name
5266 . chop doc-publisher-name
5267 . nop \*[doc-publisher-name]\c
5268 . doc-finish-reference \n[doc-publisher-count]
5271 . if \n[doc-journal-count] \{\
5272 . unformat doc-journal-name
5273 . chop doc-journal-name
5274 . nop \*[doc-journal-name]\c
5275 . doc-finish-reference \n[doc-journal-count]
5278 . if \n[doc-report-count] \{\
5279 . unformat doc-report-name
5280 . chop doc-report-name
5281 . nop \*[doc-report-name]\c
5282 . doc-finish-reference \n[doc-report-count]
5285 . if \n[doc-issue-count] \{\
5286 . unformat doc-issue-name
5287 . chop doc-issue-name
5288 . nop \*[doc-issue-name]\c
5289 . doc-finish-reference \n[doc-issue-count]
5292 . if \n[doc-volume-count] \{\
5293 . unformat doc-volume-name
5294 . chop doc-volume-name
5295 . nop \*[doc-volume-name]\c
5296 . doc-finish-reference \n[doc-volume-count]
5299 . if \n[doc-url-count] \{\
5300 . unformat doc-url-name
5302 . nop \*[doc-url-name]\c
5303 . doc-finish-reference \n[doc-url-count]
5306 . if \n[doc-page-number-count] \{\
5307 . unformat doc-page-number-string
5308 . chop doc-page-number-string
5309 . nop \*[doc-page-number-string]\c
5310 . doc-finish-reference \n[doc-page-number-count]
5313 . if \n[doc-corporate-count] \{\
5314 . unformat doc-corporate-name
5315 . chop doc-corporate-name
5316 . nop \*[doc-corporate-name]\c
5317 . doc-finish-reference \n[doc-corporate-count]
5320 . if \n[doc-city-count] \{\
5321 . unformat doc-city-name
5322 . chop doc-city-name
5323 . nop \*[doc-city-name]\c
5324 . doc-finish-reference \n[doc-city-count]
5327 . if \n[doc-date-count] \{\
5330 . nop \*[doc-date]\c
5331 . doc-finish-reference \n[doc-date-count]
5334 . if \n[doc-optional-count] \{\
5335 . unformat doc-optional-string
5336 . chop doc-optional-string
5337 . nop \*[doc-optional-string]\c
5338 . doc-finish-reference \n[doc-optional-count]
5341 . if \n[doc-reference-count] \
5342 . tm mdoc warning: unresolved reference problem
5344 . hy \n[doc-hyphen-flags]
5348 .\" NS doc-print-reference-authors macro
5349 .\" NS print out reference authors
5351 .\" NS local variables:
5355 .ds doc-str-dpra "and
5357 .de doc-print-reference-authors
5360 . while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
5361 . unformat doc-author-name\n[doc-reg-dpra]
5362 . chop doc-author-name\n[doc-reg-dpra]
5363 . ie (\n[doc-author-count] > 2) \
5364 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5366 . nop \)\*[doc-author-name\n[doc-reg-dpra]]
5367 . nr doc-reg-dpra +1
5370 . unformat doc-author-name\n[doc-reg-dpra]
5371 . chop doc-author-name\n[doc-reg-dpra]
5372 . if (\n[doc-author-count] > 1) \
5373 . nop \)\*[doc-str-dpra]
5374 . nop \)\*[doc-author-name\n[doc-reg-dpra]],
5378 .\" NS doc-author-count global register
5379 .\" NS counter of author references
5381 .nr doc-author-count 0
5384 .\" NS doc-author-nameXXX global box
5385 .\" NS array of author names
5388 .\" NS doc-author-count
5390 .ds doc-author-name0
5393 .\" NS %A user macro
5394 .\" NS reference author(s)
5398 .\" NS doc-author-count
5399 .\" NS doc-curr-font
5400 .\" NS doc-curr-size
5401 .\" NS doc-macro-name
5402 .\" NS doc-reference-count
5404 .\" NS local variables:
5407 .\" NS width register '%A' set in doc-common
5410 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5411 . tm Usage: .%A author_name ... (#\n[.c])
5415 . nr doc-author-count +1
5416 . nr doc-reference-count +1
5418 . ds doc-macro-name %A
5419 . doc-parse-args \$@
5422 . nr doc-curr-font \n[.f]
5423 . nr doc-curr-size \n[.ps]
5425 . \" save to reference box
5426 . box doc-author-name\n[doc-author-count]
5435 .\" NS doc-book-count global register
5436 .\" NS counter of book references
5438 .nr doc-book-count 0
5441 .\" NS doc-book-name global box
5442 .\" NS string of collected book references
5447 .\" NS %B user macro
5448 .\" NS [reference] book name
5452 .\" NS doc-book-count
5453 .\" NS doc-curr-font
5454 .\" NS doc-curr-size
5455 .\" NS doc-macro-name
5456 .\" NS doc-reference-count
5458 .\" NS local variables:
5461 .\" NS width register '%B' set in doc-common
5464 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5465 . tm Usage: .%B book_name ... (#\n[.c])
5469 . if \n[doc-is-reference] \{\
5470 . nr doc-book-count +1
5471 . nr doc-reference-count +1
5474 . ds doc-macro-name %B
5475 . doc-parse-args \$@
5478 . nr doc-curr-font \n[.f]
5479 . nr doc-curr-size \n[.ps]
5481 . ie \n[doc-is-reference] \{\
5482 . \" append to reference box
5483 . boxa doc-book-name
5488 . nop \*[doc-Em-font]\c
5492 . nop \*[doc-Em-font]\c
5493 . doc-print-recursive
5498 .\" NS doc-city-count global register
5499 .\" NS counter of city references
5501 .nr doc-city-count 0
5504 .\" NS doc-city-name global box
5505 .\" NS string of collected city references
5510 .\" NS %C user macro
5511 .\" NS [reference] city
5515 .\" NS doc-curr-font
5516 .\" NS doc-curr-size
5517 .\" NS doc-city-count
5518 .\" NS doc-macro-name
5519 .\" NS doc-reference-count
5521 .\" NS local variables:
5524 .\" NS width register '%C' set in doc-common
5527 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5528 . tm Usage: .%C city_name ... (#\n[.c])
5532 . nr doc-city-count +1
5533 . nr doc-reference-count +1
5535 . ds doc-macro-name %C
5536 . doc-parse-args \$@
5539 . nr doc-curr-font \n[.f]
5540 . nr doc-curr-size \n[.ps]
5542 . \" append to reference box
5543 . boxa doc-city-name
5552 .\" NS doc-date-count global register
5553 .\" NS counter of date references
5555 .nr doc-date-count 0
5558 .\" NS doc-date global box
5559 .\" NS string of collected date references
5564 .\" NS %D user macro
5565 .\" NS [reference] date
5569 .\" NS doc-curr-font
5570 .\" NS doc-curr-size
5571 .\" NS doc-date-count
5572 .\" NS doc-macro-name
5573 .\" NS doc-reference-count
5575 .\" NS local variables:
5578 .\" NS width register '%D' set in doc-common
5581 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5582 . tm Usage: .%D date ... (#\n[.c])
5586 . nr doc-date-count +1
5587 . nr doc-reference-count +1
5589 . ds doc-macro-name %D
5590 . doc-parse-args \$@
5593 . nr doc-curr-font \n[.f]
5594 . nr doc-curr-size \n[.ps]
5596 . \" append to reference box
5606 .\" NS doc-publisher-count global register
5607 .\" NS counter of publisher references
5609 .nr doc-publisher-count 0
5612 .\" NS doc-publisher-name global box
5613 .\" NS string of collected publisher references
5615 .ds doc-publisher-name
5618 .\" NS %I user macro
5619 .\" NS [reference] issuer/publisher name
5623 .\" NS doc-curr-font
5624 .\" NS doc-curr-size
5625 .\" NS doc-macro-name
5626 .\" NS doc-publisher-count
5627 .\" NS doc-reference-count
5629 .\" NS local variables:
5632 .\" NS width register '%I' set in doc-common
5635 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5636 . tm Usage: .%I issuer/publisher_name ... (#\n[.c])
5640 . nr doc-publisher-count +1
5641 . nr doc-reference-count +1
5643 . ds doc-macro-name %I
5644 . doc-parse-args \$@
5647 . nr doc-curr-font \n[.f]
5648 . nr doc-curr-size \n[.ps]
5650 . \" append to reference box
5651 . boxa doc-publisher-name
5656 . nop \*[doc-Em-font]\c
5661 .\" NS doc-journal-count global register
5662 .\" NS counter of journal references
5664 .nr doc-journal-count 0
5667 .\" NS doc-journal-name global box
5668 .\" NS string of collected journal references
5670 .ds doc-journal-name
5673 .\" NS %J user macro
5674 .\" NS [reference] Journal Name
5678 .\" NS doc-curr-font
5679 .\" NS doc-curr-size
5680 .\" NS doc-journal-count
5681 .\" NS doc-macro-name
5682 .\" NS doc-reference-count
5684 .\" NS local variables:
5687 .\" NS width register '%J' set in doc-common
5690 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5691 . tm Usage: .%J journal_name ... (#\n[.c])
5695 . nr doc-journal-count +1
5696 . nr doc-reference-count +1
5698 . ds doc-macro-name %J
5699 . doc-parse-args \$@
5702 . nr doc-curr-font \n[.f]
5703 . nr doc-curr-size \n[.ps]
5705 . \" append to reference box
5706 . boxa doc-journal-name
5711 . nop \*[doc-Em-font]\c
5716 .\" NS doc-issue-count global register
5717 .\" NS counter of issue number references
5719 .nr doc-issue-count 0
5722 .\" NS doc-issue-name global box
5723 .\" NS string of collected issue number references
5728 .\" NS %N user macro
5729 .\" NS [reference] issue number
5733 .\" NS doc-curr-font
5734 .\" NS doc-curr-size
5735 .\" NS doc-issue-count
5736 .\" NS doc-macro-name
5737 .\" NS doc-reference-count
5739 .\" NS local variables:
5742 .\" NS width register '%N' set in doc-common
5745 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5746 . tm Usage: .%N issue_number ... (#\n[.c])
5750 . nr doc-issue-count +1
5751 . nr doc-reference-count +1
5753 . ds doc-macro-name %N
5754 . doc-parse-args \$@
5757 . nr doc-curr-font \n[.f]
5758 . nr doc-curr-size \n[.ps]
5760 . \" append to reference box
5761 . boxa doc-issue-name
5770 .\" NS doc-optional-count global register
5771 .\" NS counter of optional information references
5773 .nr doc-optional-count 0
5776 .\" NS doc-optional-string global box
5777 .\" NS string of collected optional information references
5779 .ds doc-optional-string
5782 .\" NS %O user macro
5783 .\" NS [reference] optional information
5787 .\" NS doc-curr-font
5788 .\" NS doc-curr-size
5789 .\" NS doc-macro-name
5790 .\" NS doc-optional-count
5791 .\" NS doc-reference-count
5793 .\" NS local variables:
5796 .\" NS width register '%O' set in doc-common
5799 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5800 . tm Usage: .%O optional_information ... (#\n[.c])
5804 . nr doc-optional-count +1
5805 . nr doc-reference-count +1
5807 . ds doc-macro-name %O
5808 . doc-parse-args \$@
5811 . nr doc-curr-font \n[.f]
5812 . nr doc-curr-size \n[.ps]
5814 . \" append to reference box
5815 . boxa doc-optional-string
5824 .\" NS doc-page-number-count global register
5825 .\" NS counter of page number references
5827 .nr doc-page-number-count 0
5830 .\" NS doc-page-number-string global box
5831 .\" NS string of collected page number references
5833 .ds doc-page-number-string
5836 .\" NS %P user macro
5837 .\" NS [reference] page numbers
5841 .\" NS doc-curr-font
5842 .\" NS doc-curr-size
5843 .\" NS doc-macro-name
5844 .\" NS doc-page-number-count
5845 .\" NS doc-reference-count
5847 .\" NS local variables:
5850 .\" NS width register '%P' set in doc-common
5853 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5854 . tm Usage: .%P page_number ... (#\n[.c])
5858 . nr doc-page-number-count +1
5859 . nr doc-reference-count +1
5861 . ds doc-macro-name %P
5862 . doc-parse-args \$@
5865 . nr doc-curr-font \n[.f]
5866 . nr doc-curr-size \n[.ps]
5868 . \" append to reference box
5869 . boxa doc-page-number-string
5878 .\" NS doc-corporate-count global register
5879 .\" NS counter of corporate references
5881 .nr doc-corporate-count 0
5884 .\" NS doc-corporate-name global box
5885 .\" NS string of collected corporate references
5887 .ds doc-corporate-name
5890 .\" NS %Q user macro
5891 .\" NS corporate or foreign author
5895 .\" NS doc-corporate-count
5896 .\" NS doc-curr-font
5897 .\" NS doc-curr-size
5898 .\" NS doc-macro-name
5899 .\" NS doc-reference-count
5901 .\" NS local variables:
5904 .\" NS width register '%Q' set in doc-common
5907 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5908 . tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
5912 . nr doc-corporate-count +1
5913 . nr doc-reference-count +1
5915 . ds doc-macro-name %Q
5916 . doc-parse-args \$@
5919 . nr doc-curr-font \n[.f]
5920 . nr doc-curr-size \n[.ps]
5922 . \" append to reference box
5923 . boxa doc-corporate-name
5932 .\" NS doc-report-count global register
5933 .\" NS counter of report references
5935 .nr doc-report-count 0
5938 .\" NS doc-report-name global box
5939 .\" NS string of collected report references
5944 .\" NS %R user macro
5945 .\" NS [reference] report name
5949 .\" NS doc-curr-font
5950 .\" NS doc-curr-size
5951 .\" NS doc-macro-name
5952 .\" NS doc-reference-count
5953 .\" NS doc-report-count
5955 .\" NS local variables:
5958 .\" NS width register '%R' set in doc-common
5961 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
5962 . tm Usage: .%R reference_report ... (#\n[.c])
5966 . nr doc-report-count +1
5967 . nr doc-reference-count +1
5969 . ds doc-macro-name %R
5970 . doc-parse-args \$@
5973 . nr doc-curr-font \n[.f]
5974 . nr doc-curr-size \n[.ps]
5976 . \" append to reference box
5977 . boxa doc-report-name
5986 .\" NS doc-reference-title-count global register
5987 .\" NS counter of reference title references
5989 .nr doc-reference-title-count 0
5992 .\" NS doc-reference-title-name global box
5993 .\" NS string of collected reference title references
5995 .ds doc-reference-title-name
5998 .\" NS doc-reference-title-name-for-book global box
5999 .\" NS string of collected reference title references
6000 .\" NS (saved with another font; this is a shortcoming of groff)
6002 .ds doc-reference-title-name-for-book
6005 .\" NS %T user macro
6006 .\" NS reference title
6010 .\" NS doc-curr-font
6011 .\" NS doc-curr-size
6012 .\" NS doc-macro-name
6013 .\" NS doc-reference-title-count
6014 .\" NS doc-report-count
6016 .\" NS local variables:
6019 .\" NS width register '%T' set in doc-common
6022 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6023 . tm Usage: .%T reference_title ... (#\n[.c])
6027 . if \n[doc-is-reference] \{\
6028 . nr doc-reference-title-count +1
6029 . nr doc-reference-count +1
6032 . ds doc-macro-name %T
6033 . doc-parse-args \$@
6036 . nr doc-curr-font \n[.f]
6037 . nr doc-curr-size \n[.ps]
6038 . ie \n[doc-is-reference] \{\
6039 . \" append to reference box
6040 . boxa doc-reference-title-name-for-book
6045 . nop \*[doc-No-font]\c
6048 . \" do it a second time with another font
6049 . ds doc-macro-name %T
6050 . doc-parse-args \$@
6053 . nr doc-curr-font \n[.f]
6054 . nr doc-curr-size \n[.ps]
6055 . boxa doc-reference-title-name
6060 . nop \*[doc-Em-font]\c
6064 . nop \*[doc-Em-font]\c
6065 . doc-print-recursive
6070 .\" NS doc-url-count global register
6071 .\" NS counter of hypertext references
6076 .\" NS doc-url-name global box
6077 .\" NS string of collected hypertext references
6082 .\" NS doc-volume-count global register
6083 .\" NS counter of reference title references
6085 .nr doc-volume-count 0
6088 .\" NS doc-volume-name global box
6089 .\" NS string of collected volume references
6094 .\" NS %U user macro
6095 .\" NS hypertext reference
6099 .\" NS doc-curr-font
6100 .\" NS doc-curr-size
6101 .\" NS doc-macro-name
6102 .\" NS doc-reference-count
6103 .\" NS doc-url-count
6105 .\" NS local variables:
6108 .\" NS width register '%U' set in doc-common
6111 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6112 . tm Usage: .%U URL ... (#\n[.c])
6116 . nr doc-url-count +1
6117 . nr doc-reference-count +1
6119 . ds doc-macro-name %U
6120 . doc-parse-args \$@
6123 . nr doc-curr-font \n[.f]
6124 . nr doc-curr-size \n[.ps]
6126 . \" append to reference box
6136 .\" NS %V user macro
6137 .\" NS reference volume
6141 .\" NS doc-curr-font
6142 .\" NS doc-curr-size
6143 .\" NS doc-macro-name
6144 .\" NS doc-reference-count
6145 .\" NS doc-volume-count
6147 .\" NS local variables:
6150 .\" NS width register '%V' set in doc-common
6153 . if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
6154 . tm Usage: .%V volume ... (#\n[.c])
6158 . nr doc-volume-count +1
6159 . nr doc-reference-count +1
6161 . ds doc-macro-name %V
6162 . doc-parse-args \$@
6165 . nr doc-curr-font \n[.f]
6166 . nr doc-curr-size \n[.ps]
6168 . \" append to reference box
6169 . boxa doc-volume-name
6178 .\" NS doc-do-references macro
6179 .\" NS reference recursion routine
6184 .\" NS local variables:
6188 .de doc-do-references
6189 . if !\n[doc-is-reference] \
6190 . tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
6192 . nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
6194 . ie (\n[doc-reg-ddr1] == 1) \{\
6195 . \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6196 . doc-append-arg \c 3
6197 . \*[doc-arg\n[doc-arg-ptr]]
6200 . nop \)\*[doc-arg\n[doc-arg-ptr]]\c
6202 . ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
6203 . \" finish reference box
6211 . nr doc-reg-ddr \n[doc-arg-ptr]
6213 . nop \)\*[doc-space\n[doc-reg-ddr]]\c
6219 .\" NS Hf user macro
6220 .\" NS source include header files.
6223 .\" NS doc-curr-font
6224 .\" NS doc-curr-size
6226 .\" NS width register 'Hf' set in doc-common
6229 . ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
6241 . Usage: .Hf file (#\n[.c])
6245 .\" NS doc-have-author global register (bool)
6248 .nr doc-have-author 0
6251 .\" NS An user macro
6256 .\" NS doc-curr-font
6257 .\" NS doc-curr-size
6258 .\" NS doc-have-author
6259 .\" NS doc-macro-name
6261 .\" NS width register 'An' set in doc-common
6264 . if !\n[doc-arg-limit] \{\
6266 . ie "\$1"-nosplit" \
6267 . nr doc-in-authors-section 0
6268 . el \{ .ie "\$1"-split" \
6269 . nr doc-in-authors-section 1
6271 . ds doc-macro-name An
6272 . doc-parse-args \$@
6275 . tm1 "Usage: .An {-nosplit | -split}
6276 . tm1 " .An author_name ... (#\n[.c])
6279 . if \n[doc-in-authors-section] \{\
6280 . ie \n[doc-have-author] \
6283 . nr doc-have-author 1
6286 . if \n[doc-arg-limit] \{\
6288 . ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
6289 . nr doc-curr-font \n[.f]
6290 . nr doc-curr-size \n[.ps]
6291 . doc-print-recursive
6294 . tm Usage: .An author_name ... (#\n[.c])
6300 .\" NS Rv user macro
6301 .\" NS return values
6303 .\" NS width register 'Rv' set in doc-common
6305 .\" NS local variables:
6306 .\" NS doc-str-Rv-std-prefix
6307 .\" NS doc-str-Rv-std-suffix
6308 .\" NS doc-str-Rv-stds-prefix
6309 .\" NS doc-str-Rv-stds-and
6310 .\" NS doc-str-Rv-stds-suffix
6311 .\" NS doc-str-Rv-std0
6313 .ds doc-str-Rv-std-prefix "The
6314 .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
6315 .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
6316 .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
6317 .as doc-str-Rv-std-suffix " is set to indicate the error.
6319 .ds doc-str-Rv-stds-prefix "The
6320 .ds doc-str-Rv-stds-and "and
6321 .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
6322 .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
6323 .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
6324 .as doc-str-Rv-stds-suffix " is set to indicate the error.
6326 .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
6327 .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
6328 .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
6329 .as doc-str-Rv-std0 " is set to indicate the error.
6333 .\" XXX: what does this function without '-std'?
6335 . if \n[doc-arg-limit] \{\
6336 . tm Usage: .Rv not callable by other macros (#\n[.c])
6342 . tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
6347 . nr doc-reg-Rv \*[doc-section]
6348 . if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
6349 . tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
6352 . ie (\n[.$] > 1) \{\
6353 . nop \)\*[doc-str-Rv-stds-prefix]
6355 . while (\n[doc-reg-Rv] < \n[.$]) \{\
6357 . Fn \$\n[doc-reg-Rv] ,
6359 . Fn \$\n[doc-reg-Rv]
6362 . nop \)\*[doc-str-Rv-stds-and]
6364 . nop \)\*[doc-str-Rv-stds-suffix]
6366 . el \{ .ie (\n[.$] == 1) \{\
6367 . nop \)\*[doc-str-Rv-std-prefix]
6369 . nop \)\*[doc-str-Rv-std-suffix]
6372 . nop \)\*[doc-str-Rv-std0]
6377 .\" NS Ex user macro
6380 .\" NS width register 'Ex' set in doc-common
6382 .\" NS local variables:
6383 .\" NS doc-str-Ex-std-prefix
6384 .\" NS doc-str-Ex-std-suffix
6386 .ds doc-str-Ex-std-prefix "The
6387 .ds doc-str-Ex-std-suffix "utility exits\~0 on success,
6388 .as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
6390 .ds doc-str-Ex-stds-prefix "The
6391 .als doc-str-Ex-stds-and doc-str-Rv-stds-and
6392 .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
6393 .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
6397 .\" XXX: what does this function without '-std'?
6399 . if \n[doc-arg-limit] \{\
6400 . tm Usage: .Ex not callable by other macros (#\n[.c])
6406 . tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
6411 . nr doc-reg-Ex \*[doc-section]
6412 . if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
6413 . tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
6416 . ie (\n[.$] > 1) \{\
6417 . nop \)\*[doc-str-Ex-stds-prefix]
6419 . while (\n[doc-reg-Ex] < \n[.$]) \{\
6421 . Nm \$\n[doc-reg-Ex] ,
6423 . Nm \$\n[doc-reg-Ex]
6426 . nop \)\*[doc-str-Ex-stds-and]
6428 . nop \)\*[doc-str-Ex-stds-suffix]
6431 . nop \)\*[doc-str-Ex-std-prefix]
6433 . nop \)\*[doc-str-Ex-std-suffix]
6438 .\" NS Mt user macro
6439 .\" NS mailto (for conversion to HTML)
6442 . \" XXX: error handling missing
6447 .\" NS Lk user macro
6448 .\" NS link (for conversion to HTML)
6452 .\" NS doc-curr-font
6453 .\" NS doc-curr-size
6454 .\" NS doc-macro-name
6456 .\" NS local variables:
6457 .\" NS doc-lasttext-Lk
6458 .\" NS doc-target-Lk
6461 . if !\n[doc-arg-limit] \{\
6462 . ds doc-macro-name Lk
6463 . doc-parse-args \$@
6466 . if !\n[doc-arg-limit] \
6469 . \" The first argument is the target URI.
6471 . ds doc-target-Lk "\*[doc-arg\n[doc-arg-ptr]]
6474 . \" Search backwards for the first closing punctuation.
6475 . nr doc-lasttext-Lk \n[doc-arg-limit]
6476 . while (\n[doc-lasttext-Lk] >= \n[doc-arg-ptr]) \{\
6477 . if !(\n[doc-type\n[doc-lasttext-Lk]] == 3) \
6479 . nr doc-lasttext-Lk -1
6482 . \" Print the link text, if any.
6483 . nr doc-curr-font \n[.f]
6484 . nr doc-curr-size \n[.ps]
6485 . if (\n[doc-arg-ptr] <= \n[doc-lasttext-Lk]) \{\
6486 . nop \*[doc-Em-font]\c
6487 . while (\n[doc-arg-ptr] < \n[doc-lasttext-Lk]) \{\
6488 . nop \*[doc-arg\n[doc-arg-ptr]]
6491 . nop \*[doc-arg\n[doc-arg-ptr]]\f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]:
6495 . \" Print the link target.
6496 . nop \*[doc-Sy-font]\*[doc-target-Lk]\c
6497 . nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
6499 . \" Print the delimiters, if any.
6500 . while (\n[doc-arg-ptr] <= \n[doc-arg-limit]) \{\
6501 . nop \*[doc-arg\n[doc-arg-ptr]]\c
6509 .\" NS doc-defunct-macro macro
6510 .\" NS this is the skeleton for defunct macros
6513 .de doc-defunct-macro
6514 . tmc mdoc error: .\$0 defunct
6515 . if d doc-\$0-usage \
6516 . tmc , \*[doc-\$0-usage]
6523 .als Db doc-defunct-macro
6525 .als Ds doc-defunct-macro
6527 .als Or doc-defunct-macro
6528 .ds doc-Or-usage use '|'
6530 .als Sf doc-defunct-macro
6531 .ds doc-Sf-usage use .Pf or .Ns
6537 . tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
6538 . tm1 " Should this have been '.Em ...'?
6543 .\" NS doc-empty-line macro
6544 .\" NS emit warning and print empty line
6547 . if !\n[doc-display-depth] \
6548 . tm mdoc warning: Empty input line #\n[.c]
6558 .\" For UTF-8, map some characters conservatively for the sake of easy
6561 .if '\*[.T]'utf8' \{\
6571 .\" load local modifications
6574 .\" ====================================================================
6576 .\" ====================================================================
6578 .\" Local Variables:
6582 .\" vim: set filetype=groff textwidth=72: