=================================================================== RCS file: /cvs/mandoc/Attic/manuals.7,v retrieving revision 1.2 retrieving revision 1.10 diff -u -p -r1.2 -r1.10 --- mandoc/Attic/manuals.7 2009/03/22 14:09:38 1.2 +++ mandoc/Attic/manuals.7 2009/03/26 23:01:26 1.10 @@ -1,4 +1,22 @@ -.Dd $Mdocdate: March 22 2009 $ +.\" $Id: manuals.7,v 1.10 2009/03/26 23:01:26 kristaps Exp $ +.\" +.\" Copyright (c) 2009 Kristaps Dzonsons +.\" +.\" 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: March 26 2009 $ .Dt manuals 7 .Os .\" SECTION @@ -12,177 +30,74 @@ .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 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: +.Sh COMPOSITION +Prepare your composition environment by copying over the manual template +from +.Pa /usr/share/misc/mdoc.template . .Pp -.Dl % man \-s 1 ps -.Pp -The following table lists broad classifications and the applicable -manual sections: -.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 +If this file doesn't exist, bug your administrator. +.Em \&Do not +start afresh or by copying another manual unless you know exactly what +you're doing! .\" 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. +.Ss Section Numbering +Find an appropriate section for your manual. There may exist multiple +manual names per section, so be 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 -.\" SUBSECTION -.Ss Executables -Executables consist of runnable binaries. They're further classified by -operator utility: -.Pp -.\" LIST .Bl -tag -width "XXXXXXXXXXXX" -offset indent -compact .It Em Section .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 +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 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. -.\" 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. @@ -196,21 +111,14 @@ 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 +package 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. +newer languages such as DocBook or texinfo; or even ad-hoc conventions +such as README files. +.Em Avoid these formats . .Pp -There are two canonical references for writing mdoc manuals: +There are two canonical references for writing mdoc. Read them. .Pp .\" LIST .Bl -tag -width XXXXXXXXXXXXXXXX -offset indent -compact @@ -220,9 +128,9 @@ formal language reference macro reference .El .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 . +Open the template you've copied into +.Pa name.section +and begin editing. .\" SUBSECTION .Ss Development Tools While writing, make sure that your manual is correctly structured: @@ -236,60 +144,46 @@ You may spell-check your work as follows: .Pp 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: March 26 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 +% mandoc \-Wall name.1 2>&1 | less +% groff -mandoc name.1 2>&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 -.Ed .\" SUBSECTION .Ss Automation 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 .Xr mdoc 7 and .Xr mdoc.samples 7 -files will be indispensable in guiding composition. In this section, we +files are indispensable in guiding composition. In this section, we introduce some .Ux manual best practices: @@ -312,9 +206,20 @@ symbols and so on), use the escapes dictated in .Xr mdoc 7 . .El .\" SUBSECTION +.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 @@ -330,7 +235,13 @@ publications, please use the .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 automation tools like Doxygen to +smooth the development of your manuals. Don't. Source documentation is +different from a component manual.