428 lines
12 KiB
Plaintext
428 lines
12 KiB
Plaintext
.\" $NetBSD: macros,v 1.28 2004/08/21 21:58:58 hubertf Exp $
|
|
.\"
|
|
.\" Copyright (c) 1999-2004 The NetBSD Foundation, Inc.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" This code is derived from software contributed to The NetBSD Foundation
|
|
.\" by Ross Harvey.
|
|
.\"
|
|
.\" 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. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the NetBSD
|
|
.\" Foundation, Inc. and its contributors.
|
|
.\" 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
|
.\"
|
|
.\" -------------------- MACROS --------------------
|
|
.
|
|
.
|
|
.\" Define a .CURDIR-relative include, with entertainment
|
|
.
|
|
.rn so so-real
|
|
.de so
|
|
. tm ...reading \\$1
|
|
. Pp
|
|
. so-real \*[.CURDIR]/\\$1
|
|
.\" tm ...back to INSTALL
|
|
..
|
|
.als source so
|
|
.
|
|
.\" -mdoc only has only two section levels (Sh & Ss)
|
|
.
|
|
.\" second-level subsection macro (third-level section)
|
|
.
|
|
.de Ss2
|
|
. ie rHTML <h5><a name="\\$*">\\$*</a></h5>
|
|
. el \{\
|
|
. br
|
|
. if t .ne 7P
|
|
. Pp
|
|
. Em "\\$*"
|
|
. Pp
|
|
. \}
|
|
..
|
|
.
|
|
.
|
|
.\" Standard indented literal display, with nice showmatch parens in the name.
|
|
.\" Be warned that using font change macros such as `Ic', `Em' and `Sy' inside
|
|
.\" may cause formatting problems further on; this is probably a bug in the
|
|
.\" mdoc macros...
|
|
.
|
|
.de (disp
|
|
. Bd -literal -offset indent
|
|
..
|
|
.
|
|
.de disp)
|
|
. Ed
|
|
..
|
|
.
|
|
.
|
|
.de br_ne
|
|
. br
|
|
. if t .ne \\$1
|
|
..
|
|
.
|
|
.
|
|
.
|
|
.\" Tagged lists:
|
|
.\" (tag wid rest Creates a tag with width wid and other args rest
|
|
.\" tag) End sequence
|
|
.\"
|
|
.
|
|
.de (tag
|
|
. Bl -tag -width \\$*
|
|
..
|
|
.
|
|
.de tag)
|
|
. El
|
|
..
|
|
.
|
|
.de (Note
|
|
. (tag Note:
|
|
. It Em Note:
|
|
..
|
|
.
|
|
.de Note)
|
|
. tag)
|
|
..
|
|
.
|
|
.\" Bullet list, which swaps between bullet and hyphen at each alternate
|
|
.\" indent level.
|
|
.
|
|
.nr b_or_h 1
|
|
.
|
|
.de (bullet
|
|
. ie \\n[b_or_h] .Bl -bullet \\$*
|
|
. el .Bl -hyphen \\$*
|
|
. nr b_or_h 1-\\n[b_or_h]
|
|
. It
|
|
..
|
|
.
|
|
.de bullet)
|
|
. El
|
|
. nr b_or_h 1-\\n[b_or_h]
|
|
..
|
|
.
|
|
.\" Enumerated list
|
|
.\"
|
|
.
|
|
.de (enum
|
|
. Bl -enum \\$*
|
|
. It
|
|
..
|
|
.
|
|
.de enum)
|
|
. El
|
|
..
|
|
.
|
|
.\" Item list
|
|
.\"
|
|
.
|
|
.de (item
|
|
. Bl -item \\$*
|
|
. It
|
|
..
|
|
.
|
|
.de item)
|
|
. El
|
|
..
|
|
.
|
|
.\" Generate NetBSD/${MACHINE}, with NetBSD being done with .Nx.
|
|
.\" If there's trailing args to the macro, concatenate with no space.
|
|
.
|
|
.de Nx*M
|
|
.ie \\n[.$]>0 .Nx Ns / Ns \*M Ns \\$*
|
|
.el .Nx Ns / Ns \*M
|
|
..
|
|
.
|
|
.\" Key-cap; literal text one point size smaller
|
|
.
|
|
.de Key
|
|
.ps -1
|
|
.Li \\$*
|
|
.ps +1
|
|
..
|
|
.
|
|
.
|
|
.\" Macro for `UNIX-like', since we don't want to just use `UNIX'
|
|
.
|
|
.de Ul
|
|
.Ux -like
|
|
..
|
|
.
|
|
.\" setsize <G> <U>
|
|
.\" Remember <G> and <U> for the next showsize
|
|
.\" showsize [<G> <U>]
|
|
.\" Display "<G> MB gzipped, <U> MB uncompressed" on a new line,
|
|
.\" and then reset the values of <G> and <U> to '-unset-'.
|
|
.\" Values can be generated with something like this:
|
|
.\" gzip -l *.tgz | \
|
|
.\" awk '/\.tar/ { printf ".if \\n[%s] .setsize %d %d\n", \
|
|
.\" substr($4,0,index($4, "/")-1), \
|
|
.\" ( $1+1048575 ) /1048576, \
|
|
.\" ( $2 + 1048575) / 1048576 } '
|
|
.\"
|
|
.
|
|
.de setsize
|
|
\.ds set_gzip \\$[1]
|
|
\.ds set_gunzip \\$[2]
|
|
..
|
|
.de showsize
|
|
.br
|
|
.if \\n(.$==2 .setsize \\$*
|
|
.Em \\*[set_gzip] MB gzipped, \\*[set_gunzip] MB uncompressed
|
|
.setsize -unset- -unset-
|
|
..
|
|
.setsize -unset- -unset-
|
|
.
|
|
.\" .Bc/.Ec; begin/end two-column mode. This may not work in all
|
|
.\" cases, but was designed for common/donations. There is no
|
|
.\" support for more than two pages, nor for right-margins.
|
|
.\" Usage:
|
|
.\" .Bc [ncol]
|
|
.\" Dependancies:
|
|
.\" macro CF page trap macro for bottom of column
|
|
.\" macro CZ code duplication; handling of diversion interpolation.
|
|
.\" macro CC diversion trap macro for subdividing into pages.
|
|
.\" macro Bc Begin columns
|
|
.\" macro Ec End columns
|
|
.\" reg cl current column number
|
|
.\" reg CI saved indent
|
|
.\" reg CL saved line-length
|
|
.\" reg CO saved page offset
|
|
.\" reg CN number of columns
|
|
.\" reg CA max height of columnized text
|
|
.\" reg CB save available space on page
|
|
.\" reg CE column spacing
|
|
.\" str C0 entire columnization region [if crosses page boundary]
|
|
.\" str C1 columnization region for page 1
|
|
.\" str C2 columnization region for page 2
|
|
.
|
|
.de CF
|
|
.if \\n(Db .tm page trap (column bottom) at \\n(nlu.
|
|
.\"TRAP2 \" debugging: here's where the trap is.
|
|
.ie \\n+(cl<\\n(CN \{
|
|
.rt \" return to the mk
|
|
.po +\\n(CEu \" space to next column
|
|
.ns
|
|
.\}
|
|
.el \{\
|
|
.ll \\n(CLu \" restore linelength
|
|
.in \\n(CIu \" restore indent
|
|
.po \\n(COu \" restore offset
|
|
.\}
|
|
..
|
|
.de CZ
|
|
.mk \" Save position
|
|
.if \\n(Db .tm Saved column top is \\n(nlu.
|
|
.nr cl 0 1 \" This is column #0
|
|
.nr CL \\n(.l \" Save the linelength
|
|
.nr CI \\n(.i \" Save the indent
|
|
.nr CO \\n(.o \" Save the offset
|
|
.nf
|
|
.\" .ll 20n \" this doesn't work in nf-mode.
|
|
.if \\n(Db .tm Page trap placed at \\n(CDu; next trap at \\n(nlu+\n(.tu.
|
|
.wh \\n(CDu CF \" set the bottom of column trap
|
|
.if \\n(Db .tm CZ: \\$1 starts at \\n(nlu; trap in \\n(.tu.
|
|
.\\$1 \" throw in the diverted text
|
|
.if \\n(Db .tm CZ: \\$1 ends at \\n(nlu; trap in \\n(.tu.
|
|
.if !\\n(CN==\\n(cl .sp \" If we didn't finish, space to force a trap.
|
|
.ch CF \" remove trap
|
|
.if \\n(Db .tm CZ: before .ne we are at \\n(nlu with \\n(.tu to go.
|
|
.ne 3V \" space for two lines after
|
|
.if \\n(Db .tm CZ: after .ne we are at \\n(nlu.
|
|
..
|
|
.de CC
|
|
.if \\n(Db .tm diversion trap (page break) at \\n(nlu.
|
|
.\"TRAP1 \" debugging
|
|
.di \" close first-page (C1) diversion
|
|
.di C2 \" open second-page (C2) diversion
|
|
..
|
|
.de Bc
|
|
.in +\n(Dsu \" Indent to match Bd
|
|
.nr CN 2 \" Number of columns
|
|
.if !"\\$1"" .nr CN \\$1
|
|
.ne 2v \" we need at least two lines of space on the page.
|
|
.ev 2
|
|
.di C1 \" divert the text
|
|
.nf
|
|
..
|
|
.de Ec
|
|
.di \" end diversion
|
|
.ev
|
|
.nr CA \\n(dnu/\\n(CN \" save max height of columnized text
|
|
.nr CB \\n(.t-(\\n(.v*3) \" save available space on page
|
|
.nr CE \\n(.lu/\\n(CN
|
|
.\" .tm The diversion is \\n(dnu high and \\n(dlu wide. At \\n(CN columns,
|
|
.\" .tm the max height would be \\n(CAu high, if they fit on the same page.
|
|
.\" .tm The page length is \\n(.p, and the current vposition is \\n(nl, not to
|
|
.\" .tm be confused with the page offset of \\n(.o.
|
|
.\" .tm So we have \\n(CBu of space on this page.
|
|
.ie \\n(CA>=\\n(CB \{
|
|
.rn C1 C0 \" put original in C0
|
|
.ev 2
|
|
.di C1 \" Divert the first page into new C1
|
|
.\" Diversion trap location in solid kludgite. If notCRT, we need
|
|
.\" extra v-height. go figure.
|
|
.ie \\n(cR==0 .dt \\n(CBu*\\n(CNu+2v CC
|
|
.el .dt \\n(CBu*\\n(CNu CC
|
|
.C0
|
|
.di
|
|
.ev
|
|
.nf
|
|
.fi
|
|
.\" Trap at bottom of page
|
|
.if \\(Db .tm page trap set at \\n(nlu+\\n(.tu-2v)
|
|
.nr CD \\n(nlu+\\n(.tu-2v) \" trap right before next trap
|
|
.\}
|
|
.el \{\
|
|
.\" Trap at the bottom of the text. All on one page.
|
|
.nr CD \\n(CAu+\\n(nlu
|
|
.\}
|
|
.CZ C1
|
|
.\" The .if dxxx construct is groff-specific
|
|
.if dC2 \{
|
|
.if \\(Db .tm max height of text is \\n(dnu/\\n(CN.
|
|
.if \\(Db .tm breakpoint (for page trap) is 1u+\\n(CAu+\\n(nlu.
|
|
.nr CA \\n(dnu/\\n(CN \" save max height of columnized text
|
|
.nr CD \\n(CAu+\\n(nlu
|
|
.CZ C2
|
|
.\}
|
|
.rm C2 \" nuke it otherwise it might pop up later.
|
|
.\" These should already be restored. But sometimes we don't hit
|
|
.\" the last page trap [??]
|
|
.ll \\n(CLu \" restore linelength
|
|
.in \\n(CIu \" restore indent
|
|
.po \\n(COu \" restore offset
|
|
.fi \" fill again.
|
|
.in -\n(Dsu \" revert prior indent
|
|
..
|
|
.\" Unfortunately, none of the above works with -mdoc2html; so we'll
|
|
.\" just replace columns with a regular Bd -unfilled -offset indent.
|
|
.if rHTML \{
|
|
.rm Bc
|
|
.rm Ec
|
|
.de Bc
|
|
.Bd -unfilled -offset indent
|
|
..
|
|
.als Ec Ed
|
|
.\}
|
|
.
|
|
.\" Macros to support Table of Contents
|
|
.\" TOC is set (from the command line) if we're generating the TOC file;
|
|
.\" the TOC file is read from groff's stderr.
|
|
.\" Usage:
|
|
.\" .Sh section header
|
|
.\" .Ss subsection header
|
|
.\" .Ss2 sub2section header
|
|
.\" .Te depth "item" Explicit toc entry, not based on other markup
|
|
.\" .To depth "item" Like Te, but don't echo the item
|
|
.\" XXX To should be unnecessary if we handle parseable/callable.
|
|
.\" .Tc import the TOC
|
|
.\" .Ti depth page "item" (internal) output an entry
|
|
.if dTOC \{
|
|
.rn Ss Ss-toc
|
|
.de Ss
|
|
.Ss-toc \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
|
\.tm .Ti 0 \\n% \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
|
..
|
|
.rn Ss2 Ss2-toc
|
|
.de Ss2
|
|
.Ss2-toc \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
|
\.tm .Ti 1 \\n% \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
|
|
..
|
|
.\}
|
|
.de Te
|
|
.ie rHTML <a name="\\$2">\\$2</a>
|
|
.el \\$2
|
|
.if dTOC \.tm .Ti \\$1 \\n% \\$2
|
|
..
|
|
.de To
|
|
.if rHTML <a name="\\$2"></a>
|
|
.if dTOC \.tm .Ti \\$1 \\n% \\$2
|
|
..
|
|
.de Ti
|
|
.ie rHTML \{.ta (\n(.lu+\w'<a href="#\\$3"></a>'u)R
|
|
\h'3n*\\$1u' <a href="#\\$3">\\$3</a>\a\\$2
|
|
.\}
|
|
.el \h'3n*\\$1u' \\$3\a\\$2
|
|
..
|
|
.de Tc
|
|
.Bd -literal
|
|
.ta (\n(.lu)R
|
|
\.tm ...reading INSTALL.\*[format].toc
|
|
. Pp
|
|
.\" Use so-real here because otherwise we lose on objdirs
|
|
\.so-real INSTALL.\*[format].toc
|
|
.Ed
|
|
..
|
|
.
|
|
.
|
|
.\" -------------------- MISC --------------------
|
|
.
|
|
.\" set the unused target number registers to 0, so that we can turn on all
|
|
.\" the warnings but still do things like .if \n[amiga]:\n[alpha] \&stuff
|
|
.\" (The Makefile defines the target as 1, leaving the others undefined.)
|
|
.
|
|
.de define_all
|
|
. while \\n[.$] \{\
|
|
. if !r\\$1 .nr \\$1 0
|
|
. shift
|
|
. \}
|
|
..
|
|
.
|
|
.define_all \*[MACHINE_LIST]
|
|
.
|
|
.\" Supported MACHINE_ARCHs:
|
|
.ds MACHINE_ARCH_LIST alpha arm hppa i386 m68000 m68k mipseb mipsel ns32k
|
|
.as MACHINE_ARCH_LIST " powerpc sh3eb sh3el sparc sparc64 vax x86_64 xen
|
|
.
|
|
.\" Define registers for MACHINE_ARCHs with multiple or different MACHINEs
|
|
.
|
|
.ds A \*M
|
|
.ds P \*M
|
|
.if \n[acorn26]:\n[acorn32]:\n[cats]:\n[evbarm]:\n[hpcarm]:\n[netwinder]:\n[shark] .ds A arm
|
|
.if \n[hp700] .ds A hppa
|
|
.if \n[sun2] .ds A m68000
|
|
.if \n[amiga]:\n[atari]:\n[cesfic]:\n[hp300]:\n[luna68k]:\n[mac68k]:\n[mvme68k]:\n[news68k]:\n[next68k]:\n[sun3]:\n[x68k] .ds A m68k
|
|
.if \n[mipsco]:\n[newsmips]:\n[sbmips]:\n[sgimips] .ds A mipseb
|
|
.if \n[algor]:\n[arc]:\n[cobalt]:\n[evbmips]:\n[hpcmips]:\n[playstation2]:\n[pmax] .ds A mipsel
|
|
.if \n[amigappc]:\n[bebox]:\n[evbppc]:\n[macppc]:\n[mvmeppc]:\n[ofppc]:\n[prep]:\n[sandpoint] .ds A powerpc
|
|
.if \n[evbsh3]:\n[mmeye] .ds A sh3eb
|
|
.if \n[dreamcast]:\n[hpcsh] .ds A sh3el
|
|
.if \n[xen-i386] \{.ds A i386
|
|
.ds P i386
|
|
.nr xen 1
|
|
.\}
|
|
.if !r\*A .nr \*A 1
|
|
.define_all \*[MACHINE_ARCH_LIST]
|
|
.
|
|
.\" Other strings available:
|
|
.\"
|
|
.\" \*M ${MACHINE} (e.g., `i386')
|
|
.\" \*P ${MACHINE} for packages (e.g., `i386')
|
|
.\" \*A ${MACHINE_ARCH} (e.g., `m68k')
|
|
.\" \*V Version (e.g., `1.5')
|
|
.\" \*[.CURDIR] ${.CURDIR}
|