xref: /openbsd/usr.bin/mandoc/man.cgi.8 (revision 62fe3e72)
1*62fe3e72Sschwarze.\"	$OpenBSD: man.cgi.8,v 1.23 2022/07/06 15:47:10 schwarze Exp $
2c6c22f12Sschwarze.\"
3ddda2719Sschwarze.\" Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
4c6c22f12Sschwarze.\"
5c6c22f12Sschwarze.\" Permission to use, copy, modify, and distribute this software for any
6c6c22f12Sschwarze.\" purpose with or without fee is hereby granted, provided that the above
7c6c22f12Sschwarze.\" copyright notice and this permission notice appear in all copies.
8c6c22f12Sschwarze.\"
9c6c22f12Sschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10c6c22f12Sschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11c6c22f12Sschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12c6c22f12Sschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13c6c22f12Sschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14c6c22f12Sschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15c6c22f12Sschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16c6c22f12Sschwarze.\"
17*62fe3e72Sschwarze.Dd $Mdocdate: July 6 2022 $
18c6c22f12Sschwarze.Dt MAN.CGI 8
19c6c22f12Sschwarze.Os
20c6c22f12Sschwarze.Sh NAME
21c6c22f12Sschwarze.Nm man.cgi
22c6c22f12Sschwarze.Nd CGI program to search and display manual pages
23c6c22f12Sschwarze.Sh DESCRIPTION
24c6c22f12SschwarzeThe
25c6c22f12Sschwarze.Nm
26c6c22f12SschwarzeCGI program searches for manual pages on a WWW server
27c6c22f12Sschwarzeand displays them to HTTP clients,
28c6c22f12Sschwarzeproviding functionality equivalent to the
29c6c22f12Sschwarze.Xr man 1
30784a63d6Sschwarzeand
31784a63d6Sschwarze.Xr apropos 1
32c6c22f12Sschwarzeutilities.
33c6c22f12SschwarzeIt can use multiple manual trees in parallel.
34c6c22f12Sschwarze.Ss HTML search interface
35c6c22f12SschwarzeAt the top of each generated HTML page,
36c6c22f12Sschwarze.Nm
37c6c22f12Sschwarzedisplays a search form containing these elements:
38c6c22f12Sschwarze.Bl -enum
39c6c22f12Sschwarze.It
40158bb456SschwarzeAn input box for search queries, expecting
41158bb456Sschwarzeeither a name of a manual page or an
42c6c22f12Sschwarze.Ar expression
43c6c22f12Sschwarzeusing the syntax described in the
44c6c22f12Sschwarze.Xr apropos 1
45c6c22f12Sschwarzemanual; filling this in is required for each search.
46fbeeb774Sschwarze.Pp
47fbeeb774SschwarzeThe expression is broken into words at whitespace.
48fbeeb774SschwarzeWhitespace characters and backslashes can be escaped
49fbeeb774Sschwarzeby prepending a backslash.
50fbeeb774SschwarzeThe effect of prepending a backslash to another character is undefined;
51fbeeb774Sschwarzein the current implementation, it has no effect.
52c6c22f12Sschwarze.It
53158bb456SschwarzeA
54158bb456Sschwarze.Xr man 1
55784a63d6Sschwarzesubmit button.
56784a63d6SschwarzeThe string in the input box is interpreted as the name of a manual page.
57784a63d6Sschwarze.It
58784a63d6SschwarzeAn
59158bb456Sschwarze.Xr apropos 1
60784a63d6Sschwarzesubmit button.
61784a63d6SschwarzeThe string in the input box is interpreted as a search
62784a63d6Sschwarze.Ar expression .
63158bb456Sschwarze.It
64158bb456SschwarzeA dropdown menu to optionally select a manual section.
65c6c22f12SschwarzeIf one is provided, it has the same effect as the
66158bb456Sschwarze.Xr man 1
67158bb456Sschwarzeand
68c6c22f12Sschwarze.Xr apropos 1
69c6c22f12Sschwarze.Fl s
70c6c22f12Sschwarzeoption.
71c6c22f12SschwarzeOtherwise, pages from all sections are shown.
72c6c22f12Sschwarze.It
73158bb456SschwarzeA dropdown menu to optionally select an architecture.
74c6c22f12SschwarzeIf one is provided, it has the same effect as the
75158bb456Sschwarze.Xr man 1
76158bb456Sschwarzeand
77c6c22f12Sschwarze.Xr apropos 1
78c6c22f12Sschwarze.Fl S
79c6c22f12Sschwarzeoption.
80c6c22f12SschwarzeBy default, pages for all architectures are shown.
81c6c22f12Sschwarze.It
82c6c22f12SschwarzeA dropdown menu to select a manual tree.
83c6c22f12SschwarzeIf the configuration file
84c6c22f12Sschwarze.Pa /var/www/man/manpath.conf
85c6c22f12Sschwarzecontains only one manpath, the dropdown menu is not shown.
86c6c22f12SschwarzeBy default, the first manpath given in the file is used.
87c6c22f12Sschwarze.El
88c6c22f12Sschwarze.Ss Program output
89c6c22f12SschwarzeThe
90c6c22f12Sschwarze.Nm
91c6c22f12Sschwarzeprogram generates five kinds of output pages:
92c6c22f12Sschwarze.Bl -tag -width Ds
93c6c22f12Sschwarze.It The index page.
94c6c22f12SschwarzeThis is returned when calling
95c6c22f12Sschwarze.Nm
96c6c22f12Sschwarzewithout
97c6c22f12Sschwarze.Ev PATH_INFO
98c6c22f12Sschwarzeand without a
99c6c22f12Sschwarze.Ev QUERY_STRING .
100c6c22f12SschwarzeIt serves as a starting point for using the program
101c6c22f12Sschwarzeand shows the search form only.
102c6c22f12Sschwarze.It A list page.
103c6c22f12SschwarzeLists are returned when searches match more than one manual page.
104c6c22f12SschwarzeThe first column shows the names and section numbers of manuals
105c6c22f12Sschwarzeas clickable links.
106c6c22f12SschwarzeThe second column shows the one-line descriptions of the manuals.
107d50b5b74SschwarzeFor
108d50b5b74Sschwarze.Xr man 1
109d50b5b74Sschwarzestyle searches, the content of the first manual page follows the list.
110c6c22f12Sschwarze.It A manual page.
111c6c22f12SschwarzeThis output format is used when a search matches exactly one
112c6c22f12Sschwarzemanual page, or when a link on a list page or an
113c6c22f12Sschwarze.Ic \&Xr
114c6c22f12Sschwarzelink on another manual page is followed.
115c6c22f12Sschwarze.It A no-result page.
116c6c22f12SschwarzeThis is shown when a search request returns no results -
117d50b5b74Sschwarzeeither because it violates the query syntax, or because
118c6c22f12Sschwarzethe search does not match any manual pages.
119c6c22f12Sschwarze.It \&An error page.
120c6c22f12SschwarzeThis cannot happen by merely clicking the
121c6c22f12Sschwarze.Dq Search
122c6c22f12Sschwarzebutton, but only by manually entering an invalid URI.
123c6c22f12SschwarzeIt does not show the search form, but only an error message
124c6c22f12Sschwarzeand a link back to the index page.
125c6c22f12Sschwarze.El
126c6c22f12Sschwarze.Ss Setup
127c6c22f12SschwarzeFor each manual tree, create one first-level subdirectory below
128c6c22f12Sschwarze.Pa /var/www/man .
129c6c22f12SschwarzeThe name of one of these directories is called a
130c6c22f12Sschwarze.Dq manpath
131c6c22f12Sschwarzein the context of
132c6c22f12Sschwarze.Nm .
133c6c22f12SschwarzeCreate a single ASCII text file
134c6c22f12Sschwarze.Pa /var/www/man/manpath.conf
135c6c22f12Sschwarzecontaining the names of these directories, one per line.
136c6c22f12SschwarzeThe directory given first is used as the default manpath.
137c6c22f12Sschwarze.Pp
138c6c22f12SschwarzeInside each of these directories, use the same directory and file
139c6c22f12Sschwarzestructure as found below
140c6c22f12Sschwarze.Pa /usr/share/man ,
141c6c22f12Sschwarzethat is, second-level subdirectories
142c6c22f12Sschwarze.Pa /var/www/man/*/man1 , /var/www/man/*/man2
143c6c22f12Sschwarzeetc. containing source
144c6c22f12Sschwarze.Xr mdoc 7
145c6c22f12Sschwarzeand
146c6c22f12Sschwarze.Xr man 7
147c6c22f12Sschwarzemanuals with file name extensions matching the section numbers,
148c6c22f12Sschwarzesecond-level subdirectories
149c6c22f12Sschwarze.Pa /var/www/man/*/cat1 , /var/www/man/*/cat2
150c6c22f12Sschwarzeetc. containing preformatted manuals with the file name extension
151c6c22f12Sschwarze.Sq 0 ,
152c6c22f12Sschwarzeand optional third-level subdirectories for architectures.
153c6c22f12SschwarzeUse
154c6c22f12Sschwarze.Xr makewhatis 8
155c6c22f12Sschwarzeto create a
156c6c22f12Sschwarze.Xr mandoc.db 5
157c6c22f12Sschwarzedatabase inside each manpath.
158c6c22f12Sschwarze.Pp
159c6c22f12SschwarzeConfigure your web server to execute CGI programs located in
160c6c22f12Sschwarze.Pa /cgi-bin .
161e8ddc539SschwarzeWhen using
162e8ddc539Sschwarze.Ox
163e8ddc539Sschwarze.Xr httpd 8 ,
164e8ddc539Sschwarzethe
165e8ddc539Sschwarze.Xr slowcgi 8
166e8ddc539Sschwarzeproxy daemon is needed to translate FastCGI requests to plain old CGI.
167aabcc9a1Sschwarze.Pp
168aabcc9a1SschwarzeTo compile
169aabcc9a1Sschwarze.Nm ,
170aabcc9a1Sschwarzefirst copy
171aabcc9a1Sschwarze.Pa cgi.h.example
172aabcc9a1Sschwarzeto
173aabcc9a1Sschwarze.Pa cgi.h
174aabcc9a1Sschwarzeand edit it according to your needs.
175aabcc9a1SschwarzeIt contains the following compile-time definitions:
176aabcc9a1Sschwarze.Bl -tag -width Ds
177aabcc9a1Sschwarze.It Ev COMPAT_OLDURI
178aabcc9a1SschwarzeOnly useful for running on www.openbsd.org to deal with old URIs containing
179aabcc9a1Sschwarze.Qq "manpath=OpenBSD "
180aabcc9a1Sschwarzewhere the blank character has to be translated to a hyphen.
181aabcc9a1SschwarzeWhen compiling for other sites, this definition can be deleted.
1823b9cfc6fSschwarze.It Dv CSS_DIR
1833b9cfc6fSschwarzeAn optional file system path to the directory containing the file
1843b9cfc6fSschwarze.Pa mandoc.css ,
185aabcc9a1Sschwarzeto be specified relative to the server's document root,
186aabcc9a1Sschwarzeand to be specified without a trailing slash.
1873b9cfc6fSschwarzeWhen empty, the CSS file is assumed to be in the document root.
1883b9cfc6fSschwarzeOtherwise, a leading slash is needed.
189aabcc9a1SschwarzeThis is used in generated HTML code.
1903b9cfc6fSschwarze.It Dv CUSTOMIZE_TITLE
191711661c7SschwarzeAn ASCII string to be used for the HTML <TITLE> element.
1923b9cfc6fSschwarze.It Dv MAN_DIR
1933b9cfc6fSschwarzeA file system path to the
194aabcc9a1Sschwarze.Nm
1953b9cfc6fSschwarzedata directory relative to the web server
196aabcc9a1Sschwarze.Xr chroot 2
1973b9cfc6fSschwarzedirectory, to be specified with a leading slash and without a trailing slash.
1983b9cfc6fSschwarzeIt needs to have at least one component; the root directory cannot be used
1993b9cfc6fSschwarzefor this purpose.
2003b9cfc6fSschwarzeThe files
2013b9cfc6fSschwarze.Pa manpath.conf ,
2023b9cfc6fSschwarze.Pa header.html ,
2033b9cfc6fSschwarzeand
2043b9cfc6fSschwarze.Pa footer.html
2053b9cfc6fSschwarzeare looked up in this directory.
2063b9cfc6fSschwarzeIt is also prepended to the manpath when opening
207aabcc9a1Sschwarze.Xr mandoc.db 5
208aabcc9a1Sschwarzeand manual page files.
2093b9cfc6fSschwarze.It Dv SCRIPT_NAME
2103b9cfc6fSschwarzeThe initial component of URIs, to be specified without leading
2113b9cfc6fSschwarzeand trailing slashes.
2123b9cfc6fSschwarzeIt can be empty.
213aabcc9a1Sschwarze.El
214aabcc9a1Sschwarze.Pp
215aabcc9a1SschwarzeAfter editing
216aabcc9a1Sschwarze.Pa cgi.h ,
217aabcc9a1Sschwarzerun
218aabcc9a1Sschwarze.Pp
219aabcc9a1Sschwarze.Dl make man.cgi
220aabcc9a1Sschwarze.Pp
2218361bf54Sschwarzeand copy the resulting binary to the proper location,
2228361bf54Sschwarzefor example using the command:
2238361bf54Sschwarze.Pp
2248361bf54Sschwarze.Dl make installcgi
2258361bf54Sschwarze.Pp
2268361bf54SschwarzeIn addition to that, make sure the default manpath contains the files
2278361bf54Sschwarze.Pa man1/apropos.1
2288361bf54Sschwarzeand
2298361bf54Sschwarze.Pa man8/man.cgi.8 ,
2308361bf54Sschwarzeor the documentation links at the bottom of the index page will not work.
231c6c22f12Sschwarze.Ss URI interface
232c6c22f12Sschwarze.Nm
233c6c22f12Sschwarzeuniform resource identifiers are not needed for interactive use,
234c6c22f12Sschwarzebut can be useful for deep linking.
235c6c22f12SschwarzeThey consist of:
236c6c22f12Sschwarze.Bl -enum
237c6c22f12Sschwarze.It
238c6c22f12SschwarzeThe
239c6c22f12Sschwarze.Cm http://
240d50b5b74Sschwarzeor
241d50b5b74Sschwarze.Cm https://
242c6c22f12Sschwarzeprotocol specifier.
243c6c22f12Sschwarze.It
2443b9cfc6fSschwarzeThe host name.
245c6c22f12Sschwarze.It
2463b9cfc6fSschwarzeThe
2473b9cfc6fSschwarze.Dv SCRIPT_NAME ,
2483b9cfc6fSschwarzepreceded by a slash unless empty.
249c6c22f12Sschwarze.It
250158bb456SschwarzeTo show a single page, a slash, the manpath, another slash,
251c6c22f12Sschwarzeand the name of the requested file, for example
252c6c22f12Sschwarze.Pa /OpenBSD-current/man1/mandoc.1 .
253ddda2719SschwarzeThis can be abbreviated according to the following syntax:
254ddda2719Sschwarze.Sm off
255daf4c292Sschwarze.Op / Ar manpath
256daf4c292Sschwarze.Op / Cm man Ar sec
257daf4c292Sschwarze.Op / Ar arch
258ddda2719Sschwarze.Pf / Ar name Op \&. Ar sec
259ddda2719Sschwarze.Sm on
260c6c22f12Sschwarze.It
261158bb456SschwarzeFor searches, a query string starting with a question mark
262c6c22f12Sschwarzeand consisting of
263c6c22f12Sschwarze.Ar key Ns = Ns Ar value
264c6c22f12Sschwarzepairs, separated by ampersands, for example
265158bb456Sschwarze.Pa ?manpath=OpenBSD-current&query=mandoc .
266c6c22f12SschwarzeSupported keys are
267c6c22f12Sschwarze.Cm manpath ,
268158bb456Sschwarze.Cm query ,
269c6c22f12Sschwarze.Cm sec ,
270c6c22f12Sschwarze.Cm arch ,
271c6c22f12Sschwarzecorresponding to
272c6c22f12Sschwarze.Xr apropos 1
273c6c22f12Sschwarze.Fl M ,
274c6c22f12Sschwarze.Ar expression ,
275c6c22f12Sschwarze.Fl s ,
276c6c22f12Sschwarze.Fl S ,
277158bb456Sschwarzerespectively, and
278158bb456Sschwarze.Cm apropos ,
279158bb456Sschwarzewhich is a boolean parameter to select or deselect the
280158bb456Sschwarze.Xr apropos 1
281158bb456Sschwarzequery mode.
282c6c22f12SschwarzeFor backward compatibility with the traditional
283c6c22f12Sschwarze.Nm ,
284c6c22f12Sschwarze.Cm sektion
285158bb456Sschwarzeis supported as an alias for
286c6c22f12Sschwarze.Cm sec .
287c6c22f12Sschwarze.El
288cf3a545cSschwarze.Ss Restricted character set
289cf3a545cSschwarzeFor security reasons, in particular to prevent cross site scripting
290cf3a545cSschwarzeattacks, some strings used by
291cf3a545cSschwarze.Nm
292cf3a545cSschwarzecan only contain the following characters:
293cf3a545cSschwarze.Pp
294cf3a545cSschwarze.Bl -dash -compact -offset indent
295cf3a545cSschwarze.It
296cf3a545cSschwarzelower case and upper case ASCII letters
297cf3a545cSschwarze.It
298cf3a545cSschwarzethe ten decimal digits
299cf3a545cSschwarze.It
300cf3a545cSschwarzethe dash
301cf3a545cSschwarze.Pq Sq -
302cf3a545cSschwarze.It
303cf3a545cSschwarzethe dot
304cf3a545cSschwarze.Pq Sq \&.
305cf3a545cSschwarze.It
306cf3a545cSschwarzethe slash
307cf3a545cSschwarze.Pq Sq /
308cf3a545cSschwarze.It
309cf3a545cSschwarzethe underscore
310cf3a545cSschwarze.Pq Sq _
311cf3a545cSschwarze.El
312cf3a545cSschwarze.Pp
3133b9cfc6fSschwarzeIn particular, this applies to all manpaths and architecture names.
314c6c22f12Sschwarze.Sh ENVIRONMENT
315c6c22f12SschwarzeThe web server may pass the following CGI variables to
316c6c22f12Sschwarze.Nm :
317c6c22f12Sschwarze.Bl -tag -width Ds
3183b9cfc6fSschwarze.It Ev SCRIPT_NAME
319174828c5SjmcThe initial part of the URI passed from the client to the server,
3203b9cfc6fSschwarzestarting after the server's host name and ending before
3213b9cfc6fSschwarze.Ev PATH_INFO .
3223b9cfc6fSschwarzeThis is ignored by
3233b9cfc6fSschwarze.Nm .
3243b9cfc6fSschwarzeWhen constructing URIs for links and redirections, the
3253b9cfc6fSschwarze.Dv SCRIPT_NAME
3263b9cfc6fSschwarzepreprocessor constant is used instead.
327c6c22f12Sschwarze.It Ev PATH_INFO
328c6c22f12SschwarzeThe final part of the URI path passed from the client to the server,
329c6c22f12Sschwarzestarting after the
330c6c22f12Sschwarze.Ev SCRIPT_NAME
331c6c22f12Sschwarzeand ending before the
332c6c22f12Sschwarze.Ev QUERY_STRING .
333c6c22f12SschwarzeIt is used by the
334c6c22f12Sschwarze.Cm show
3357a7bc5c3Sschwarzepage to acquire the manpath and filename it needs.
336c6c22f12Sschwarze.It Ev QUERY_STRING
337c6c22f12SschwarzeThe HTTP query string passed from the client to the server.
338c6c22f12SschwarzeIt is the final part of the URI, after the question mark.
339c6c22f12SschwarzeIt is used by the
340c6c22f12Sschwarze.Cm search
341c6c22f12Sschwarzepage to acquire the named parameters it needs.
342c6c22f12Sschwarze.El
343c6c22f12Sschwarze.Sh FILES
344c6c22f12Sschwarze.Bl -tag -width Ds
345c6c22f12Sschwarze.It Pa /var/www
346c6c22f12SschwarzeDefault web server
347c6c22f12Sschwarze.Xr chroot 2
348c6c22f12Sschwarzedirectory.
349c6c22f12SschwarzeAll the following paths are specified relative to this directory.
350c6c22f12Sschwarze.It Pa /cgi-bin/man.cgi
3513b9cfc6fSschwarzeThe usual file system path to the
352c6c22f12Sschwarze.Nm
3533b9cfc6fSschwarzeprogram inside the web server
3543b9cfc6fSschwarze.Xr chroot 2
3553b9cfc6fSschwarzedirectory.
3563b9cfc6fSschwarzeA different name can be chosen, but in any case, it needs to be configured in
3573b9cfc6fSschwarze.Xr httpd.conf 5 .
358c6c22f12Sschwarze.It Pa /htdocs
3593b9cfc6fSschwarzeThe file system path to the server document root directory
3603b9cfc6fSschwarzerelative to the server
3613b9cfc6fSschwarze.Xr chroot 2
3623b9cfc6fSschwarzedirectory.
363c6c22f12SschwarzeThis is part of the web server configuration and not specific to
364c6c22f12Sschwarze.Nm .
36506bcd913Sschwarze.It Pa /htdocs/mandoc.css
366c6c22f12SschwarzeA style sheet for
367c6c22f12Sschwarze.Xr mandoc 1
36806bcd913SschwarzeHTML styling, referenced from each generated HTML page.
369c6c22f12Sschwarze.It Pa /man
370c6c22f12SschwarzeDefault
371c6c22f12Sschwarze.Nm
372c6c22f12Sschwarzedata directory containing all the manual trees.
373c6c22f12SschwarzeCan be overridden by
3743b9cfc6fSschwarze.Dv MAN_DIR .
375c6c22f12Sschwarze.It Pa /man/manpath.conf
376c6c22f12SschwarzeThe list of available manpaths, one per line.
377cf3a545cSschwarzeIf any of the lines in this file contains a slash
378cf3a545cSschwarze.Pq Sq /
379cf3a545cSschwarzeor any character not contained in the
380cf3a545cSschwarze.Sx Restricted character set ,
381cf3a545cSschwarze.Nm
382cf3a545cSschwarzereports an internal server error and exits without doing anything.
383711661c7Sschwarze.It Pa /man/header.html
384*62fe3e72SschwarzeAn optional file containing static HTML code to be wrapped in
385*62fe3e72Sschwarzea <HEADER> element and inserted right after opening the <BODY> element.
386*62fe3e72SschwarzeFor example, it can contain an <H1> element
387*62fe3e72Sschwarzespecifying the name of the website.
388711661c7Sschwarze.It Pa /man/footer.html
389*62fe3e72SschwarzeAn optional file containing static HTML code to be wrapped in
390*62fe3e72Sschwarzea <FOOTER> element and inserted right before closing the <BODY> element.
391c6c22f12Sschwarze.It Pa /man/OpenBSD-current/man1/mandoc.1
392c6c22f12SschwarzeAn example
393c6c22f12Sschwarze.Xr mdoc 7
394c6c22f12Sschwarzesource file located below the
395c6c22f12Sschwarze.Dq OpenBSD-current
396c6c22f12Sschwarzemanpath.
397c6c22f12Sschwarze.El
398c6c22f12Sschwarze.Sh COMPATIBILITY
399c6c22f12SschwarzeThe
400c6c22f12Sschwarze.Nm
401c6c22f12SschwarzeCGI program is call-compatible with queries from the traditional
402c6c22f12Sschwarze.Pa man.cgi
403c6c22f12Sschwarzescript by Wolfram Schneider.
404d50b5b74SschwarzeHowever, the output looks quite different.
405c6c22f12Sschwarze.Sh SEE ALSO
406c6c22f12Sschwarze.Xr apropos 1 ,
407c6c22f12Sschwarze.Xr mandoc.db 5 ,
408c6c22f12Sschwarze.Xr makewhatis 8 ,
409c6c22f12Sschwarze.Xr slowcgi 8
410c6c22f12Sschwarze.Sh HISTORY
411c6c22f12SschwarzeA version of
412c6c22f12Sschwarze.Nm
413c6c22f12Sschwarzebased on
414c6c22f12Sschwarze.Xr mandoc 1
415c6c22f12Sschwarzefirst appeared in mdocml-1.12.1 (March 2012).
41618f5ab3dSschwarzeThe current
41718f5ab3dSschwarze.Xr mandoc.db 5
41818f5ab3dSschwarzedatabase format first appeared in
41918f5ab3dSschwarze.Ox 6.1 .
420c6c22f12Sschwarze.Sh AUTHORS
421c6c22f12Sschwarze.An -nosplit
422c6c22f12SschwarzeThe
423c6c22f12Sschwarze.Nm
424c6c22f12Sschwarzeprogram was written by
425c6c22f12Sschwarze.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
42618f5ab3dSschwarzeand is maintained by
42718f5ab3dSschwarze.An Ingo Schwarze Aq Mt schwarze@openbsd.org ,
42818f5ab3dSschwarzewho also designed and implemented the database format.
429