JFIF       %%-))-969KKd       %%-))-969KKd! f%eK_.T  v_/n6q>e}&Cx@t7OuqySN%y%tz@ Un(quo{tS]\~LzǚPk;fϛϹ2y-=_z.NWW7DW@'4`3w3rr;hP8B%ַBe]`7Ҽo1e)弆O|4Wk*}7Su[9=U 9 |_+:@}@˵u@ g<4N<@=/ I(~}qq=y- u|. y'`3S+4$e= k4P]M^_Nou*R-,X0EI}m&LtVȱa|R\@ ʟ+YeIlY`XV^HV/c-eb du ̈́_2+DpV ` ^^->t7JydE]I 8:7#j̀iiVbp~o݃[}zwGF@-(RTJY@ Ty}X 1!2AQaq"3BR`r@PSb #4CTs0DU$EFcd?Lc4\K#E1$@CV8OƂZ5g;.141;%]6e laǃpv8)80D1ŌxLgWYc+z%:( w^PtdԣV Z:qDsh W) ͷ+~FO]"բ?eN 4)WREZ;T+}]:FRtI ѱއ>'s_[\qNhK ' ^qJv9 ]ʜ1FMzwF8ѯBIp-g`?si;|Hr%>jOh29-+-gQmBH?3P9e')>[k^OaxtLiS30ҿ6*o--I$ 1 z2+OЪ+i˺,_n3(~}StUMc \xSmGD0jMB06%') #1c6s/iaIɉgC%Yoi**MHЛ=rh ĭ總 E>Jў2+ct/^$[_kAOʕicR4qm#Lw!Squ/:e%~zMBfa|e7PUC|"/)CD\cy gڰF9(?\jU+>Cwl#>x^'a7C}LYX<@X`W8P hۂx͍q֜?de1qe* NDuTm-ߣ y+pUy*9aĺ:P4n$2&BTϵ@ a>v3uc,(uF0jˊ́a~32f2=ήZe[r!F !Bu)b FŌt%41N/֑41n1|> 1^;1=IĖEpq%"{/~M.QWDdUA6~z>kPh2Oi?Uc[`+l;՚':۾ږtoZjQ7\:Z3}~ &ڮRQH{mDq0TaM5i:5sC0x<]=Mp c!C<6]~vpxeH[AmY'iԖ_~ a(Ȕ@+a< w] wbk1#aD 9. ?p$ Qؒi-8S㨸f45t:ʙѾ.{mMshU1k\z^*#It@ v:%#iSZ.{.Vemm,Z3*;HtU8E.v'e ޴ 4WwLDe)jY*R'?wM֣ b+IfO('Y J$o޼ l.蕁~ Y Em>Y^m"r^4w}2PI7R1gV\wtVT׿w'*N{ZGN8qzrM/LO~ O~|ڞ櫮o{\dV斀AJmn E#HQg$!{XM'{u* 4O)>F.";l2z3IJ2?Fh7)rjrv@ AJlУ 0`StpGD&nƒpxΡ}P늿D@cEH҆2[9a}U/biEzu)xYR>߹q (yA~ُp \U\L\6~" U'>GJOP,ko:JGI*٢C8f8굟m#GV̐Cj]}N_]aJulE.+I&y5 6*TGHZRů}efjv"\3/3_hq՝g !ir,ܐv%~*lXccyo) 拏Qp_tT3!,Dur!CH7;9GQQmE:ÑCaƅ;zeij;d+% z#e%gdI9E5BB&۟S"=C(>{֠ ɫNUळiu>;P}حW]ouBmJS0ktRtDm+$ԫU_dq)$ ʃnLGSፑf'vlzP/_]QԂ]ȗ|W\;wTSf!m,ri{w了enP(`*.1i2.}e@;HA&_N᷸1|:Gjڒj~i/֬]1(N +^ bQq:›m*o5Y(.JPV[3ޭj֭j+i(uָ]kV)A/%X Fa?8'o>ꝣKks\_k)S%zDTRw#h#e#1Euk&,Yw+Ap"PIZ*j*Ug">m>|ڇ(#FXzCi9%J'H3Xwi-9s0S`R^֮ YLJz+q^i}i1jLK+ [ NzDSq[+Q'ݖl=s<[iIWz=%}[jɁ֠$$N7IUm83SVŭw)#0$g C26^ʓW<=B>{R)&繻8j3cbbce7TE1r\'}FūLO+KʢXm/=H 6FaRHI^Lȹ83g9CM93쑑nE)=q4I$s'ݠajm]"O>L4Vb;(eHm$֫ӆyYtYYr(<Ɠ2Fm "f֒;Tξu8jZR$b!E*9 yy+V:Dm Œ9@-f*l2#ٿPt#T҂ӵ&;AȃWlf xϜZكfj%bs ,/uN{,Gz*kkP M6f/0[I;S)ml-؉)~q9v`ǣ4gZJ}h&dﺥ#{}uDa7j(I'2OҒMF7 .Ey<$5;2ժTI %)TwG54Ŭ Kb6rG;uq\[8DJ'i$?Pq-ݗs\JGkYO2%}b\9;Tk⾜3%qSd( [O4i'jQՃ &F Ҧ T2!G{N j~:Cz J3|xd(6TZ a b5gfK\I)WYARA(RVE$G8at̖qWq{B:Q^g3QzcAZrH|GMcjb{+)r=>:de:¹[QOe@>ISP1nIq!:3G).!ŶB꠲#0Eb2"Lt4ƺKCGn9P=PeoX8@fղ Gi9k ^aHAV<)GG*k_aUΜWsX4ʷ\%m,W*F}<1E/&NJIʳ:PmeRuń%A<ᶧ2s^s-9$PHw]ZB#[>9Fm*>Ut.HugK9uaAF.%fW&J~$k^S:iގT9_5`_bR`ܒ(8Fa?jMc4Pŭ!VB7 W+߀ i>b٠,]?<{aXgpJ]璹نrV53-)p:,R%>#W۲4K{%L%]ͅP,7"[NI:ܴ- AJr)#"=k#Eoa PP$C>7m_t ڠcJZymA [qwDw|*3(FMۭ\KP-'1WK, suu;~ZaTnyi$A =46i֑AUU"l:gA ]"8&ד<{z&O!WF^XGhViWM\q(*p#Fk?p\Ym*J3B3'%jn+ IG{VcVL-f7 #/u}5bD7XMi!{#b$U]q\RGa ;OZXv^WZ\ܭ( lhSˎ6 V'h GY{49$r8AIȃ#V$HL/~l.]:>29:EkSO%N$Ϋkͯ⫝̸yˮ0mE+IVwuIu>Xj%6@[k)aqJz|؏!Υ֔RP.l@tⵅkZg'5nrqDU^kJBEBfrG)+J$"dB3#ٔk4yQCz9S\8'#/5cˑYO(4dhIM<6BߢJNDZFEgD6vnl|^kr;^hϨ1!ʌ:įZBᝋx|T+'!c t"YH=)"g6-t+.Ur$+ZzRG s*f9_QY4El>DI[}B=>v)iTg[?oWwۿlWG69k{Qx]-*$<-=W¹nUĂ}G4tZ]^Q8m!])SyR)vOR(_Aiϵei#{$hਧ.SLN}߬e}EgZwgAWPBcZÖ']P ;2/hy}1M9Fj'.ӖZy-,r ND|jlC)jqSʚV)]p3;❀[:tBH##HqhZr\j"tG-тtHtB24PJ:w;xI0$ wEQ#)FejK rSw|">Tҙ#2Xc8g,(L`S2 tM>5@<)A71iXSlHڛ9(y4KUu:xARdf5\Zq|m{ӭjI8%. ڟ5pxvqd(9P$#"8CQ NKFۘ;RTPE8^`WãRxL髍{}ġͭ緗Ҍ/<xcKOVy0\{Uk85A07)_uCuopN>~3e e޽ytYnDm3)ܠ&,![y3CcؽK+raޱX~aRbm<wE #+ԺQXfGq+h[71_A* [V٣sCEXb\fNiXNݔz NҲ wrG"+ kлYI`ϼUՄ o9Vc7^[Y"E]W>(GSkt]Gcx~hM`?WV8q w< `bJb̑ NNG[xr̈>Kþ7<7H56pIEKgoE`?4e)ޛ)7M(-4ot}LDG6"qycg~x{>8.,7W_ɦ/nG|MFU^VYpa",BBBH;GC#2JerK*ZIqbIphت݉)c繥ՅVtLnEcf62:;\Rw@{ S5Q $ϑTz;EzFO5Pn.NA<~ҌoXR|Ig$^]A|^_mmҷj8mbMbՅHmvI_MqƊFCq&Б%z>ΧKEAg4y;/0f[|@$SG,h5@0RȁцEH-qm%Kb%Dx:0XNHWIᰵ$G)|^ χ,m,#%6צIpO FDFUH5JKlI>Vxn;ĶY;dZkarnƭaeG< W#9+؄l?jEmDo<~W++0#π*<.ۘZ+H$VfF|J&#N ?*<<⢌՞\.#I: !#Sh-4'F |-[WQFH7 )d`JFCbFɞ9N9vՅW4xPOBHc2a"*90Iv5IGI<hI I*'Ƿ.-m1ȼѹKF2ٷ;*A*T6FDSKsipI tGx f$9 Ǐzf{kd@r:/?(i^b 3)_g;&IEWu̓*2t7qL Ti5, wdXr&Gwmŏy)IJD+iE:v6[=9ʰ;q` =}#q:<>~mFU631TqQ (t2/c~ iK'y˴TlxsF_$ {a8[yfc>Y͘k8&9x\Նڻ{I&7+ fv F=,ꌼcCA[c:麑î6B겦&|mFm㪈Rfw .xJês1?_UnuQGǪ?6wR5b-:q{wK  !1A2Qq"@PRa #03BCSbr4$T`c?K)o<rzѸUL<6K4F̘E¹?Q7 QZtʄSV9iE$m6vU>8_F!zaS# j_4Jzm_bȚ;/:Iq7A9Qڜp͖!QTaOSTQzqS5U{LHOWc;TWUA}YWqUNKURѾĴ:gfYnQ*dv?F6i1G6[H?W*!Wl 8OlE?U$jv<&Rا@TG"X޺51?Ikymc{TLʧA4Y+#a=[#j Ge;@֍Xًv_(uVgJjbէz;5$۱ʡ)zv|eS u̎b{ean<6\;CQ<@΍b{ZM%[*n,z{EZR++e`w޹bh9cWF2ǴU:RMWd架;UJcDtK_G@y5GāYzF 8cWb㖈qw4ecqMis,)',o=ߘq5e-0j.}xNGq?d;D5T Dbng2!zN%i`IJ4]JN Kv ./iLZFOii h=yn%wdԲ:d뉆2 ]|1jnvBV@XkxN_;J Kӯ$ΟVlXm x[0'id =qcamjdӚȹaE4rY26!۩PS#U v{-51~q<'x;Z *'Fg"pojg9l:5W媴txyyUU%`_58Mngv[+jz>XwbIt$]ɞ*{ &b^F=C4ЏZ+ F\pR]9c1b * @@K,\ϔ =0<9N{U^ozﺊ<˒D4p2 ,Ƿ˗:#]j*&*jFTܪTdF@x8׭CX2U&y({9b駴to90\DUaaƏ@J:tš#x]d0pUiJ!Џ_1Ke9s$\t%ZiW-]ZVp[!c8OڋGPmM 'ÈX$I"s)Ȍ[ڦT ׫wJsn$QӨ]dJ[;~ԕ$lŧt}7RU@&778ܷK "$4C^iQ􄆺h(Cg#P QҤ1 7~V=6~8:#7/N5qz=8ȂiEʀJpnx8.9@~1m3sE? :zqGY}:O#yw23$1%m}8`E毑s_PznQ[LF%D;S)י -YW < quTݪҒl>I£$qG,Ȑf=g + `~}m5dO+ipyOfv]ishu*8tx"4n7putfV]D`i=ZHWIwȩ<[.P\xӊF)jbKfzASi{*u#8 9p뚰 H@ff>,`2 L6b8 mw{Hn3|b3Fg1e6C<eH /_~B#L *t0xbS% 웞: Aɔ89hjd[OY墪9sŎzNZ:&Yiu%MGw=Y ]QӍ -u@'p[wK%suԘse^wbiɫ:f䲯4ֶCP JFE32 X;yVeAbFyyX%H ,vgb~Ksʊ&V φ 5f̅2K7ZVԎBLǑ=zv-yq,nȇ'(:8$(rH*!S RI.Lj"9\W>])|›\o?-tEs#678PI:e5n$i0ScudA F(ET lq{讬3 28xۆ1IPԲ v0r$0{[J*cyA 1OQ-3f5;׆!`;mV[g{*d$221VR8jk.aH)7c=BO>~ T77XӇʧ _NاVV:Gye)NKk Ǵ`ՏS=Wy\cu`}@8C2su XqC Պ̜xEU ڭ{$KόI@F؛NLOA$F[X2rĔG L\wE2J3S8IJ2e`A7),b +noĐ<{XA"Lj%W̮RI7=e0O {F 3t6ǽN7aNHmo!_5G/GGz`ǻwl${wzd2X,!a/@X{wh]S MARIJUANA
— DIOS — NO — CREA — NADA — EN — VANO —
Linux vps-ed8565de 5.10.0-37-cloud-amd64 #1 SMP Debian 5.10.247-1 (2025-12-11) x86_64
  SOFT : Apache/2.4.65 (Debian) PHP : 7.4.33
/usr/share/groff/current/tmac/
51.178.36.14

 
[ NAME ] [ SIZE ] [ PERM ] [ DATE ] [ ACT ]
+FILE +DIR
mdoc dir drwxr-xr-x 2021-12-20 04:33 R D
an-ext.tmac 3.699 KB -rw-r--r-- 2021-01-27 09:42 R E G D
an-old.tmac 14.318 KB -rw-r--r-- 2021-01-27 09:42 R E G D
an.tmac 0.306 KB -rw-r--r-- 2021-01-27 09:42 R E G D
andoc.tmac 2.592 KB -rw-r--r-- 2021-01-27 09:42 R E G D
composite.tmac 0.786 KB -rw-r--r-- 2021-01-27 09:42 R E G D
cp1047.tmac 2.396 KB -rw-r--r-- 2021-01-27 09:42 R E G D
cs.tmac 4.723 KB -rw-r--r-- 2021-01-27 09:42 R E G D
de.tmac 5.013 KB -rw-r--r-- 2021-01-27 09:42 R E G D
den.tmac 1.197 KB -rw-r--r-- 2021-01-27 09:42 R E G D
devtag.tmac 3.74 KB -rw-r--r-- 2021-01-27 09:42 R E G D
doc-old.tmac 35.714 KB -rw-r--r-- 2021-01-27 09:42 R E G D
doc.tmac 84.607 KB -rw-r--r-- 2021-01-27 09:42 R E G D
eqnrc 1.394 KB -rw-r--r-- 2021-01-27 09:42 R E G D
europs.tmac 1.649 KB -rw-r--r-- 2021-01-27 09:42 R E G D
fallbacks.tmac 1.383 KB -rw-r--r-- 2021-01-27 09:42 R E G D
fr.tmac 5.43 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.cs 20.935 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.den 156.326 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.det 157.138 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.fr 27.554 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.sv 34.018 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphen.us 27.462 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphenex.cs 0.493 KB -rw-r--r-- 2021-01-27 09:42 R E G D
hyphenex.us 21.246 KB -rw-r--r-- 2021-01-27 09:42 R E G D
ja.tmac 1.889 KB -rw-r--r-- 2021-01-27 09:42 R E G D
latin1.tmac 2.219 KB -rw-r--r-- 2021-01-27 09:42 R E G D
latin2.tmac 2.307 KB -rw-r--r-- 2021-01-27 09:42 R E G D
latin5.tmac 2.226 KB -rw-r--r-- 2021-01-27 09:42 R E G D
latin9.tmac 2.219 KB -rw-r--r-- 2021-01-27 09:42 R E G D
man.tmac 0.057 KB -rw-r--r-- 2021-01-27 09:42 R E G D
mandoc.tmac 0.06 KB -rw-r--r-- 2021-01-27 09:42 R E G D
mdoc.tmac 0.056 KB -rw-r--r-- 2021-01-27 09:42 R E G D
papersize.tmac 4.23 KB -rw-r--r-- 2021-01-27 09:42 R E G D
pdfpic.tmac 3.67 KB -rw-r--r-- 2021-01-27 09:42 R E G D
pic.tmac 0.136 KB -rw-r--r-- 2021-01-27 09:42 R E G D
ps.tmac 20.095 KB -rw-r--r-- 2021-01-27 09:42 R E G D
psatk.tmac 1.076 KB -rw-r--r-- 2021-01-27 09:42 R E G D
psold.tmac 1.785 KB -rw-r--r-- 2021-01-27 09:42 R E G D
pspic.tmac 4.881 KB -rw-r--r-- 2021-01-27 09:42 R E G D
safer.tmac 0.213 KB -rw-r--r-- 2021-01-27 09:42 R E G D
sv.tmac 4.3 KB -rw-r--r-- 2021-01-27 09:42 R E G D
trans.tmac 4.689 KB -rw-r--r-- 2021-01-27 09:42 R E G D
troffrc 1.604 KB -rw-r--r-- 2021-01-27 09:42 R E G D
troffrc-end 1.14 KB -rw-r--r-- 2021-01-27 09:42 R E G D
tty-char.tmac 5.688 KB -rw-r--r-- 2021-01-27 09:42 R E G D
tty.tmac 1.838 KB -rw-r--r-- 2021-01-27 09:42 R E G D
unicode.tmac 0.091 KB -rw-r--r-- 2021-01-27 09:42 R E G D
www.tmac 39.964 KB -rw-r--r-- 2021-01-27 09:42 R E G D
zh.tmac 1.688 KB -rw-r--r-- 2021-01-27 09:42 R E G D
REQUEST EXIT
©TheAlmightyZeus
.\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in .\" the documentation and/or other materials provided with the .\" distribution. .\" 3. [Deleted. See .\" ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change] .\" 4. Neither the name of the University nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A .\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR .\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT .\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF .\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND .\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)doc 8.1 (Berkeley) 06/08/93 .\" .\" Modified by jjc@jclark.com as follows: the doc-* files are assumed .\" to be installed as mdoc/doc-* rather than tmac.doc-* (the filename .\" 'tmac.doc-common' would be too long); when using groff, the doc-* .\" files are loaded using the 'mso' request. .\" .\" Modified by .\" .\" Werner LEMBERG and .\" Ruslan Ermilov .\" .\" to make it more readable: using long names and many groff features, .\" updating and extending documentation, etc. .\" .\" This is a generated file, created by 'tmac/strip.sed' in groff's .\" source distribution from a file having '-u' appended to its name. .if !\n(.g \ .ab This version of mdoc can be run with GNU troff only! .do if d Dd .nx .cp 0 .if (\n[.x]\n[.y] < 118) \ .ab You need GNU troff version 1.18 or higher to run this version of mdoc! .ie t \ .mso mdoc/doc-ditroff .el \ .mso mdoc/doc-nroff .mso mdoc/doc-common .mso mdoc/doc-syms .eo .ds doc-macro-name .als doc-arg0 doc-macro-name .nr doc-arg-limit 0 .nr doc-num-args 0 .nr doc-arg-ptr 0 .ds doc-arg1 .nr doc-type1 0 .ds doc-space1 .de doc-parse-args .if !\n[doc-arg-limit] \ .doc-set-spacing-1 .nr doc-have-space 0 .if !\n[.$] \ .return .nr doc-arg-limit +1 .ie "\$1"|" \ .ds doc-arg\n[doc-arg-limit] \f[R]|\f[] .el \{ .ie "\$1"..." \ .ds doc-arg\n[doc-arg-limit] \|.\|.\|. .el \ .ds doc-arg\n[doc-arg-limit] "\$1 .\} .doc-get-arg-type* \n[doc-arg-limit] .nr doc-type\n[doc-arg-limit] \n[doc-arg-type] .doc-set-spacing-\n[doc-arg-type] .ie (\n[.$] == 1) \ .nr doc-arg-ptr 0 .el \{\ .shift .doc-parse-args \$@ .\} .nh .. .de doc-parse-arg-vector .if !\n[doc-arg-limit] \ .doc-set-spacing-1 .nr doc-arg-limit +1 .ie "\*[doc-arg\n[doc-arg-limit]]"|" \ .ds doc-arg\n[doc-arg-limit] \f[R]|\f[] .el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \ .ds doc-arg\n[doc-arg-limit] \|.\|.\|. .\} .doc-get-arg-type* \n[doc-arg-limit] .nr doc-type\n[doc-arg-limit] \n[doc-arg-type] .doc-set-spacing-\n[doc-arg-type] .ie (\n[doc-num-args] == 1) \{\ .nr doc-arg-ptr 0 .nr doc-num-args 0 .\} .el \{\ .nr doc-num-args -1 .doc-parse-arg-vector .\} .nh .. .de doc-parse-space-vector .nr doc-arg-limit +1 .doc-set-spacing-\n[doc-type\n[doc-arg-limit]] .ie (\n[doc-num-args] == 1) \ .nr doc-num-args 0 .el \{\ .nr doc-num-args -1 .doc-parse-space-vector .\} .. .de doc-remaining-args .nr doc-arg-ptr +1 .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .ie (\n[doc-num-args] == 1) \{\ .nr doc-arg-ptr 0 .nr doc-num-args 0 .\} .el \{\ .nop \)\*[doc-space]\c .nr doc-num-args -1 .doc-remaining-args .\} .. .de doc-append-arg .nr doc-arg-limit +1 .ds doc-arg\n[doc-arg-limit] "\$1 .nr doc-type\n[doc-arg-limit] \$2 .doc-set-spacing-\$2 .. .de doc-print-and-reset .if \n[doc-space-mode] \ .nop \) .doc-reset-args .. .de doc-reset-args .nr doc-arg-limit 0 .nr doc-arg-ptr 0 .nr doc-have-slot 0 .hy \n[doc-hyphen-flags] .. .ec .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .eo .de Fl .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fl-font]\c .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Fl .doc-parse-args \$@ .if !\n[.$] \ .nop \|\-\|\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \|\-\f[]\s[0]\c .doc-print-and-reset .\} .el \{\ .ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\ .nop \|\-\f[]\s[0]\c .\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 3) \ .nop \|\-\|\c .nr doc-reg-Fl 1 .doc-flag-recursion .\}\} .. .de doc-flag-recursion .nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]] .ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]] .ie (\n[doc-reg-dfr1] == 1) \{\ .nop \f[]\s[0]\c .\*[doc-str-dfr] .\} .el \{\ .nr doc-reg-dfr \n[doc-arg-ptr] .ie (\n[doc-reg-dfr1] == 2) \{\ .ie "\*[doc-str-dfr]"\*[Ba]" \{\ .if \n[doc-reg-Fl] \ .nop \|\-\*[doc-space]\c .nop \)\*[Ba]\c .\} .el \{\ .ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\ .if \n[doc-reg-Fl] \ .nop \|\-\*[doc-space]\c .nop \f[R]|\f[]\c .\} .el \{\ .ie "\*[doc-str-dfr]"-" \ .nop \|\-\^\-\|\c .el \ .nop \|\%\-\*[doc-str-dfr]\&\c .\}\}\} .el \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-str-dfr]\f[]\s[0]\c .\} .ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\ .if (\n[doc-reg-dfr1] == 4) \ .nop \|\-\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .doc-print-and-reset .\} .el \{\ .nr doc-arg-ptr +1 .ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\ .ie (\n[doc-type\n[doc-reg-dfr]] == 4) \ .nop \|\-\c .el \ .nop \)\*[doc-space\n[doc-reg-dfr]]\c .\} .el \ .nop \)\*[doc-space\n[doc-reg-dfr]]\c .shift .nr doc-reg-Fl 0 .doc-flag-recursion \$@ .\}\} .. .de doc-print-recursive .nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]] .ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]] .ie (\n[doc-reg-dpr1] == 1) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .\*[doc-str-dpr] .\} .el \{\ .nr doc-reg-dpr \n[doc-arg-ptr] .ie (\n[doc-reg-dpr1] == 2) \ .nop \%\*[doc-str-dpr]\&\c .el \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-str-dpr]\f[]\s[0]\c .\} .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .doc-print-and-reset .\} .el \{\ .nop \)\*[doc-space\n[doc-reg-dpr]]\c .doc-print-recursive .\}\} .. .de doc-print-prefixes .while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if !(\n[doc-type\n[doc-arg-ptr]] == 4) \ .break .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c .nr doc-arg-ptr +1 .\} .. .de doc-generic-macro .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name \$0 .doc-parse-args \$@ .\} .el \ .tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\ .tmc mdoc warning: Using a macro as first argument .tm1 " cancels effect of .\$0 (#\n[.c]) .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-\$0-font]\c .doc-print-recursive .\} .el \{\ .tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c]) .doc-reset-args .\} .. .ds doc-str-Ar-default "file\ .\|.\|. .de Ar .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ar-font]\c .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Ar .doc-parse-args \$@ .if !\n[.$] \ .nop \)\*[doc-str-Ar-default]\&\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c .doc-print-and-reset .\} .el \{\ .if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default] .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\} .doc-print-recursive .\} .. .als Ad doc-generic-macro .ds doc-Ad-usage address .nr doc-indent-synopsis 0 .nr doc-indent-synopsis-active 0 .de Cd .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Cd .doc-parse-args \$@ .\} .el \ .tm Usage: .Cd configuration_file_declaration ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-in-synopsis-section] \{\ .ie "\*[doc-macro-name]"Cd" \{\ .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis \n[doc-display-indent]u .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .nop \*[doc-Nm-font]\c .doc-print-recursive .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .\} .el \{\ .nop \*[doc-Nm-font]\c .doc-print-recursive .\}\} .el \{\ .nop \*[doc-Nm-font]\c .doc-print-recursive .\}\} .el \{\ .tm Usage: .Cd configuration_file_declaration ... (#\n[.c]) .doc-reset-args .\} .. .als Cm doc-generic-macro .ds doc-Cm-usage interactive_command_modifier .als Dv doc-generic-macro .ds doc-Dv-usage defined_variable .als doc-Dv-font doc-Er-font .als Em doc-generic-macro .ds doc-Em-usage text .als Er doc-generic-macro .ds doc-Er-usage text .als Ev doc-generic-macro .ds doc-Ev-usage text .nr doc-have-decl 0 .nr doc-have-var 0 .de doc-do-func-decl .if \n[doc-in-synopsis-section] \{\ .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-func] \{\ .ie \n[doc-have-decl] \ .br .el \ .doc-paragraph .\} .nr doc-have-decl 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .. .de Fd .ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\ .doc-do-func-decl .nop \*[doc-Fd-font]\$* .br .ft \n[doc-curr-font] .ps \n[doc-curr-size]u .\} .el \{\ .tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c]) .doc-reset-args .\} .. .de In .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name In .doc-parse-args \$@ .\} .el \ .tm Usage: .In include_file ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-in-synopsis-section] \{\ .ie "\*[doc-macro-name]"In" \{\ .doc-do-func-decl .nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]> .ft \n[doc-curr-font] .ps \n[doc-curr-size]u .br .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .el \{\ .ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]] .as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]> .doc-print-recursive .\}\} .el \{\ .ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]] .as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]> .doc-print-recursive .\}\} .el \{\ .tm Usage: .In include_file ... (#\n[.c]) .doc-reset-args .\} .. .als Fr doc-generic-macro .ds doc-Fr-usage function_return_value .als doc-Fr-font doc-Ar-font .als Ic doc-generic-macro .ds doc-Ic-usage interactive_command .als Li doc-generic-macro .ds doc-Li-usage argument .als Ms doc-generic-macro .ds doc-Ms-usage math_symbol .als doc-Ms-font doc-Sy-font .ds doc-command-name .de Nm .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Nm .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .ie "\*[doc-command-name]"" \ .tm Usage: .Nm name ... (#\n[.c]) .el \ .doc-parse-args \*[doc-command-name] .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .ie "\*[doc-command-name]"" \{\ .tm Usage: .Nm name ... (#\n[.c]) .doc-reset-args .\} .el \{\ .nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c .doc-print-and-reset .\}\} .el \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .ie "\*[doc-command-name]"" \ .tm Usage: .Nm name ... (#\n[.c]) .el \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0] .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\}\} .el \{\ .if \n[doc-in-synopsis-section] \{\ .if "\*[doc-macro-name]"Nm" \{\ .br .if !\n[doc-indent-synopsis] \{\ .doc-get-width "\*[doc-arg\n[doc-arg-ptr]]" .nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u) .\} .if !\n[doc-indent-synopsis-active] \{\ .in +\n[doc-indent-synopsis]u .nr doc-indent-synopsis-active 1 .\} .ti -\n[doc-indent-synopsis]u .\}\} .if "\*[doc-command-name]"" \ .ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]] .nop \*[doc-Nm-font]\c .\} .doc-print-recursive .\} .. .de Pa .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Pa .doc-parse-args \$@ .if !\n[.$] \ .nop \*[doc-Pa-font]~\f[]\s[0] .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Pa-font]\c .if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-arg-ptr -1 .ds doc-arg\n[doc-arg-ptr] ~ .nr doc-type\n[doc-arg-ptr] 2 .ds doc-space\n[doc-arg-ptr] "\*[doc-space] .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .doc-parse-space-vector .\} .doc-print-recursive .\} .el \{\ .nop \*[doc-Pa-font]~\f[]\s[0]\c .doc-print-and-reset .\} .. .als Sy doc-generic-macro .ds doc-Sy-usage symbolic_text .als Me doc-generic-macro .ds doc-Me-usage menu_entry .de Tn .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Tn .doc-parse-args \$@ .\} .el \ .tm Usage: .Tn trade_name ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \)\*[doc-Tn-font-size]\c .ie !\n[doc-is-reference] \{\ .nop \)\*[doc-Tn-font-shape]\c .doc-print-recursive .\} .el \ .doc-do-references .\} .el \{\ .tm Usage: .Tn trade_name ... (#\n[.c]) .doc-reset-args .\} .. .als Va doc-generic-macro .ds doc-Va-usage variable_name .als No doc-generic-macro .ds doc-No-usage normal_text .ds doc-quote-left .ds doc-quote-right .de Op .if !\n[doc-arg-limit] \ .ds doc-macro-name Op .ds doc-quote-left "\*[doc-left-bracket] .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-string \$@ .. .de Aq .if !\n[doc-arg-limit] \ .ds doc-macro-name Aq .ie "\*[doc-macro-name]"An" \{\ .ds doc-quote-left < .ds doc-quote-right > .\} .el \{\ .ds doc-quote-left \[la] .ds doc-quote-right \[ra] .\} .doc-enclose-string \$@ .. .de Bq .if !\n[doc-arg-limit] \ .ds doc-macro-name Bq .ds doc-quote-left "\*[doc-left-bracket] .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-string \$@ .. .de Brq .if !\n[doc-arg-limit] \ .ds doc-macro-name Brq .ds doc-quote-left { .ds doc-quote-right } .doc-enclose-string \$@ .. .de Dq .if !\n[doc-arg-limit] \ .ds doc-macro-name Dq .ds doc-quote-left "\*[Lq] .ds doc-quote-right "\*[Rq] .doc-enclose-string \$@ .. .de Eq .if !\n[doc-arg-limit] \ .ds doc-macro-name Eq .ds doc-quote-left "\$1 .ds doc-quote-right "\$2 .shift 2 .doc-enclose-string \$@ .. .de Pq .if !\n[doc-arg-limit] \ .ds doc-macro-name Pq .ds doc-quote-left "\*[doc-left-parenthesis] .ds doc-quote-right "\*[doc-right-parenthesis] .doc-enclose-string \$@ .. .de Qq .if !\n[doc-arg-limit] \ .ds doc-macro-name Qq .ds doc-quote-left "\*[q] .ds doc-quote-right "\*[q] .doc-enclose-string \$@ .. .de Sq .if !\n[doc-arg-limit] \ .ds doc-macro-name Sq .ds doc-quote-left "\*[doc-left-singlequote] .ds doc-quote-right "\*[doc-right-singlequote] .doc-enclose-string \$@ .. .de Es .if !\n[doc-arg-limit] \{\ .ie (\n[.$] > 2) \{\ .ds doc-macro-name Es .doc-parse-args \$@ .\} .el \{\ .ds doc-quote-left "\$1 .ds doc-quote-right "\$2 .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .el \ .doc-print-and-reset .. .nr doc-have-slot 0 .de doc-enclose-string .if \n[doc-in-synopsis-section] \ .doc-set-hard-space .if !\n[doc-arg-limit] \{\ .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .nop \)\*[doc-quote-left]\*[doc-quote-right] .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nr doc-arg-ptr +1 .doc-print-prefixes .nop \)\*[doc-quote-left]\)\c .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .nop \)\*[doc-quote-right]\)\c .doc-print-and-reset .\} .el \{\ .ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\ .nr doc-reg-des (\n[doc-arg-limit] - 1) .while (\n[doc-type\n[doc-reg-des]] == 3) \ .nr doc-reg-des -1 .nr doc-reg-des +1 .ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]] .\} .el \{\ .nr doc-reg-des \n[doc-arg-limit] .while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\ .if !\A\*[doc-arg\n[doc-reg-des]] \ .break .if !d doc-after-\*[doc-arg\n[doc-reg-des]] \ .break .nr doc-reg-des -1 .\} .ie (\n[doc-reg-des] == \n[doc-arg-limit]) \ .doc-append-arg "\)\*[doc-quote-right]\)" 3 .el \{\ .ie \n[doc-have-slot] \ .ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]] .el \{\ .nr doc-reg-des +1 .nr doc-reg-des1 \n[doc-arg-limit] .nr doc-reg-des2 (\n[doc-arg-limit] + 1) .while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\ .rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2] .rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2] .rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2] .nr doc-reg-des1 -1 .nr doc-reg-des2 -1 .\} .nr doc-arg-limit +1 .ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\) .nr doc-type\n[doc-reg-des] 3 .nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1) .nr doc-arg-limit (\n[doc-reg-des] - 1) .doc-parse-space-vector .nr doc-have-slot 1 .\}\}\} .doc-do-\n[doc-type\n[doc-arg-ptr]] .\} .if \n[doc-in-synopsis-section] \ .doc-set-soft-space .. .als En doc-enclose-string .de Ao .if !\n[doc-arg-limit] \ .ds doc-macro-name Ao .ie "\*[doc-macro-name]"An" \ .ds doc-quote-left < .el \ .ds doc-quote-left \[la] .doc-enclose-open \$@ .. .de Ac .if !\n[doc-arg-limit] \ .ds doc-macro-name Ac .ie "\*[doc-macro-name]"An" \ .ds doc-quote-right > .el \ .ds doc-quote-right \[ra] .doc-enclose-close \$@ .. .de Bo .if !\n[doc-arg-limit] \ .ds doc-macro-name Bo .ds doc-quote-left "\*[doc-left-bracket] .doc-enclose-open \$@ .. .de Bc .if !\n[doc-arg-limit] \ .ds doc-macro-name Bc .ds doc-quote-right "\*[doc-right-bracket] .doc-enclose-close \$@ .. .de Bro .if !\n[doc-arg-limit] \ .ds doc-macro-name Bo .ds doc-quote-left { .doc-enclose-open \$@ .. .de Brc .if !\n[doc-arg-limit] \ .ds doc-macro-name Bc .ds doc-quote-right } .doc-enclose-close \$@ .. .de Do .if !\n[doc-arg-limit] \ .ds doc-macro-name Do .ds doc-quote-left "\*[Lq] .doc-enclose-open \$@ .. .de Dc .if !\n[doc-arg-limit] \ .ds doc-macro-name Dc .ds doc-quote-right "\*[Rq] .doc-enclose-close \$@ .. .de Eo .if !\n[doc-arg-limit] \ .ds doc-macro-name Eo .ds doc-quote-left "\$1 .shift .doc-enclose-open \$@ .. .de Ec .if !\n[doc-arg-limit] \ .ds doc-macro-name Ec .ds doc-quote-right "\$1 .shift .doc-enclose-close \$@ .. .de Oo .if !\n[doc-arg-limit] \ .ds doc-macro-name Oo .ds doc-quote-left [ .doc-enclose-open \$@ .. .de Oc .if !\n[doc-arg-limit] \ .ds doc-macro-name Oc .ds doc-quote-right ] .doc-enclose-close \$@ .. .de Po .if !\n[doc-arg-limit] \ .ds doc-macro-name Po .ds doc-quote-left "\*[doc-left-parenthesis] .doc-enclose-open \$@ .. .de Pc .if !\n[doc-arg-limit] \ .ds doc-macro-name Pc .ds doc-quote-right "\*[doc-right-parenthesis] .doc-enclose-close \$@ .. .de Qo .if !\n[doc-arg-limit] \ .ds doc-macro-name Qo .ds doc-quote-left "\*[q] .doc-enclose-open \$@ .. .de Qc .if !\n[doc-arg-limit] \ .ds doc-macro-name Qc .ds doc-quote-right "\*[q] .doc-enclose-close \$@ .. .de So .if !\n[doc-arg-limit] \ .ds doc-macro-name So .ds doc-quote-left "\*[doc-left-singlequote] .doc-enclose-open \$@ .. .de Sc .if !\n[doc-arg-limit] \ .ds doc-macro-name Sc .ds doc-quote-right "\*[doc-right-singlequote] .doc-enclose-close \$@ .. .de Xo .if !\n[doc-arg-limit] \ .ds doc-macro-name Xo .ds doc-quote-left .doc-enclose-open \$@ .. .de Xc .if !\n[doc-arg-limit] \ .ds doc-macro-name Xc .ds doc-quote-right .doc-enclose-close \$@ .. .nr doc-nesting-level 0 .nr doc-in-list 0 .de doc-enclose-open .if !\n[doc-arg-limit] \ .doc-parse-args \$@ .nr doc-arg-ptr +1 .doc-print-prefixes .nr doc-arg-ptr -1 .nop \)\*[doc-quote-left]\)\c .box doc-enclosure-box\n[doc-nesting-level] .ev doc-enclosure-env\n[doc-nesting-level] .evc 0 .in 0 .nf .nop \&\c .nr doc-nesting-level +1 .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .de doc-enclose-close .nr doc-nesting-level -1 .br .ev .box .chop doc-enclosure-box\n[doc-nesting-level] .unformat doc-enclosure-box\n[doc-nesting-level] .nh .nop \*[doc-enclosure-box\n[doc-nesting-level]]\c .nop \)\*[doc-quote-right]\)\c .if !\n[doc-arg-limit] \{\ .doc-parse-args \$@ .if !\n[.$] \ .doc-print-and-reset .\} .if \n[doc-arg-limit] \{\ .ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nop \)\*[doc-space\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-print-and-reset .\} .if !"\*[doc-macro-name]"It" \ .if \n[doc-in-list] \ .if !\n[doc-nesting-level] \ .doc-\*[doc-list-type-stack\n[doc-list-depth]] .. .de Pf .if !\n[doc-arg-limit] \ .ds doc-macro-name Pf .ie \n[doc-arg-limit] \{\ .ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\ .nr doc-arg-ptr +1 .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .\} .el \ .tm mdoc warning: .Pf: trailing prefix (#\n[.c]) .\} .el \{\ .nop \)\$1\)\c .shift .ie \n[.$] \ .doc-parse-args \$@ .el \{\ .tm mdoc warning: .Pf: missing arguments (#\n[.c]) .nop \) .\}\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \ .doc-print-and-reset .el \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .\} .. .de Ns .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Ns .doc-parse-args \$@ .\} .el \ .tm Usage: .Ns must be called with arguments (#\n[.c]) .\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .de Ap .ie !\n[doc-arg-limit] \ .tm Usage: 'Ap' cannot be first macro on a line (no '.Ap') (#\n[.c]) .el \{\ .nop \)'\)\c .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-print-recursive .el \ .doc-reset-args .\} .. .ds doc-space "\*[doc-soft-space] .de doc-set-hard-space .ie "\*[doc-space]"" \ .ds doc-saved-space "\*[doc-hard-space] .el \ .ds doc-space "\*[doc-hard-space] .. .de doc-set-soft-space .ie "\*[doc-space]"" \ .ds doc-saved-space "\*[doc-soft-space] .el \ .ds doc-space "\*[doc-soft-space] .. .nr doc-space-mode 1 .ds doc-saved-space "\*[doc-space] .nr doc-have-space 0 .de Sm .ie \n[doc-have-space] \ .nr doc-reg-Sm 0 .el \ .nr doc-reg-Sm 1 .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Sm .doc-parse-args \$@ .\} .el \{\ .ie \n[doc-space-mode] \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .if \n[doc-reg-Sm] \ .if \n[.int] \ .nop \) .\} .\}\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if !d doc-arg\n[doc-arg-ptr] \ .ds doc-arg\n[doc-arg-ptr] .ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .\} .el \{\ .ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .nr doc-arg-ptr -1 .ie \n[doc-space-mode] \{\ .ds doc-saved-space "\*[doc-space] .ds doc-space .nr doc-space-mode 0 .\} .el \{\ .ds doc-space "\*[doc-saved-space] .nr doc-space-mode 1 .\} .\}\} .ie \n[doc-space-mode] \{\ .nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) .nr doc-arg-limit \n[doc-arg-ptr] .if \n[doc-num-args] \ .doc-parse-space-vector .if \n[doc-reg-Sm] \ .if \n[.int] \ .nop \) .\} .el \{\ .nr doc-reg-Sm (\n[doc-arg-ptr] + 1) .while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\ .ds doc-space\n[doc-reg-Sm] .nr doc-reg-Sm +1 .\} .\} .ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-reset-args .. .nr doc-arg-type 0 .de doc-get-arg-type .nr doc-arg-type 2 .if ((\n[doc-width] < 4) & \A\$1) \{\ .ie (\n[doc-width] == 1) \{\ .if r doc-punct\$1 \ .nr doc-arg-type \n[doc-punct\$1] .\} .el \ .if r \$1 \ .if d \$1 \ .nr doc-arg-type 1 .\} .. .de doc-get-arg-type* .nr doc-arg-type 2 .length doc-width "\*[doc-arg\$1] .if ((\n[doc-width] < 4) & \A\*[doc-arg\$1]) \{\ .ie (\n[doc-width] == 1) \{\ .if r doc-punct\*[doc-arg\$1] \ .nr doc-arg-type \n[doc-punct\*[doc-arg\$1]] .\} .el \ .if r \*[doc-arg\$1] \ .if d \*[doc-arg\$1] \ .nr doc-arg-type 1 .\} .. .de doc-set-spacing-1 .nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]] .ie (\n[doc-reg-dssfm1] == 3) \{\ .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfm (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfm] .\} .ds doc-space\n[doc-arg-limit] "\*[doc-space] .\} .el \{\ .ie (\n[doc-reg-dssfm1] == 2) \{\ .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfm (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfm] .\} .ds doc-space\n[doc-arg-limit] .\} .el \ .ds doc-space\n[doc-arg-limit] .\} .. .de doc-set-spacing-2 .ds doc-space\n[doc-arg-limit] "\*[doc-space] .. .de doc-set-spacing-3 .if \n[doc-arg-limit] \{\ .nr doc-reg-dssfps (\n[doc-arg-limit] - 1) .ds doc-space\n[doc-reg-dssfps] .\} .ds doc-space\n[doc-arg-limit] "\*[doc-space] .. .de doc-set-spacing-4 .ds doc-space\n[doc-arg-limit] .. .de doc-do-1 .\*[doc-arg\n[doc-arg-ptr]] .. .als doc-do-2 doc-print-recursive .als doc-do-3 doc-print-recursive .als doc-do-4 doc-print-recursive .nr doc-fontmode-depth 0 .nr doc-fontmode-font-stack0 0 .nr doc-fontmode-size-stack0 0 .de Bf .ds doc-macro-name Bf .ie \n[.$] \{\ .nr doc-fontmode-depth +1 .nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f] .nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps] .ie "\$1"Em" \ .nop \*[doc-Em-font]\c .el \{ .ie "\$1"Li" \ .nop \*[doc-Li-font]\c .el \{ .ie "\$1"Sy" \ .nop \*[doc-Sy-font]\c .el \{ .ie "\$1"-emphasis" \ .nop \*[doc-Em-font]\c .el \{ .ie "\$1"-literal" \ .nop \*[doc-Li-font]\c .el \{ .ie "\$1"-symbolic" \ .nop \*[doc-Sy-font]\c .el \{\ .tmc mdoc warning: Unknown keyword '\$1' in .Bf macro .tm1 " (#\n[.c]) .\}\}\}\}\}\}\} .el \ .tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c]) .. .de Ef .ds doc-macro-name Ef .ie \n[doc-fontmode-depth] \{\ .nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c .nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c .nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0 .nr doc-curr-font \n[.f] .nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0 .nr doc-curr-size \n[.ps] .nr doc-fontmode-depth -1 .\} .el \ .tm mdoc warning: Extraneous .Ef (#\n[.c]) .. .nr doc-keep-type 0 .de Bk .ds doc-macro-name Bk .if \n[doc-keep-type] \ .tm .Bk: nesting keeps not implemented yet. (#\n[.c]) .ie "\$1"-lines" \{\ .nr doc-keep-type 2 .tm .Bk -lines: Not implemented yet. (#\n[.c]) .\} .el \{ .ie "\$1"-words" \{\ .nr doc-keep-type 1 .doc-set-hard-space .\} .el \{ .ie "\$1"" \{\ .nr doc-keep-type 1 .doc-set-hard-space .\} .el \{\ .tm mdoc warning: Unknown keyword '\$1' in .Bk macro (#\n[.c]) .nr doc-keep-type 3 .\}\}\} .. .de Ek .ds doc-macro-name Ek .ie \n[.$] \ .tm Usage: .Ek (does not take arguments) (#\n[.c]) .el \{\ .if !\n[doc-keep-type] \ .tm mdoc warning: .Ek found without .Bk before (#\n[.c]) .ie (\n[doc-keep-type] == 1) \ .doc-set-soft-space .el \{ .if (\n[doc-keep-type] == 2) \ .tm .Bk -lines: Not implemented yet. (#\n[.c]) .\}\} .nr doc-keep-type 0 .. .nr doc-display-depth 0 .nr doc-is-compact 0 .ds doc-display-type-stack0 .nr doc-display-indent-stack0 0 .nr doc-display-ad-stack0 0 .nr doc-display-fi-stack0 0 .nr doc-display-ft-stack0 0 .nr doc-display-ps-stack0 0 .de Bd .ds doc-macro-name Bd .if !\n[.$] \{\ .tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled} .tm1 " [-offset [string]] [-compact] [-file name] (#\n[.c]) .return .\} .nr doc-is-compact 0 .ds doc-display-file .nr doc-reg-Bd 1 .nr doc-display-depth +1 .nr doc-display-ad-stack\n[doc-display-depth] \n[.j] .nr doc-display-fi-stack\n[doc-display-depth] \n[.u] .ie "\$1"-literal" \{\ .ds doc-display-type-stack\n[doc-display-depth] literal .nr doc-display-ft-stack\n[doc-display-depth] \n[.f] .nr doc-display-ps-stack\n[doc-display-depth] \n[.ps] .ie t \ .ta T 9n .el \ .ta T 8n .nf .\} .el \{ .ie "\$1"-filled" \{\ .ds doc-display-type-stack\n[doc-display-depth] filled .ad b .fi .\} .el \{ .ie "\$1"-ragged" \{\ .ds doc-display-type-stack\n[doc-display-depth] ragged .na .fi .\} .el \{ .ie "\$1"-centered" \{\ .ds doc-display-type-stack\n[doc-display-depth] centered .ad c .fi .\} .el \{ .ie "\$1"-unfilled" \{\ .ds doc-display-type-stack\n[doc-display-depth] unfilled .nf .\} .el \{\ .tm1 "mdoc warning: Unknown keyword '\$1' (or missing display type) .tm1 " in .Bd macro (#\n[.c]) .nr doc-reg-Bd 0 .\}\}\}\}\} .if \n[doc-reg-Bd] \{\ .shift .if \n[.$] \ .doc-do-Bd-args \$@ .\} .if !r doc-display-indent-stack\n[doc-display-depth] \ .nr doc-display-indent-stack\n[doc-display-depth] 0 .if \n[doc-display-indent-stack\n[doc-display-depth]] \ .in +\n[doc-display-indent-stack\n[doc-display-depth]]u .if !\n[doc-is-compact] \ .sp \n[doc-display-vertical]u .if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \ .if t \ .nop \*[doc-Li-font]\c .if !\n[cR] \ .ne 2v .if !"\*[doc-display-file]"" \ .so \*[doc-display-file] .nr doc-is-compact 0 .ds doc-display-file .. .de doc-do-Bd-args .nr doc-reg-ddBa 1 .ie "\$1"-offset" \{\ .nr doc-reg-ddBa 2 .ie "\$2"left" \ .nr doc-display-indent-stack\n[doc-display-depth] 0 .el \{ .ie "\$2"right" \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u) .el \{ .ie "\$2"center" \ .nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u) .el \{ .ie "\$2"indent" \ .nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u .el \{ .ie "\$2"indent-two" \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u) .el \ .nr doc-reg-ddBa 1 .\}\}\}\} .if (\n[doc-reg-ddBa] == 1) \{\ .nr doc-reg-ddBa 2 .nr doc-reg-ddBa1 0 .if \B(\$2) \{\ .nr doc-reg-ddBa2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-ddBa "\$2 .substring doc-str-ddBa 0 -2 .if \B(\*[doc-str-ddBa]) \{\ .nr doc-reg-ddBa3 (;(\$2)) .nr doc-reg-ddBa4 (\*[doc-str-ddBa]) .if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \ .nr doc-reg-ddBa1 1 .\} .warn \n[doc-reg-ddBa2] .\} .ie \n[doc-reg-ddBa1] \ .nr doc-display-indent-stack\n[doc-display-depth] \$2 .el \{\ .doc-get-width "\$2" .ie (\n[doc-width] <= 3) \{\ .doc-get-arg-type "\$2" .ie (\n[doc-arg-type] == 1) \ .nr doc-display-indent-stack\n[doc-display-depth] \n[\$2] .el \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\} .\} .el \{ .ie "\$1"-compact" \ .nr doc-is-compact 1 .el \{ .ie "\$1"-file" \{\ .ie !"\$2"" \{\ .ds doc-display-file "\$2 .nr doc-reg-ddBa 2 .\} .el \ .tm mdoc warning: .Bd '-file' keyword requires argument (#\n[.c]) .\} .el \ .tm mdoc warning: Unknown keyword '\$1' in .Bd macro (#\n[.c]) .\}\} .if (\n[doc-reg-ddBa] < \n[.$]) \{\ .shift \n[doc-reg-ddBa] .doc-do-Bd-args \$@ .\} .. .de Ed .ds doc-macro-name Ed .br .if !\n[doc-display-depth] \{\ .tm mdoc warning: Extraneous .Ed (#\n[.c]) .nr doc-display-depth 1 .\} .if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\ .ft \n[doc-display-ft-stack\n[doc-display-depth]] .ps \n[doc-display-ps-stack\n[doc-display-depth]]u .\} .in -\n[doc-display-indent-stack\n[doc-display-depth]]u .ie \n[doc-display-fi-stack\n[doc-display-depth]] \ .fi .el \ .nf .ad \n[doc-display-ad-stack\n[doc-display-depth]] .nr doc-display-indent-stack\n[doc-display-depth] 0 .ds doc-display-type-stack\n[doc-display-depth] .nr doc-display-depth -1 .. .ds doc-list-type-stack1 .nr doc-list-indent-stack1 0 .nr doc-list-have-indent-stack1 0 .de Bl .if !\n[.$] \{\ .doc-Bl-usage .return .\} .ds doc-macro-name Bl .nr doc-list-depth +1 .nr doc-arg-ptr 1 .ie "\$1"-hang" \{\ .ds doc-list-type-stack\n[doc-list-depth] hang-list .nr doc-list-indent-stack\n[doc-list-depth] 6n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-tag" \{\ .ds doc-list-type-stack\n[doc-list-depth] tag-list .nr doc-list-indent-stack\n[doc-list-depth] 6n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-item" \{\ .ds doc-list-type-stack\n[doc-list-depth] item-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-enum" \{\ .ds doc-list-type-stack\n[doc-list-depth] enum-list .nr doc-list-indent-stack\n[doc-list-depth] 3n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-bullet" \{\ .ds doc-list-type-stack\n[doc-list-depth] bullet-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-dash" \{\ .ds doc-list-type-stack\n[doc-list-depth] dash-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-hyphen" \{\ .ds doc-list-type-stack\n[doc-list-depth] dash-list .nr doc-list-indent-stack\n[doc-list-depth] 2n .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-inset" \{\ .ds doc-list-type-stack\n[doc-list-depth] inset-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-diag" \{\ .ds doc-list-type-stack\n[doc-list-depth] diag-list .\} .el \{ .ie "\$1"-ohang" \{\ .ds doc-list-type-stack\n[doc-list-depth] ohang-list .nr doc-list-have-indent-stack\n[doc-list-depth] 1 .\} .el \{ .ie "\$1"-column" \{\ .ds doc-list-type-stack\n[doc-list-depth] column-list .linetabs 1 .\} .el \{\ .tm1 "mdoc warning: Unknown list type '\$1' (or missing list type) .tm1 " in .Bl macro .tm .nr doc-arg-ptr 0 .\}\}\}\}\}\}\}\}\}\}\} .if !\n[doc-arg-ptr] \{\ .doc-Bl-usage .doc-reset-args .nr doc-list-depth -1 .return .\} .shift .nr doc-reg-Bl 1 .while (\n[doc-reg-Bl] <= \n[.$]) \{\ .ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]] .nr doc-type\n[doc-reg-Bl] 0 .ds doc-space\n[doc-reg-Bl] .nr doc-reg-Bl +1 .\} .doc-increment-list-stack .if \n[.$] \{\ .nr doc-arg-limit \n[.$] .nr doc-arg-ptr 0 .doc-do-Bl-args .in +\n[doc-list-offset-stack\n[doc-list-depth]]u .if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\ .doc-set-column-tab \n[doc-num-columns] ' in -\n[doc-column-indent-width]u .if !\n[doc-compact-list-stack\n[doc-list-depth]] \ .sp \n[doc-display-vertical]u .nf .nr doc-num-columns 0 .\}\} .doc-reset-args .. .de doc-Bl-usage .tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset} .tm1 " [-width ] .tm1 " [-offset ] [-compact] .tm1 " .Bl -column [-offset ] ... .tm1 " .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash} .tm1 " [-offset ] [-compact] (#\n[.c]) .. .de doc-do-Bl-args .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \ .return .nr doc-reg-dBla (\n[doc-arg-ptr] + 1) .if (\n[doc-arg-limit] < \n[doc-reg-dBla]) \ .ds doc-arg\n[doc-reg-dBla] .nr doc-reg-dBla 1 .ie "\*[doc-arg\n[doc-arg-ptr]]"-compact" \ .nr doc-compact-list-stack\n[doc-list-depth] 1 .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\ .ie (\n[doc-list-depth] > 1) \{\ .nr doc-reg-dBla1 (\n[doc-list-depth] - 1) .ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]] .as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]]. .length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]] .nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n .\} .el \ .tm mdoc warning: '-nested' allowed with nested .Bl macros only (#\n[.c]) .\} .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\ .nr doc-arg-ptr +1 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 0 0 .ie .\*[doc-str-dBla] \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 1 .doc-first-parameter \*[doc-str-dBla] .doc-get-width "\*[doc-str-dfp] .doc-get-arg-type "\*[doc-str-dfp] .ie (\n[doc-arg-type] == 1) \ .nr doc-reg-dBla1 1 .el \ .nr doc-reg-dBla1 0 .\} .el \ .nr doc-reg-dBla1 0 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .ie \n[doc-reg-dBla1] \{\ .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .doc-save-global-vars .doc-reset-args .box doc-box-dBla .ev doc-env-dBla .evc 0 .in 0 .nf .nop \*[doc-str-dBla] .br .ev .box .doc-restore-global-vars .doc-get-width \h'\n[dl]u' .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \{\ .nr doc-reg-dBla1 0 .if \B(\*[doc-str-dBla]) \{\ .nr doc-reg-dBla2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-dBla1 "\*[doc-str-dBla] .substring doc-str-dBla1 0 -2 .if \B(\*[doc-str-dBla1]) \{\ .nr doc-reg-dBla3 (;(\*[doc-str-dBla])) .nr doc-reg-dBla4 (\*[doc-str-dBla1]) .if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \ .nr doc-reg-dBla1 1 .\} .warn \n[doc-reg-dBla2] .\} .ie \n[doc-reg-dBla1] \ .nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla]) .el \{\ .doc-get-arg-width \n[doc-arg-ptr] .ie (\n[doc-width] == 2) \{\ .doc-get-arg-type \*[doc-str-dBla] .ie (\n[doc-arg-type] == 1) \ .nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]] .el \ .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\}\} .el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\ .nr doc-arg-ptr +1 .ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \ .nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u .el \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .nr doc-reg-dBla1 0 .if \B(\*[doc-str-dBla]) \{\ .nr doc-reg-dBla2 \n[.warn] .warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32)) .ds doc-str-dBla1 "\*[doc-str-dBla] .substring doc-str-dBla1 0 -2 .if \B(\*[doc-str-dBla1]) \{\ .nr doc-reg-dBla3 (;(\*[doc-str-dBla])) .nr doc-reg-dBla4 (\*[doc-str-dBla1]) .if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \ .nr doc-reg-dBla1 1 .\} .warn \n[doc-reg-dBla2] .\} .ie \n[doc-reg-dBla1] \ .nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla] .el \{\ .doc-get-arg-width \n[doc-arg-ptr] .ie (\n[doc-width] <= 3) \{\ .doc-get-arg-type \*[doc-str-dBla] .ie (\n[doc-arg-type] == 1) \ .nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]] .el \ .nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\} .el \ .nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u) .\}\}\} .el \ .nr doc-reg-dBla 0 .\}\}\} .if !\n[doc-reg-dBla] \{\ .ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\ .nr doc-num-columns +1 .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 0 0 .ie .\*[doc-str-dBla] \{\ .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .substring doc-str-dBla 1 .doc-first-parameter \*[doc-str-dBla] .doc-get-width "\*[doc-str-dfp] .doc-get-arg-type "\*[doc-str-dfp] .ie (\n[doc-arg-type] == 1) \ .nr doc-reg-dBla1 1 .el \ .nr doc-reg-dBla1 0 .\} .el \ .nr doc-reg-dBla1 0 .ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]] .ie \n[doc-reg-dBla1] \{\ .ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]] .doc-save-global-vars .doc-reset-args .box doc-box-dBla .ev doc-env-dBla .evc 0 .in 0 .nf .nop \*[doc-str-dBla] .br .ev .box .doc-restore-global-vars .ds doc-arg\n[doc-num-columns] "\h'\n[dl]u' .\} .el \ .ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .tmc mdoc warning: Unknown keyword '\*[doc-arg\n[doc-arg-ptr]]' .tm1 " in .Bl macro (#\n[.c]) .\}\} .if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \ .doc-do-Bl-args .. .de doc-save-global-vars .ds doc-macro-name-saved "\*[doc-macro-name] .nr doc-arg-limit-saved \n[doc-arg-limit] .nr doc-num-args-saved \n[doc-num-args] .nr doc-arg-ptr-saved \n[doc-arg-ptr] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\ .ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]] .nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]] .ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-curr-font-saved \n[doc-curr-font] .nr doc-curr-size-saved \n[doc-curr-size] .nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section] .nr doc-in-library-section-saved \n[doc-in-library-section] .nr doc-indent-synopsis-saved \n[doc-indent-synopsis] .nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active] .nr doc-have-decl-saved \n[doc-have-decl] .nr doc-have-var-saved \n[doc-have-var] .ds doc-command-name-saved "\*[doc-command-name] .ds doc-quote-left-saved "\*[doc-quote-left] .ds doc-quote-right-saved "\*[doc-quote-right] .nr doc-nesting-level-saved \n[doc-nesting-level] .nr doc-in-list-saved \n[doc-in-list] .ds doc-space-saved "\*[doc-space] .ds doc-saved-space-saved "\*[doc-saved-space] .nr doc-space-mode-saved \n[doc-space-mode] .nr doc-have-space-saved \n[doc-have-space] .nr doc-have-slot-saved \n[doc-have-slot] .nr doc-keep-type-saved \n[doc-keep-type] .nr doc-display-depth-saved \n[doc-display-depth] .nr doc-is-compact-saved \n[doc-is-compact] .nr doc-reg-dsgv 0 .while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\ .ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]] .nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]] .nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]] .nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]] .nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]] .nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-fontmode-depth-saved \n[doc-fontmode-depth] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\ .nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]] .nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-list-depth-saved \n[doc-list-depth] .nr doc-reg-dsgv 1 .while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\ .ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]] .nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]] .nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]] .nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]] .ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]] .nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]] .nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font] .nr doc-curr-type-saved \n[doc-curr-type] .ds doc-curr-arg-saved "\*[doc-curr-arg] .nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count] .nr doc-num-columns-saved \n[doc-num-columns] .nr doc-column-indent-width-saved \n[doc-column-indent-width] .nr doc-is-func-saved \n[doc-is-func] .nr doc-have-old-func-saved \n[doc-have-old-func] .nr doc-func-arg-count-saved \n[doc-func-arg-count] .ds doc-func-arg-saved "\*[doc-func-arg] .nr doc-num-func-args-saved \n[doc-num-func-args] .nr doc-func-args-processed-saved \n[doc-func-args-processed] .nr doc-have-func-saved \n[doc-have-func] .nr doc-is-reference-saved \n[doc-is-reference] .nr doc-reference-count-saved \n[doc-reference-count] .nr doc-author-count-saved \n[doc-author-count] .nr doc-reg-dsgv 0 .while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\ .ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]] .nr doc-reg-dsgv +1 .\} .nr doc-book-count-saved \n[doc-book-count] .ds doc-book-name-saved "\*[doc-book-name] .nr doc-city-count-saved \n[doc-city-count] .ds doc-city-name-saved "\*[doc-city-name] .nr doc-date-count-saved \n[doc-date-count] .ds doc-date-saved "\*[doc-date] .nr doc-publisher-count-saved \n[doc-publisher-count] .ds doc-publisher-name-saved "\*[doc-publisher-name] .nr doc-journal-count-saved \n[doc-journal-count] .ds doc-journal-name-saved "\*[doc-journal-name] .nr doc-issue-count-saved \n[doc-issue-count] .ds doc-issue-name-saved "\*[doc-issue-name] .nr doc-optional-count-saved \n[doc-optional-count] .ds doc-optional-string-saved "\*[doc-optional-string] .nr doc-page-number-count-saved \n[doc-page-number-count] .ds doc-page-number-string-saved "\*[doc-page-number-string] .nr doc-corporate-count-saved \n[doc-corporate-count] .ds doc-corporate-name-saved "\*[doc-corporate-name] .nr doc-report-count-saved \n[doc-report-count] .ds doc-report-name-saved "\*[doc-report-name] .nr doc-reference-title-count-saved \n[doc-reference-title-count] .ds doc-reference-title-name-saved "\*[doc-reference-title-name] .ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book] .nr doc-url-count-saved \n[doc-url-count] .ds doc-url-name-saved "\*[doc-url-name] .nr doc-volume-count-saved \n[doc-volume-count] .ds doc-volume-name-saved "\*[doc-volume-name] .nr doc-have-author-saved \n[doc-have-author] .ds doc-document-title-saved "\*[doc-document-title] .ds doc-volume-saved "\*[doc-volume] .ds doc-section-saved "\*[doc-section] .ds doc-operating-system-saved "\*[doc-operating-system] .ds doc-date-string-saved "\*[doc-date-string] .nr doc-header-space-saved \n[doc-header-space] .nr doc-footer-space-saved \n[doc-footer-space] .nr doc-display-vertical-saved \n[doc-display-vertical] .ds doc-header-string-saved "\*[doc-header-string] .nr doc-in-see-also-section-saved \n[doc-in-see-also-section] .nr doc-in-files-section-saved \n[doc-in-files-section] .nr doc-in-authors-section-saved \n[doc-in-authors-section] .. .de doc-restore-global-vars .ds doc-macro-name "\*[doc-macro-name-saved] .nr doc-arg-limit \n[doc-arg-limit-saved] .nr doc-num-args \n[doc-num-args-saved] .nr doc-arg-ptr \n[doc-arg-ptr-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\ .ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved] .nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved] .ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-curr-font \n[doc-curr-font-saved] .nr doc-curr-size \n[doc-curr-size-saved] .nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved] .nr doc-in-library-section \n[doc-in-library-section-saved] .nr doc-indent-synopsis \n[doc-indent-synopsis-saved] .nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved] .nr doc-have-decl \n[doc-have-decl-saved] .nr doc-have-var \n[doc-have-var-saved] .ds doc-command-name "\*[doc-command-name-saved] .ds doc-quote-left "\*[doc-quote-left-saved] .ds doc-quote-right "\*[doc-quote-right-saved] .nr doc-nesting-level \n[doc-nesting-level-saved] .nr doc-in-list \n[doc-in-list-saved] .ds doc-space "\*[doc-space-saved] .ds doc-saved-space "\*[doc-saved-space-saved] .nr doc-space-mode \n[doc-space-mode-saved] .nr doc-have-space \n[doc-have-space-saved] .nr doc-have-slot \n[doc-have-slot-saved] .nr doc-keep-type \n[doc-keep-type-saved] .nr doc-display-depth \n[doc-display-depth-saved] .nr doc-is-compact \n[doc-is-compact-saved] .nr doc-reg-drgv 0 .while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\ .ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved] .nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved] .nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved] .nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved] .nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved] .nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-fontmode-depth \n[doc-fontmode-depth-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\ .nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved .nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved .nr doc-reg-drgv +1 .\} .nr doc-list-depth \n[doc-list-depth-saved] .nr doc-reg-drgv 1 .while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\ .ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved] .nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved] .nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved] .nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved] .ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved] .nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved] .nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved] .nr doc-curr-type \n[doc-curr-type-saved] .ds doc-curr-arg "\*[doc-curr-arg-saved] .nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved] .nr doc-num-columns \n[doc-num-columns-saved] .nr doc-column-indent-width \n[doc-column-indent-width-saved] .nr doc-is-func \n[doc-is-func-saved] .nr doc-have-old-func \n[doc-have-old-func-saved] .nr doc-func-arg-count \n[doc-func-arg-count-saved] .ds doc-func-arg "\*[doc-func-arg-saved] .nr doc-num-func-args \n[doc-num-func-args-saved] .nr doc-func-args-processed \n[doc-func-args-processed-saved] .nr doc-have-func \n[doc-have-func-saved] .nr doc-is-reference \n[doc-is-reference-saved] .nr doc-reference-count \n[doc-reference-count-saved] .nr doc-author-count \n[doc-author-count-saved] .nr doc-reg-drgv 0 .while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\ .ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved] .nr doc-reg-drgv +1 .\} .nr doc-book-count \n[doc-book-count-saved] .ds doc-book-name "\*[doc-book-name-saved] .nr doc-city-count \n[doc-city-count-saved] .ds doc-city-name "\*[doc-city-name-saved] .nr doc-date-count \n[doc-date-count-saved] .ds doc-date "\*[doc-date-saved] .nr doc-publisher-count \n[doc-publisher-count-saved] .ds doc-publisher-name "\*[doc-publisher-name-saved] .nr doc-journal-count \n[doc-journal-count-saved] .ds doc-journal-name "\*[doc-journal-name-saved] .nr doc-issue-count \n[doc-issue-count-saved] .ds doc-issue-name "\*[doc-issue-name-saved] .nr doc-optional-count \n[doc-optional-count-saved] .ds doc-optional-string "\*[doc-optional-string-saved] .nr doc-page-number-count \n[doc-page-number-count-saved] .ds doc-page-number-string "\*[doc-page-number-string-saved] .nr doc-corporate-count \n[doc-corporate-count-saved] .ds doc-corporate-name "\*[doc-corporate-name-saved] .nr doc-report-count \n[doc-report-count-saved] .ds doc-report-name "\*[doc-report-name-saved] .nr doc-reference-title-count \n[doc-reference-title-count-saved] .ds doc-reference-title-name "\*[doc-reference-title-name-saved] .ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved] .nr doc-url-count \n[doc-url-count-saved] .ds doc-url-name "\*[doc-url-name-saved] .nr doc-volume-count \n[doc-volume-count-saved] .ds doc-volume-name "\*[doc-volume-name-saved] .nr doc-have-author \n[doc-have-author-saved] .ds doc-document-title "\*[doc-document-title-saved] .ds doc-volume "\*[doc-volume-saved] .ds doc-section "\*[doc-section-saved] .ds doc-operating-system "\*[doc-operating-system-saved] .ds doc-date-string "\*[doc-date-string-saved] .nr doc-header-space \n[doc-header-space-saved] .nr doc-footer-space \n[doc-footer-space-saved] .nr doc-display-vertical \n[doc-display-vertical-saved] .ds doc-header-string "\*[doc-header-string-saved] .nr doc-in-see-also-section \n[doc-in-see-also-section-saved] .nr doc-in-files-section \n[doc-in-files-section-saved] .nr doc-in-authors-section \n[doc-in-authors-section-saved] .. .de El .if \n[.$] \{\ .tm Usage: .El (does not take arguments) (#\n[.c]) .return .\} .ds doc-macro-name El .ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]] .ie "\*[doc-str-El]"diag-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"column-list" \ .doc-end-column-list .el \{ .ie "\*[doc-str-El]"item-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"ohang-list" \ .doc-end-list 0 .el \{ .ie "\*[doc-str-El]"inset-list" \ .doc-end-list 0 .el \ .doc-end-list 1 .\}\}\}\} .br .. .ds doc-saved-Pa-font .nr doc-curr-type 0 .ds doc-curr-arg .nr doc-bullet-list-type 1 .nr doc-column-list-type 0 .nr doc-dash-list-type 1 .nr doc-diag-list-type 0 .nr doc-enum-list-type 1 .nr doc-hang-list-type 2 .nr doc-inset-list-type 2 .nr doc-item-list-type 1 .nr doc-ohang-list-type 2 .nr doc-tag-list-type 2 .de It .ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]] .if "\*[doc-str-It]"" \ .tm mdoc error: .It without preceding .Bl (#\n[.c]) .if \n[doc-nesting-level] \{\ .tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao) .tm1 " (#\n[.c]) .\} .br .if !\n[cR] \ .ne 3v .if \n[.$] \{\ .ds doc-macro-name It .nr doc-reg-It 1 .while (\n[doc-reg-It] <= \n[.$]) \{\ .ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]] .nr doc-reg-It +1 .\} .nr doc-num-args \n[.$] .nr doc-arg-ptr 0 .\} .nr doc-reg-It \n[doc-\*[doc-str-It]-type] .if \n[doc-reg-It] \{\ .box doc-item-box\n[doc-list-depth] .ev doc-item-env\n[doc-list-depth] .evc 0 .in 0 .nf .\} .ie (\n[doc-reg-It] == 1) \{\ .if \n[.$] \{\ .tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]' .tm1 " don't take arguments (#\n[.c]) .\}\} .el \{\ .ie \n[.$] \{\ .if (\n[doc-reg-It] == 2) \{\ .doc-parse-arg-vector .nr doc-in-list 1 .nr doc-arg-ptr 1 .nr doc-curr-type \n[doc-type1] .ds doc-curr-arg "\*[doc-arg1] .if \n[doc-in-files-section] \{\ .ds doc-saved-Pa-font "\*[doc-Pa-font] .if n \ .ds doc-Pa-font "\*[doc-No-font] .\} .ie (\n[doc-type1] == 1) \ .\*[doc-arg1] .el \{\ .nr doc-arg-ptr 1 .doc-print-recursive .\}\}\} .el \{\ .tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]' .tm1 " require arguments (#\n[.c]) .\} .\} .if !\n[doc-nesting-level] \ .doc-\*[doc-str-It] .. .de doc-inset-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 0 .br .nh .doc-item-box\n[doc-list-depth] .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-hang-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 1 .nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .ti -\n[doc-reg-dhl]u .nh .ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \ .doc-item-box\n[doc-list-depth] .el \{\ .chop doc-item-box\n[doc-list-depth] .nr doc-reg-dhl1 \n[.k]u .nop \*[doc-item-box\n[doc-list-depth]]\c .nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c .nr doc-have-space 1 .\} .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-ohang-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .doc-set-vertical-and-indent 0 .nh .doc-item-box\n[doc-list-depth] .br .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-item-list .br .ev .box .doc-set-vertical-and-indent 0 .br .doc-reset-args .. .nr doc-enum-list-count-stack1 0 .de doc-enum-list .nr doc-in-list 1 .nr doc-enum-list-count-stack\n[doc-list-depth] +1 .nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c .nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\& .doc-do-list .. .de doc-bullet-list .nr doc-in-list 1 .nop \)\*[doc-Sy-font]\[bu]\f[] .doc-do-list .. .de doc-dash-list .nr doc-in-list 1 .nop \)\*[doc-Sy-font]\-\f[] .doc-do-list .. .als doc-do-list doc-hang-list .nr doc-diag-list-input-line-count 0 .de doc-diag-list .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\ .ie !\n[doc-compact-list-stack\n[doc-list-depth]] \ .doc-paragraph .el \ .br .\} .el \ .br .nr doc-diag-list-input-line-count \n[.c] .nh .nop \*[doc-Sy-font]\c .if \n[doc-num-args] \ .doc-remaining-args .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c .doc-print-and-reset .. .de doc-tag-list .br .ev .box .unformat doc-item-box\n[doc-list-depth] .box doc-box-dtl .ev doc-env-dtl .evc 0 .fi .ad 0 .in 0 .doc-item-box\n[doc-list-depth] .br .ev .box .doc-set-vertical-and-indent 1 .nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .ti -\n[doc-reg-dtl]u .nh .doc-item-box\n[doc-list-depth] .ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \ .br .el \{\ .vpt 0 .br .sp -1 .vpt 1 .nop \&\c .nr doc-have-space 1 .\} .if \n[doc-in-files-section] \ .if n \ .ds doc-Pa-font "\*[doc-saved-Pa-font] .nr doc-in-list 0 .doc-reset-args .. .de doc-set-vertical-and-indent .if !\n[doc-compact-list-stack\n[doc-list-depth]] \ .sp \n[doc-display-vertical]u .if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\ .nr doc-list-have-indent-stack\n[doc-list-depth] 0 .if \$1 \ .in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) .\} .if !\n[cR] \ .ne 2v .. .nr doc-list-depth 0 .nr doc-num-columns 0 .nr doc-compact-list-stack1 0 .ds doc-tag-prefix-stack1 .nr doc-list-offset-stack1 0 .de doc-end-list .if \$1 \ ' in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u) ' in -\n[doc-list-offset-stack\n[doc-list-depth]]u .if (\n[doc-list-depth] <= 0) \ .tm mdoc warning: extraneous .El call (#\n[.c]) .doc-decrement-list-stack .nr doc-list-depth -1 .. .de doc-increment-list-stack .nr doc-reg-dils (\n[doc-list-depth] + 1) .nr doc-list-have-indent-stack\n[doc-reg-dils] 0 .nr doc-list-indent-stack\n[doc-reg-dils] 0 .nr doc-list-offset-stack\n[doc-reg-dils] 0 .ds doc-tag-prefix-stack\n[doc-reg-dils] .ds doc-list-type-stack\n[doc-reg-dils] .nr doc-compact-list-stack\n[doc-reg-dils] 0 .nr doc-enum-list-count-stack\n[doc-reg-dils] 0 .. .de doc-decrement-list-stack .ds doc-list-type-stack\n[doc-list-depth] .nr doc-list-have-indent-stack\n[doc-list-depth] 0 .nr doc-list-indent-stack\n[doc-list-depth] 0 .nr doc-list-offset-stack\n[doc-list-depth] 0 .ds doc-tag-prefix-stack\n[doc-list-depth] .nr doc-compact-list-stack\n[doc-list-depth] 0 .nr doc-enum-list-count-stack\n[doc-list-depth] 0 .. .de Xr .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Xr .doc-parse-args \$@ .\} .el \ .doc-Xr-usage .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .doc-print-prefixes .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0] .if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ .nr doc-reg-Xr (\n[doc-arg-ptr] + 1) .if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\ .ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp] .ds doc-space\n[doc-arg-ptr] .\} .\} .doc-print-recursive .\} .el \ .doc-Xr-usage .\} .el \ .doc-Xr-usage .. .de doc-Xr-usage .tm Usage: .Xr manpage_name [section#] ... (#\n[.c]) .doc-reset-args .. .als Sx doc-generic-macro .ds doc-Sx-usage section_header .de doc-end-column-list .linetabs 0 ' in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u) .ta T .5i .fi .doc-decrement-list-stack .nr doc-list-depth -1 .. .nr doc-column-indent-width 0 .de doc-set-column-tab .ds doc-str-dsct .nr doc-reg-dsct 1 .nr doc-column-indent-width 0 .ie (\$1 < 5) \ .ds doc-str-dsct1 " .el \{\ .ie (\$1 == 5) \ .ds doc-str-dsct1 " .el \{\ .ds doc-str-dsct1 " .\}\} .while (\n[doc-reg-dsct] <= \$1) \{\ .as doc-str-dsct " +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u .nr doc-column-indent-width +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u .nr doc-reg-dsct +1 .\} .ta \*[doc-str-dsct] ' in +\n[doc-column-indent-width]u .. .de doc-column-list .if \n[doc-num-args] \ .doc-parse-arg-vector .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c]) .return .\} .if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\ .nr doc-reg-dcl (\n[doc-arg-ptr] - 1) .ds doc-space\n[doc-reg-dcl] .\} .if !\n[doc-list-indent-stack\n[doc-list-depth]] \ .nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u .if !\n[.u] \{\ .fi .in +\n[doc-column-indent-width]u .\} .ti -\n[doc-column-indent-width]u .doc-do-\n[doc-type\n[doc-arg-ptr]] .. .de Ta .ie \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .nop \*[doc-tab]\c .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \ .doc-do-\n[doc-type\n[doc-arg-ptr]] .el \ .doc-reset-args .\} .el \{\ .tm1 "Usage: Ta must follow column entry: e.g. .tm1 " .It column_string [Ta [column_string ...]] (#\n[.c]) .\} .. .de Dl .ta T .5i .in +\n[doc-display-indent]u .ie \n[doc-arg-limit] \{\ .tm Usage: .Dl not callable by other macros (#\n[.c]) .doc-reset-args .\} .el \{\ .ie \n[.$] \{\ .ds doc-macro-name Dl .doc-parse-args \$@ .nr doc-arg-ptr 1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Li-font]\c .doc-print-recursive .\} .el \ .tm Usage: .Dl argument ... (#\n[.c]) .\} .in -\n[doc-display-indent]u .. .de D1 .ta T .5i .in +\n[doc-display-indent]u .ie \n[doc-arg-limit] \{\ .tm Usage: .D1 not callable by other macros (#\n[.c]) .doc-reset-args .\} .el \{\ .ie \n[.$] \{\ .ds doc-macro-name D1 .doc-parse-args \$@ .nr doc-arg-ptr 1 .doc-print-recursive .\} .el \ .tm Usage: .D1 argument ... (#\n[.c]) .\} .in -\n[doc-display-indent]u .. .de Vt .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Vt .doc-parse-args \$@ .\} .el \ .tm Usage: .Vt variable_type ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Vt variable_type ... (#\n[.c]) .doc-reset-args .return .\} .if \n[doc-in-synopsis-section] \{\ .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .if \n[doc-have-func] \{\ .ie \n[doc-have-var] \ .br .el \ .doc-paragraph .\} .nr doc-have-var 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ft-font]\c .doc-print-recursive .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-have-old-func] \ .nop \*[doc-soft-space]\c .el \ .br .\} .. .nr doc-is-func 0 .de Ft .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Ft .doc-parse-args \$@ .\} .el \ .tm Usage: .Ft function_type ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Ft function_type ... (#\n[.c]) .doc-reset-args .return .\} .if \n[doc-in-synopsis-section] \{\ .if (\n[doc-have-func] : \n[doc-have-decl]) \{\ .doc-paragraph .nr doc-have-decl 0 .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .nr doc-is-func 1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Ft-font]\c .doc-print-recursive .. .nr doc-have-old-func 0 .de Ot .nr doc-have-old-func 1 .if \n[doc-in-synopsis-section] \{\ .if (\n[doc-have-func] : \n[doc-have-decl]) \{\ .doc-paragraph .nr doc-have-decl 0 .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-var 0 .\} .nr doc-is-func 1 .\} .if \n[.$] \ .nop \*[doc-Ft-font]\$*\c .nop \ \f[]\c .. .de Fa .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fa .doc-parse-args \$@ .\} .el \ .tm Usage: .Fa function_arguments ... (#\n[.c]) .\} .ie \n[doc-func-arg-count] \ .doc-do-func .el \{\ .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fa-font]\c .doc-print-recursive .if \n[doc-in-synopsis-section] \ .if \n[doc-have-func] \ .br .\}\} .. .nr doc-func-arg-count 0 .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .de doc-do-func .if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\ .doc-reset-args .return .\} .nr doc-arg-ptr +1 .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .doc-build-func-string \*[doc-arg\n[doc-arg-ptr]] .if (\n[doc-num-func-args] > 1) \ .ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg] .if (\n[doc-func-arg-count] > 1) \{\ .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c .if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \ .if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \ .nop ,\)\c .nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c .nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c .\} .if (\n[doc-func-arg-count] == 1) \{\ .nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\c .\} .nr doc-func-arg-count +1 .doc-do-func .. .nr doc-have-func 0 .de Fn .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fn .doc-parse-args \$@ .\} .el \ .tm Usage: .Fn function_name [function_arg] ... (#\n[.c]) .\} .if !\n[doc-arg-limit] \ .return .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-is-func] \{\ .br .nr doc-have-var 0 .nr doc-have-decl 0 .nr doc-is-func 0 .\} .el \{\ .if \n[doc-have-func] \{\ .doc-paragraph .nr doc-have-var 0 .nr doc-have-decl 0 .\}\} .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .nr doc-have-func 1 .nr doc-is-func 0 .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis (4u * \n[doc-fixed-width]u) .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .\} .nr doc-arg-ptr +1 .doc-print-prefixes .if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\ .tm Usage: .Fn function_name [function_arg] ... (#\n[.c]) .doc-reset-args .return .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\*[lp]\)\c .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nop \*[doc-Fa-font]\c .doc-do-func-args .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .\}\} .nop \)\*[rp]\)\c .if \n[doc-in-synopsis-section] \ .nop \);\)\c .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-arg-ptr -1 .nop \)\*[doc-space\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .doc-print-recursive .\} .el \ .doc-print-and-reset .if \n[doc-in-synopsis-section] \ .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .. .de doc-do-func-args .if \n[doc-in-synopsis-section] \{\ .ds doc-func-arg .nr doc-num-func-args 0 .nr doc-func-args-processed 0 .doc-build-func-string \*[doc-arg\n[doc-arg-ptr]] .if (\n[doc-num-func-args] > 1) \ .ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg] .\} .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ .nr doc-reg-ddfa (\n[doc-arg-ptr] - 1) .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c .if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \ .if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \ .nop ,\)\c .nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c .doc-do-func-args .\}\} .. .nr doc-saved-nesting-level 0 .nr doc-in-func-enclosure 0 .de Fo .if (\n[doc-in-func-enclosure]) \{\ .tm mdoc error: .Fo/.Fc can't be nested (#\n[.c]) .return .\} .nr doc-saved-nesting-level \n[doc-nesting-level] .nr doc-in-func-enclosure 1 .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ds doc-macro-name Fo .doc-parse-args \$@ .\} .el \ .tm Usage: .Fo function_name (#\n[.c]) .\} .if \n[doc-in-synopsis-section] \{\ .ie \n[doc-is-func] \{\ .br .nr doc-have-var 0 .nr doc-have-decl 0 .nr doc-is-func 0 .\} .el \{\ .if \n[doc-have-func] \{\ .doc-paragraph .nr doc-have-var 0 .nr doc-have-decl 0 .\}\} .if \n[doc-have-decl] \{\ .doc-paragraph .nr doc-have-var 0 .\} .if \n[doc-have-var] \{\ .doc-paragraph .nr doc-have-decl 0 .\} .nr doc-have-func 1 .nr doc-is-func 0 .br .if !\n[doc-indent-synopsis] \ .nr doc-indent-synopsis (4u * \n[doc-fixed-width]u) .\} .box doc-func-box .ev doc-func-env .evc 0 .in 0 .nf .nr doc-arg-ptr +1 .doc-print-prefixes .if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-func-arg-count 1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[]\s[0]\*[lp]\)\c .doc-reset-args .\} .. .de Fc .if !\n[doc-in-func-enclosure] \{\ .tm mdoc warning: Extraneous .Fc (#\n[.c]) .return .\} .if \n[.$] \{\ .ds doc-macro-name Fc .doc-parse-args \) \$@ .\} .if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \ .tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc .nr doc-func-arg-count 0 .nr doc-in-func-enclosure 0 .ie \n[doc-in-synopsis-section] \ .nop \|\*[rp];\) .el \ .nop \|\*[rp]\) .br .ev .box .chop doc-func-box .unformat doc-func-box .if \n[doc-in-synopsis-section] \{\ .if !\n[doc-indent-synopsis-active] \ .in +\n[doc-indent-synopsis]u .ti -\n[doc-indent-synopsis]u .\} .nh .nop \*[doc-func-box]\c .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .doc-print-recursive .\} .el \ .doc-print-and-reset .if \n[doc-in-synopsis-section] \ .if !\n[doc-indent-synopsis-active] \ .in -\n[doc-indent-synopsis]u .. .de doc-build-func-string .if !\n[doc-num-func-args] \{\ .nr doc-num-func-args \n[.$] .nr doc-func-args-processed 0 .ds doc-func-arg .\} .nr doc-func-args-processed +1 .as doc-func-arg "\$1 .if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\ .as doc-func-arg "\*[doc-hard-space] .shift .doc-build-func-string \$@ .\} .. .nr doc-is-reference 0 .nr doc-reference-count 0 .de Rs .ie \n[.$] \ .tm Usage: .Rs (does not take arguments) (#\n[.c]) .el \{\ .nr doc-is-reference 1 .doc-reset-reference .if \n[doc-in-see-also-section] \ .doc-paragraph .nr doc-reference-count 0 .\} .. .de Re .ie \n[.$] \ .tm Usage: .Re (does not take arguments) (#\n[.c]) .el \{\ .if !\n[doc-is-reference] \{\ .tm mdoc warning: Extraneous .Re (#\n[.c]) .return .\} .doc-print-reference .doc-reset-reference .nr doc-is-reference 0 .\} .. .de doc-reset-reference .while (\n[doc-author-count]) \{\ .ds doc-author-name\n[doc-author-count] .nr doc-author-count -1 .\} .nr doc-journal-count 0 .nr doc-issue-count 0 .nr doc-optional-count 0 .nr doc-corporate-count 0 .nr doc-report-count 0 .nr doc-reference-title-count 0 .nr doc-url-count 0 .nr doc-volume-count 0 .nr doc-city-count 0 .nr doc-date-count 0 .nr doc-page-number-count 0 .nr doc-book-count 0 .nr doc-publisher-count 0 .nr doc-reference-count 0 .ds doc-journal-name .ds doc-issue-name .ds doc-optional-string .ds doc-corporate-name .ds doc-report-name .ds doc-reference-title-name .ds doc-reference-title-name-for-book .ds doc-url-name .ds doc-volume-name .ds doc-city-name .ds doc-date .ds doc-page-number-string .ds doc-book-name .ds doc-publisher-name .. .de doc-finish-reference .nr doc-reference-count -\$1 .ie \n[doc-reference-count] \ .nop \), .el \ .nop \). .. .de doc-print-reference .nh .if \n[doc-author-count] \{\ .doc-print-reference-authors .nr doc-reference-count -\n[doc-author-count] .\} .if \n[doc-reference-title-count] \{\ .unformat doc-reference-title-name .chop doc-reference-title-name .unformat doc-reference-title-name-for-book .chop doc-reference-title-name-for-book .ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\ .nop \)\*[Lq]\)\*[doc-reference-title-name-for-book]\)\*[Rq]\c .doc-finish-reference \n[doc-reference-title-count] .\} .el \{\ .nop \*[doc-reference-title-name]\c .doc-finish-reference \n[doc-reference-title-count] .\}\} .if \n[doc-book-count] \{\ .unformat doc-book-name .chop doc-book-name .nop \*[doc-book-name]\c .doc-finish-reference \n[doc-book-count] .\} .if \n[doc-publisher-count] \{\ .unformat doc-publisher-name .chop doc-publisher-name .nop \*[doc-publisher-name]\c .doc-finish-reference \n[doc-publisher-count] .\} .if \n[doc-journal-count] \{\ .unformat doc-journal-name .chop doc-journal-name .nop \*[doc-journal-name]\c .doc-finish-reference \n[doc-journal-count] .\} .if \n[doc-report-count] \{\ .unformat doc-report-name .chop doc-report-name .nop \*[doc-report-name]\c .doc-finish-reference \n[doc-report-count] .\} .if \n[doc-issue-count] \{\ .unformat doc-issue-name .chop doc-issue-name .nop \*[doc-issue-name]\c .doc-finish-reference \n[doc-issue-count] .\} .if \n[doc-volume-count] \{\ .unformat doc-volume-name .chop doc-volume-name .nop \*[doc-volume-name]\c .doc-finish-reference \n[doc-volume-count] .\} .if \n[doc-url-count] \{\ .unformat doc-url-name .chop doc-url-name .nop \*[doc-url-name]\c .doc-finish-reference \n[doc-url-count] .\} .if \n[doc-page-number-count] \{\ .unformat doc-page-number-string .chop doc-page-number-string .nop \*[doc-page-number-string]\c .doc-finish-reference \n[doc-page-number-count] .\} .if \n[doc-corporate-count] \{\ .unformat doc-corporate-name .chop doc-corporate-name .nop \*[doc-corporate-name]\c .doc-finish-reference \n[doc-corporate-count] .\} .if \n[doc-city-count] \{\ .unformat doc-city-name .chop doc-city-name .nop \*[doc-city-name]\c .doc-finish-reference \n[doc-city-count] .\} .if \n[doc-date-count] \{\ .unformat doc-date .chop doc-date .nop \*[doc-date]\c .doc-finish-reference \n[doc-date-count] .\} .if \n[doc-optional-count] \{\ .unformat doc-optional-string .chop doc-optional-string .nop \*[doc-optional-string]\c .doc-finish-reference \n[doc-optional-count] .\} .if \n[doc-reference-count] \ .tm mdoc warning: unresolved reference problem .hy \n[doc-hyphen-flags] .. .ds doc-str-dpra "and .de doc-print-reference-authors .nr doc-reg-dpra 1 .while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\ .unformat doc-author-name\n[doc-reg-dpra] .chop doc-author-name\n[doc-reg-dpra] .ie (\n[doc-author-count] > 2) \ .nop \)\*[doc-author-name\n[doc-reg-dpra]], .el \ .nop \)\*[doc-author-name\n[doc-reg-dpra]] .nr doc-reg-dpra +1 .\} .unformat doc-author-name\n[doc-reg-dpra] .chop doc-author-name\n[doc-reg-dpra] .if (\n[doc-author-count] > 1) \ .nop \)\*[doc-str-dpra] .nop \)\*[doc-author-name\n[doc-reg-dpra]], .. .nr doc-author-count 0 .ds doc-author-name0 .de %A .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%A author_name ... (#\n[.c]) .return .\} .nr doc-author-count +1 .nr doc-reference-count +1 .ds doc-macro-name %A .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .box doc-author-name\n[doc-author-count] .ev doc-env-%A .evc 0 .in 0 .nf .doc-do-references .. .nr doc-book-count 0 .ds doc-book-name .de %B .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%B book_name ... (#\n[.c]) .return .\} .if \n[doc-is-reference] \{\ .nr doc-book-count +1 .nr doc-reference-count +1 .\} .ds doc-macro-name %B .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-is-reference] \{\ .boxa doc-book-name .ev doc-env-%B .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .\} .el \{\ .nop \*[doc-Em-font]\c .doc-print-recursive .\} .. .nr doc-city-count 0 .ds doc-city-name .de %C .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%C city_name ... (#\n[.c]) .return .\} .nr doc-city-count +1 .nr doc-reference-count +1 .ds doc-macro-name %C .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-city-name .ev doc-env-%C .evc 0 .in 0 .nf .doc-do-references .. .nr doc-date-count 0 .ds doc-date .de %D .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%D date ... (#\n[.c]) .return .\} .nr doc-date-count +1 .nr doc-reference-count +1 .ds doc-macro-name %D .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-date .ev doc-env-%D .evc 0 .in 0 .nf .doc-do-references .. .nr doc-publisher-count 0 .ds doc-publisher-name .de %I .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%I issuer/publisher_name ... (#\n[.c]) .return .\} .nr doc-publisher-count +1 .nr doc-reference-count +1 .ds doc-macro-name %I .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-publisher-name .ev doc-env-%I .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .. .nr doc-journal-count 0 .ds doc-journal-name .de %J .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%J journal_name ... (#\n[.c]) .return .\} .nr doc-journal-count +1 .nr doc-reference-count +1 .ds doc-macro-name %J .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-journal-name .ev doc-env-%J .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .. .nr doc-issue-count 0 .ds doc-issue-name .de %N .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%N issue_number ... (#\n[.c]) .return .\} .nr doc-issue-count +1 .nr doc-reference-count +1 .ds doc-macro-name %N .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-issue-name .ev doc-env-%N .evc 0 .in 0 .nf .doc-do-references .. .nr doc-optional-count 0 .ds doc-optional-string .de %O .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%O optional_information ... (#\n[.c]) .return .\} .nr doc-optional-count +1 .nr doc-reference-count +1 .ds doc-macro-name %O .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-optional-string .ev doc-env-%O .evc 0 .in 0 .nf .doc-do-references .. .nr doc-page-number-count 0 .ds doc-page-number-string .de %P .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%P page_number ... (#\n[.c]) .return .\} .nr doc-page-number-count +1 .nr doc-reference-count +1 .ds doc-macro-name %P .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-page-number-string .ev doc-env-%P .evc 0 .in 0 .nf .doc-do-references .. .nr doc-corporate-count 0 .ds doc-corporate-name .de %Q .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c]) .return .\} .nr doc-corporate-count +1 .nr doc-reference-count +1 .ds doc-macro-name %Q .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-corporate-name .ev doc-env-%Q .evc 0 .in 0 .nf .doc-do-references .. .nr doc-report-count 0 .ds doc-report-name .de %R .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%R reference_report ... (#\n[.c]) .return .\} .nr doc-report-count +1 .nr doc-reference-count +1 .ds doc-macro-name %R .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-report-name .ev doc-env-%R .evc 0 .in 0 .nf .doc-do-references .. .nr doc-reference-title-count 0 .ds doc-reference-title-name .ds doc-reference-title-name-for-book .de %T .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%T reference_title ... (#\n[.c]) .return .\} .if \n[doc-is-reference] \{\ .nr doc-reference-title-count +1 .nr doc-reference-count +1 .\} .ds doc-macro-name %T .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .ie \n[doc-is-reference] \{\ .boxa doc-reference-title-name-for-book .ev doc-env-%T .evc 0 .in 0 .nf .nop \*[doc-No-font]\c .doc-do-references .ds doc-macro-name %T .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-reference-title-name .ev doc-env-%T .evc 0 .in 0 .nf .nop \*[doc-Em-font]\c .doc-do-references .\} .el \{\ .nop \*[doc-Em-font]\c .doc-print-recursive .\} .. .nr doc-url-count 0 .ds doc-url-name .nr doc-volume-count 0 .ds doc-volume-name .de %U .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%U URL ... (#\n[.c]) .return .\} .nr doc-url-count +1 .nr doc-reference-count +1 .ds doc-macro-name %U .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-url-name .ev doc-env-%U .evc 0 .in 0 .nf .doc-do-references .. .de %V .if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\ .tm Usage: .%V volume ... (#\n[.c]) .return .\} .nr doc-volume-count +1 .nr doc-reference-count +1 .ds doc-macro-name %V .doc-parse-args \$@ .nr doc-arg-ptr +1 .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .boxa doc-volume-name .ev doc-env-%V .evc 0 .in 0 .nf .doc-do-references .. .de doc-do-references .if !\n[doc-is-reference] \ .tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c]) .nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]] .ie (\n[doc-reg-ddr1] == 1) \{\ .doc-append-arg \c 3 .\*[doc-arg\n[doc-arg-ptr]] .\} .el \{\ .nop \)\*[doc-arg\n[doc-arg-ptr]]\c .ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\ .br .ev .boxa .doc-reset-args .\} .el \{\ .nr doc-reg-ddr \n[doc-arg-ptr] .nr doc-arg-ptr +1 .nop \)\*[doc-space\n[doc-reg-ddr]]\c .doc-do-references .\}\} .. .de Hf .ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\ .doc-paragraph .nop File: .Pa \$1 .Bd -literal .so \$1 .Ed .doc-paragraph .\} .el \ .Usage: .Hf file (#\n[.c]) .. .nr doc-have-author 0 .de An .if !\n[doc-arg-limit] \{\ .ie \n[.$] \{\ .ie "\$1"-nosplit" \ .nr doc-in-authors-section 0 .el \{ .ie "\$1"-split" \ .nr doc-in-authors-section 1 .el \{\ .ds doc-macro-name An .doc-parse-args \$@ .\}\}\} .el \{\ .tm1 "Usage: .An {-nosplit | -split} .tm1 " .An author_name ... (#\n[.c]) .\}\} .if \n[doc-in-authors-section] \{\ .ie \n[doc-have-author] \ .br .el \ .nr doc-have-author 1 .\} .if \n[doc-arg-limit] \{\ .nr doc-arg-ptr +1 .ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\ .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .doc-print-recursive .\} .el \{\ .tm Usage: .An author_name ... (#\n[.c]) .doc-reset-args .\}\} .. .ds doc-str-Rv-std-prefix "The .ds doc-str-Rv-std-suffix "function returns the value\~0 if successful; .as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and .as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-std-suffix " is set to indicate the error. .ds doc-str-Rv-stds-prefix "The .ds doc-str-Rv-stds-and "and .ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful; .as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and .as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-stds-suffix " is set to indicate the error. .ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned; .as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and .as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[] .as doc-str-Rv-std0 " is set to indicate the error. .de Rv .if \n[doc-arg-limit] \{\ .tm Usage: .Rv not callable by other macros (#\n[.c]) .doc-reset-args .return .\} .if !\n[.$] \{\ .tm Usage: .Rv [-std] [ ...] (#\n[.c]) .return .\} .if "\$1"-std" \{\ .nr doc-reg-Rv \*[doc-section] .if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \ .tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c]) .br .shift .ie (\n[.$] > 1) \{\ .nop \)\*[doc-str-Rv-stds-prefix] .nr doc-reg-Rv 1 .while (\n[doc-reg-Rv] < \n[.$]) \{\ .ie (\n[.$] > 2) \ .Fn \$\n[doc-reg-Rv] , .el \ .Fn \$\n[doc-reg-Rv] .nr doc-reg-Rv +1 .\} .nop \)\*[doc-str-Rv-stds-and] .Fn \$\n[.$] .nop \)\*[doc-str-Rv-stds-suffix] .\} .el \{ .ie (\n[.$] == 1) \{\ .nop \)\*[doc-str-Rv-std-prefix] .Fn \$1 .nop \)\*[doc-str-Rv-std-suffix] .\} .el \{\ .nop \)\*[doc-str-Rv-std0] .\}\}\} .. .ds doc-str-Ex-std-prefix "The .ds doc-str-Ex-std-suffix "utility exits\~0 on success, .as doc-str-Ex-std-suffix " and\~>0 if an error occurs. .ds doc-str-Ex-stds-prefix "The .als doc-str-Ex-stds-and doc-str-Rv-stds-and .ds doc-str-Ex-stds-suffix "utilities exit\~0 on success, .as doc-str-Ex-stds-suffix " and\~>0 if an error occurs. .de Ex .if \n[doc-arg-limit] \{\ .tm Usage: .Ex not callable by other macros (#\n[.c]) .doc-reset-args .return .\} .if !\n[.$] \{\ .tm Usage: .Ex [-std] [ ...] (#\n[.c]) .return .\} .if "\$1"-std" \{\ .nr doc-reg-Ex \*[doc-section] .if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \ .tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c]) .br .shift .ie (\n[.$] > 1) \{\ .nop \)\*[doc-str-Ex-stds-prefix] .nr doc-reg-Ex 1 .while (\n[doc-reg-Ex] < \n[.$]) \{\ .ie (\n[.$] > 2) \ .Nm \$\n[doc-reg-Ex] , .el \ .Nm \$\n[doc-reg-Ex] .nr doc-reg-Ex +1 .\} .nop \)\*[doc-str-Ex-stds-and] .Nm \$\n[.$] .nop \)\*[doc-str-Ex-stds-suffix] .\} .el \{\ .nop \)\*[doc-str-Ex-std-prefix] .Nm \$1 .nop \)\*[doc-str-Ex-std-suffix] .\}\} .. .de Mt .Pa \$@ .. .de Lk .if !\n[doc-arg-limit] \{\ .ds doc-macro-name Lk .doc-parse-args \$@ .\} .if !\n[doc-arg-limit] \ .return .nr doc-arg-ptr +1 .ds doc-target-Lk "\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .nr doc-lasttext-Lk \n[doc-arg-limit] .while (\n[doc-lasttext-Lk] >= \n[doc-arg-ptr]) \{\ .if !(\n[doc-type\n[doc-lasttext-Lk]] == 3) \ .break .nr doc-lasttext-Lk -1 .\} .nr doc-curr-font \n[.f] .nr doc-curr-size \n[.ps] .if (\n[doc-arg-ptr] <= \n[doc-lasttext-Lk]) \{\ .nop \*[doc-Em-font]\c .while (\n[doc-arg-ptr] < \n[doc-lasttext-Lk]) \{\ .nop \&\*[doc-arg\n[doc-arg-ptr]] .nr doc-arg-ptr +1 .\} .nop \&\*[doc-arg\n[doc-arg-ptr]]\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]: .nr doc-arg-ptr +1 .\} .nop \*[doc-Sy-font]\*[doc-target-Lk]\c .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c .while (\n[doc-arg-ptr] <= \n[doc-arg-limit]) \{\ .nop \&\*[doc-arg\n[doc-arg-ptr]]\c .nr doc-arg-ptr +1 .\} .nop \& .doc-reset-args .. .de doc-defunct-macro .tmc mdoc error: .\$0 defunct .if d doc-\$0-usage \ .tmc , \*[doc-\$0-usage] .tm1 " (#\n[.c]) .. .als Db doc-defunct-macro .als Ds doc-defunct-macro .als Or doc-defunct-macro .ds doc-Or-usage use '|' .als Sf doc-defunct-macro .ds doc-Sf-usage use .Pf or .Ns .rn em e@ .de em .tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c]) .tm1 " Should this have been '.Em ...'? .ab .. .de doc-empty-line .if !\n[doc-display-depth] \ .tm mdoc warning: Empty input line #\n[.c] .sp .. .blm doc-empty-line .ec .if '\*[.T]'utf8' \{\ .rchar \- - ' ` .char \- \N'45' .char - \N'45' .char ' \N'39' .char ` \N'96' .\} .mso mdoc.local