-.Dd $Mdocdate: March 22 2009 $
-.Dt manuals 7
+.\" $Id: manuals.7,v 1.17 2009/07/20 13:45:11 kristaps Exp $
+.\"
+.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate: July 20 2009 $
+.Dt MANUALS 7
.Os
.\" SECTION
.Sh NAME
.Pp
A system component's documentation describes the utility of that
component, whether it's a device driver, an executable or, most
-importantly, a game. Although there are plenty of documents available
-on how to read
-.Ux
-documents, or where to find them, few focus on composition.
-.\" PARAGRAPH
+importantly, a game.
.Pp
-This document serves as a tutorial to writing
-.Ux
+This document serves as a tutorial to writing
+.Ux
documentation
.Pq Dq manuals .
-If you add something to your operating system, whether it's a new file
-format or directory structure or device driver, it needs documentation.
.\" SECTION
-.Sh CLASSIFICATION
-Classify your system component. In
-.Ux ,
-each component has a
-.Dq manual section ,
-which categorises the component's function. The section of a manual is
-usually listed in parenthesis next to the component name, such as
-.Xr ps 1 ,
-section 1. You can query a manual explicitly by its section:
-.Pp
-.Dl % man \-s 1 ps
+.Sh ENVIRONMENT
+First, copy over the manual template from
+.Pa /usr/share/misc/mdoc.template
+into your source directory.
.Pp
-The following table lists broad classifications and the applicable
-manual sections:
+.Dl % cp /usr/share/misc/mdoc.template \.
.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Category
-.Em Section(s)
-.It Device
-4
-.It Executable
-1, 6, 8
-.It Function
-2, 3, 9
-.It File-format
-5
-.It Other
-7
-.El
-.\" SUBSECTION
-.Ss Devices
-Consists of hardware (and pseudo-) device driver documentation. Drivers
-are unilaterally classified in section 4.
-.Em Note :
-these manuals are necessarily system- and architecture-specific.
-.Pp
-Example:
-.Pp
-.\" LIST
-.Bl -tag -width "File-formatX" -offset indent -compact
-.It Em Manual
-.Em Description
-.It Xr dc 4
-DEC/Intel 10/100 Ethernet device
-.El
+.Em \&Do not
+start afresh or by copying another manual unless you know exactly what
+you're doing! If the template doesn't exist, bug your administrator.
.\" SUBSECTION
-.Ss Executables
-Executables consist of runnable binaries. They're further classified by
-operator utility:
+.Ss Section Numbering
+Find an appropriate section for your manual. There may exist multiple
+manual names per section, so be specific:
.Pp
.\" LIST
.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
.Em Description
.It 1
operator utilities
-.It 8
-administrator utilities
-.It 6
-games
-.El
-.Pp
-Examples:
-.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Manual
-.Em Description
-.It Xr usermod 8
-modify user login information
-.It Xr cc 1
-the C compiler
-.It Xr fortune 6
-print a random adage
-.El
-.\" SUBSECTION
-.Ss Functions
-Function documentation describes programme source code, whether in the
-form of libraries, modules or standalone sources. They're further
-classified by context:
-.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Section
-.Em Description
.It 2
system calls
.It 3, 3p, 3f
programming libraries (C, Perl, Fortran)
+.It 5
+file and wire protocol formats
+.It 6
+games
+.It 7
+tutorials, documents and papers
+.It 8
+administrator utilities
.It 9
in-kernel routines
.El
.Pp
-.Em Note :
-section 2 and 9 manuals are necessarily system- and often
-architecture-specific. Examples:
-.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Manual
-.Em Description
-.It Xr open 2
-open or create a file for reading or writing
-.It Xr isspace 3
-whitespace character test
-.It Xr Pod::Man 3p
-convert POD data to formatted roff
-.It Xr tsleep 9
-process context sleep
-.El
-.\" SUBSECTION
-.Ss File-formats
-A file format usually describes the format of on-disc binary or text
-data, although it can also be used to describe wire protocols (this is
-usually best left to RFC). These manuals are unilaterally classified in
-section 5.
-.Pp
-Example:
-.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Manual
-.Em Description
-.It Xr passwd 5
-format of the password file
-.El
-.\" SUBSECTION
-.Ss Other
-Documents with no other classification are relegated to section 7. This
-constitutes reference tutorials (such as this document) and other
-miscellaneous information.
-.Pp
-Examples:
-.Pp
-.\" LIST
-.Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact
-.It Em Manual
-.Em Description
-.It Xr ascii 7
-ASCII character sets
-.It Xr symlink 7
-symbolic link handling
-.El
-.\" SECTION
-.Sh COMPOSITION
-Prepare your composition environment.
+If your manual falls into multiple categories, choose the most
+widely-used or, better, re-consider the topic of your manual to be more
+specific. You can list all manuals per section by invoking
+.Xr apropos 1 ,
+then provide the
+.Fl s
+flag to
+.Xr man 1
+to see the specific section manual (section 1, in this example):
+.\" DISPLAY
+.Bd -literal -offset indent
+% apropos myname
+myname (1) - utility description
+myname (3) - library description
+% man \-s 1 myname
+.Ed
.\" SUBSECTION
.Ss Naming
-Your component will need a name by which to query its contents via
-.Xr man 1 .
-Keep it simple. You may want to look for other manuals by that same
-name before committing:
+Name your component. Be terse, erring on the side of clarity. Look for
+other manuals by that same name before committing:
.Pp
.Dl % apropos myname
.Pp
-Conventionally, manual files are named
-.Pa myname.section ,
+Manual files are named
+.Pa myname.mysection ,
such as
.Pa manuals.7
-for this document.
-.\" SUBSECTION
-.Ss Input Language
-Manuals should
-.Em always
-be written in the
-.Xr mdoc 7
-formatting language.
-.Pp
-There exist other documentation-specific languages, such as the
-historical
-.Xr me 7 ,
-.Xr ms 7
-and
-.Xr man 7
-packages of
-.Xr roff 7 ;
-newer languages such as DocBook, texinfo or schema-driven XML; or even
-ad-hoc conventions such as README files.
-.Em Stay away from these methods!
-Historical formats fail to capture a manual's semantic content, instead
-only modelling its style. Newer methods requires special,
-system-specific tools and may change or become obsolete over the
-life-time of your component.
-.Pp
-There are two canonical references for writing mdoc manuals:
-.Pp
-.\" LIST
-.Bl -tag -width XXXXXXXXXXXXXXXX -offset indent -compact
-.It Xr mdoc 7
-formal language reference
-.It Xr mdoc.samples 7
-macro reference
-.El
+for this document. Rename the template file:
.Pp
-Don't merely copy existing manuals! Most systems distribute an mdoc
-template to help you get started in
-.Pa /usr/share/misc/mdoc.template .
+.Dl % mv mdoc.template myname.mysection
.\" SUBSECTION
.Ss Development Tools
While writing, make sure that your manual is correctly structured:
You may spell-check your work as follows:
.Pp
.Dl % deroff name.1 | spell
+.Pp
+If
+.Xr ispell 1
+is installed, it has a special mode for manuals:
+.Pp
.Dl % ispell \-n name.1
.Pp
-Use
+Use
.Xr cvs 1
-or, if not available,
+or
.Xr rcs 1
to version-control your work. If you wish the last check-in to effect
your document's date, use the following RCS tag for the date macro:
.Pp
-.Dl \&.Dd $Mdocdate: March 22 2009 $
-.Pp
+.Dl \&.Dd $Mdocdate: July 20 2009 $
.\" SUBSECTION
.Ss Viewing
-mdoc documents may be paged to your terminal with traditional
-tools such as
-.Xr nroff 1 ,
-.Xr groff 1 ,
-or with newer, more powerful tools such as
-.Xr mandoc 1 :
-.\" DISPLAY
+mdoc documents may be paged to your terminal with
+.Xr mandoc 1 .
+If you plan on distributing your work to systems without this tool,
+check it against
+.Xr groff 1 :
.Bd -literal -offset indent
-% nroff \-mandoc name.1 | less
-% groff \-Tascii \-mandoc name.1 | less
-% mandoc name.1 | less
-.Ed
-.Pp
-Other output formats are also supported:
-.\" DISPLAY
-.Bd -literal -offset indent
-% groff \-Tps \-mandoc name.1 | less
-% mandoc \-Thtml name.1 | less
+% mandoc \-Wall name.1 2>&1 | less
+% groff -mandoc name.1 2>&1 | less
.Ed
.\" SUBSECTION
.Ss Automation
-Consider adding your mdoc documents to
+Consider adding your mdoc documents to
.Xr make 1
-Makefiles in order to automatically check your input and generate
-output:
+Makefiles in order to automatically check your input:
.Bd -literal -offset indent
-\&.SUFFIXES: .html .txt .1 .in
+\&.SUFFIXES: .1 .in
\&.in.1:
mandoc -Wall,error -Tlint $<
cp -f $< $@
-
-\&.1.html:
- mandoc -Thtml $< >$@
-
-\&.1.txt:
- mandoc -Tascii $< | col -b >$@
.Ed
+.\" SUBSECTION
+.Ss Licensing
+Your manual must have a license. It should be listed at the start of
+your document, just as in source code.
.\" SECTION
-.Sh BEST PRACTICES
-The
+.Sh COMPOSITION
+Manuals should
+.Em always
+be written in the
.Xr mdoc 7
-and
-.Xr mdoc.samples 7
-files will be indispensable in guiding composition. In this section, we
-introduce some
-.Ux
-manual best practices:
+formatting language.
+.\" PARAGRAPH
+.Pp
+Open the template you've copied into
+.Pa myname.mysection
+and begin editing.
.\" SUBSECTION
.Ss Language
-.Bl -enum
+.Bl -enum
.It
Use clear, concise language. Favour simplicity.
.It
.Xr mdoc 7 .
.El
.\" SUBSECTION
-.Ss References
+.Ss Style
+The structure of the mdoc language makes it very hard to have any
+particular format style. Keep your lines under 72 characters in length.
+If you must have long option lines, use
+.Sq \&Oo/Oc .
+The same goes for function prototypes.
+.Em \&Do not
+use
+.Sq \&Xo/Xc .
+Find another way to structure your line.
+.\" SUBSECTION
+.Ss References
Other components may be referenced with the
-.Sq \&Xr ,
+.Sq \&Xr
and
.Sq \&Sx
macros. Make sure that these exist. If you intend to distribute your
.Sq \&Rs/Re
block macros.
.\" SUBSECTION
-.Ss Types and Prototypes
-If writing section 3 manuals, make sure that you correctly annotate your
-variables and functions. This guarantees that cross-referncing between
-function names and their prototypes works properly.
+.Ss Formatting
+.Em Don't style your manual .
+Give it meaningful content. The front-end will worry about formatting
+and style.
+.\" SECTION
+.Sh MAINTENANCE
+As your component changes and bugs are fixed, your manual may become out
+of date. You may be tempted to use tools like Doxygen to automate the
+development of your manuals. Don't.
+.Pp
+.Em Manuals are part of a system component :
+if you modify your code or specifications, modify the documentation.