[Reproducible-commits] [txt2man] 02/13: Imported Upstream version 1.5.5

Reiner Herrmann reiner at reiner-h.de
Thu Jul 2 16:52:19 UTC 2015


This is an automated email from the git hooks/post-receive script.

deki-guest pushed a commit to branch pu/reproducible_builds
in repository txt2man.

commit b2392a87669051f07d37f11a6c3a2965673aa595
Author: Fredrik Steen <stone at o2.ijt.se>
Date:   Thu Apr 7 15:53:51 2011 +0200

    Imported Upstream version 1.5.5
---
 COPYING   | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Changelog |  50 ++++++++
 Makefile  |  21 ++++
 README    |  17 +++
 bookman   | 142 +++++++++++++++++++++++
 bookman.1 |  79 +++++++++++++
 src2man   | 185 ++++++++++++++++++++++++++++++
 src2man.1 |  85 ++++++++++++++
 txt2man   | 383 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 txt2man.1 | 168 +++++++++++++++++++++++++++
 10 files changed, 1469 insertions(+)

diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Changelog b/Changelog
new file mode 100644
index 0000000..9741893
--- /dev/null
+++ b/Changelog
@@ -0,0 +1,50 @@
+txt2man-1.5.5	21-mar-2007
+
+* txt2man: correct layout of C structures in synopsis
+* src2man: genrate manpages for C types/struct definitions
+
+txt2man-1.5.4	16-mar-2007
+
+* bookman: Added copyright
+* src2man: Added copyright. Fix cover page handling. Add origin
+  comment in generated manpages.
+
+txt2man-1.5.3	15-mar-2007
+
+* bookman: better handling of header and footers of cover page.
+* src2man: date can now be set.
+* txt2man: date can now be set. Better handling of C function prototypes.
+
+txt2man-1.5.2	28-feb-2007
+
+* txt2man: fix synopsis handling.
+
+txt2man-1.5.1	25-oct-2006
+
+* src2man: search if the function prototype is defined in corresponding
+           '.h' include file, and if yes, add a '#include "file.h"'
+           statement in synopsis.
+* src2man: allow to force SYNOPSIS sections in comment blocks.
+* bookman: reads the file list from stdin in no arg is supplied.
+* Makefile: specify commands path (in current dir) when generating doc.
+
+txt2man-1.5	16-oct-2006
+
+* txt2man: fix indentation.
+* bookman: new command to generate a book from manpages.
+* src2man: new command to extract manpages from source files.
+* Makefile: update and fix rules.
+
+txt2man-1.4.8	07-jul-2003
+
+* txt2man: fix a bug in tag list parsing (bug discovered by Fredrik Steen)
+* txt2man: fix a bug in parsing spaces in empty lines
+* Makefile: Create install target directories, if not there
+
+txt2man-1.4.7	06-jan-2003
+
+* fix gawk --lint warnings (from Eric Moors)
+* fix a warning for an escape sequence (from Juergen Daubert)
+
+txt2man-1.4.6	16-dec-2002
+Changelog starts from here!
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ecb4ef5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+# Makefile
+prefix ?= /usr/local
+version = txt2man-1.5.5
+BIN = src2man bookman txt2man
+MAN1 = src2man.1 txt2man.1 bookman.1
+
+all: $(MAN1)
+
+install: $(MAN1)
+	mkdir -p $(prefix)/bin $(prefix)/man/man1
+	cp $(BIN) $(prefix)/bin/
+	cp $(MAN1) $(prefix)/man/man1
+
+clean:
+	rm -f *.1 *.txt *.ps *.pdf *.html
+
+%.1:%.txt; ./txt2man -s 1 -t $* -r $(version) $< > $@
+%.txt:%; ./$< -h 2>&1 > $@
+%.html:%.1; rman -f HTML $< > $@
+%.ps:%.1; groff -man $< > $@
+%.pdf:%.ps; ps2pdf $< > $@
diff --git a/README b/README
new file mode 100644
index 0000000..72ef620
--- /dev/null
+++ b/README
@@ -0,0 +1,17 @@
+NAME
+  txt2man
+
+DESCRIPTION
+  Txt2man converts flat ASCII text to man page format. It is a shell
+  script using gnu awk, that should run on any Unix like system.
+
+  help: txt2man -h
+
+INSTALL
+      make install	(to install under /usr/local)
+  or
+      make install prefix=path
+
+Send comments, suggestions and bug reports to mvertes at free.fr
+
+-- Marc Vertes
diff --git a/bookman b/bookman
new file mode 100755
index 0000000..11bd913
--- /dev/null
+++ b/bookman
@@ -0,0 +1,142 @@
+#!/bin/sh
+# Generate a book from man pages.
+
+# Copyright (C) 2006 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+man() {
+	cat << \EOT
+NAME
+  bookman - Generate a book from man pages
+SYNOPSIS
+  bookman [-pPxn] [-o outfile] [-a author] [-d date] [-r release]
+  [-t title] [-v volume] [-c coverfile] [manfile]
+DESCRIPTION
+  bookman compiles a set of man pages files specified by manfile
+  arguments, or if no manfile is given, filenames are read from standard
+  input.
+OPTIONS
+  -p		PDF output format.
+  -P		Postscript output format.
+  -x		X11 previewing, using gxditview(1).
+  -n		no format, output is direct gtroff intermediate format.
+  -o outfile    Output in file outfile. Default is standard output.
+  -a author	Set the author, on the cover page.
+  -d date	Set the date on the cover page.
+  -r release	Set the book name and release on the cover page.
+  -t title	Set the title on the cover page.
+  -v volume	Specify the name of the volume.
+  -c coverfile	Uses the file coverfile to generate the cover page,
+		i.e. all pages preceding the table of content. coverfile
+		must be in groff_ms(7) format.
+
+EXAMPLE
+  To build a reference manual from section 2 man, do:
+
+    $ cd /usr/man/man2
+    $ bookman -p -t 'Unix Reference Manual' * >book.pdf
+
+SEE ALSO
+  man(1), mandoc(7), groff_ms(7), groff(1), troff(1), grops(1),
+  gxditview(1), ps2pdf(1).
+AUTHOR
+  Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+post="grops"
+
+while getopts :a:c:d:mno:pPr:t:v:x opt
+do
+	case $opt in
+	a) author="$OPTARG";;
+	c) cover="$OPTARG";;
+	d) date="$OPTARG";;
+	m) man; exit;;
+	n) post="cat";;
+	o) outfile="$OPTARG";;
+	p) post="grops | ps2pdf -";;
+	P) post=grops;;
+	x) post="gxditview -";;
+	r) release="$OPTARG";;
+	t) title="$OPTARG";;
+	v) volume="$OPTARG";;
+	*) man; exit;;
+	esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+[[ $1 ]] || set -- $(while read; do echo $REPLY; done)
+
+[[ $outfile ]] && post="$post >$outfile"
+
+{
+	# Compute table of content from postscript output.
+	# Generate output in gtroff intermediate format, so
+	# it can be merged with content.
+	{
+		[[ -f $cover ]] && cat $cover || {
+			printf ".af %% i\n.P1\n"
+			printf ".OH ||%s||\n" "$volume"
+			printf ".EH ||%s||\n" "$volume"
+			printf ".OF |%s|%s|%%|\n" "$release" "$date"
+			printf ".EF |%s|%s|%%|\n" "$release" "$date"
+			printf ".TL\n%s\n" "$title"
+			printf ".AU\n%s\n.AB no\n.AE\n" "$author"
+		}
+		for f
+		do
+			case $f in
+			*.Z|*.gz) zcat$f;;
+			*.bz2)    bzcat $f;;
+			*)        cat $f;;
+			esac
+		done | groff -man -rC1 -Tps | awk '
+		$1 == "%%Page:" {page = $2}
+		/%%EndPageSetup/ {
+			getline l; getline; $0 = l $0
+			# extract first word (disgard everything
+			# outside braces).
+			sub(/^[^\(]*\(/, "")
+			gsub(/\)[^\(]*\(/, "")
+			gsub(/\\214/, "fi")
+			gsub(/\\215/, "fl")
+			sub(/\)[^\(]*/, "")
+			sub(/\\\(.*/, "")
+			if (name != $0) {
+				print (page == 1) ? ".XS 1" : ".XA " page
+				print $0
+			}
+			name = $0
+		}
+		END {print ".XE"; print ".PX"}'
+	} | groff -Z -ms | head --lines=-1
+
+	# Output content, in gtroff intermediate format.
+	for f
+	do
+		case $f in
+		*.Z|*.gz) zcat $f;;
+		*.bz2)    bzcat $f;;
+		*)        cat $f;;
+		esac
+	done | groff -Z -man -rC1 | awk 'NR >3'
+
+} | eval $post
diff --git a/bookman.1 b/bookman.1
new file mode 100644
index 0000000..296bb7a
--- /dev/null
+++ b/bookman.1
@@ -0,0 +1,79 @@
+." Text automatically generated by txt2man
+.TH bookman 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBbookman \fP- Generate a book from man pages
+.SH SYNOPSIS
+.nf
+.fam C
+\fBbookman\fP [\fB-pPxn\fP] [\fB-o\fP \fIoutfile\fP] [\fB-a\fP \fIauthor\fP] [\fB-d\fP \fIdate\fP] [\fB-r\fP \fIrelease\fP]
+[\fB-t\fP \fItitle\fP] [\fB-v\fP \fIvolume\fP] [\fB-c\fP \fIcoverfile\fP] [\fImanfile\fP]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBbookman\fP compiles a set of man pages files specified by \fImanfile\fP
+arguments, or if no \fImanfile\fP is given, filenames are read from standard
+input.
+.SH OPTIONS
+.TP
+.B
+\fB-p\fP
+PDF output format.
+.TP
+.B
+\fB-P\fP
+Postscript output format.
+.TP
+.B
+\fB-x\fP
+X11 previewing, using \fBgxditview\fP(1).
+.TP
+.B
+\fB-n\fP
+no format, output is direct gtroff intermediate format.
+.TP
+.B
+\fB-o\fP \fIoutfile\fP
+Output in file \fIoutfile\fP. Default is standard output.
+.TP
+.B
+\fB-a\fP \fIauthor\fP
+Set the \fIauthor\fP, on the cover page.
+.TP
+.B
+\fB-d\fP \fIdate\fP
+Set the \fIdate\fP on the cover page.
+.TP
+.B
+\fB-r\fP \fIrelease\fP
+Set the book name and \fIrelease\fP on the cover page.
+.TP
+.B
+\fB-t\fP \fItitle\fP
+Set the \fItitle\fP on the cover page.
+.TP
+.B
+\fB-v\fP \fIvolume\fP
+Specify the name of the \fIvolume\fP.
+.TP
+.B
+\fB-c\fP \fIcoverfile\fP
+Uses the file \fIcoverfile\fP to generate the cover page,
+i.e. all pages preceding the table of content. \fIcoverfile\fP
+must be in \fBgroff_ms\fP(7) format.
+.SH EXAMPLE
+To build a reference manual from section 2 man, do:
+.PP
+.nf
+.fam C
+    $ cd /usr/man/man2
+    $ bookman -p -t 'Unix Reference Manual' * >book.pdf
+
+.fam T
+.fi
+.SH SEE ALSO
+\fBman\fP(1), \fBmandoc\fP(7), \fBgroff_ms\fP(7), \fBgroff\fP(1), \fBtroff\fP(1), \fBgrops\fP(1),
+\fBgxditview\fP(1), \fBps2pdf\fP(1).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>
diff --git a/src2man b/src2man
new file mode 100755
index 0000000..d10eb29
--- /dev/null
+++ b/src2man
@@ -0,0 +1,185 @@
+#!/bin/sh
+# Extract manpages from C source files.
+
+# Copyright (C) 2006 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+man() {
+	cat << \EOT
+NAME
+  src2man - extract man pages from source files.
+SYNOPSIS
+  src2man [-n][-d date][-v volume][-r release] [srcfile ...]
+DESCRIPTION
+  src2man scans source file srcfile. Only C source files are supported
+  for now. Comments blocks starting by "/** num", where num is a section
+  number, are converted into a man file, using txt2man(1).
+
+  The first line of the comment block must contain the name of the
+  manpage, usually the function name, followed by a "-" and a short
+  description.  The following lines are the "DESCRIPTION" section
+  content, except if they are in upper case, in which case they define
+  a new section.
+
+  If the next line after a comment block is empty, Then no "SYNOPSIS"
+  section will be generated. Otherwise, src2man will look in the following
+  source lines for a function prototype or a type definion (struct,
+  union, typedef, ...) matching the manpage name, and include it in a
+  "SYNOPSIS" section.  This avoids to duplicate the type or function
+  prototype in the comment block.
+
+  The best place for code documentation is in the source file, where
+  the body is implemented, not the header file which only contains
+  the prototype. src2man automatically searches for the presence of a
+  prototype in the corresponding header file, and if found, will print a
+  "#include" statement in the synopsis.
+
+OPTIONS
+  -d date	Set the date of the man pages. Defaults to current date.
+  -n		No man page is created. The name of the manpages that would
+  		be created are printed.
+  -v volume	Specify the name of the volume to be printed in center header
+  		of generated manpages.
+  -r release	Specify the project name and release number for the generated
+		manpage.
+EXAMPLE
+  The following example displays C code and comments to generate a manpage
+  foobar.3:
+
+     /** 3
+      * foobar - a sample dummy function
+      * This line is now the first of the description section.
+      * Note that function parameters parm1 and parm2 are highlighted
+      * in the generated man page.
+      */
+     int foobar(char *parm1, int parm2)
+     {
+     	...
+	return 0;
+     }
+
+SEE ALSO
+  txt2man(1), bookman(1).
+AUTHOR
+  Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+nogen=0
+release=unknown
+while getopts :d:hnr:v: opt
+do
+	case $opt in
+	d) date="$OPTARG";;
+	n) nogen=1;;
+	v) volume="$OPTARG";;
+	r) release="$OPTARG";;
+	*) man; exit;;
+	esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+#
+# Extract manpages from source files. Man page content is enclosed in
+# commment blocks starting by "/** sectnum"
+#
+awk -v release="$release" -v volume="$volume" -v nogen=$nogen '
+/\/\*\* [0-9]/ {
+	sect = $2
+	getline
+	sub(/^ \* */, "  ")
+	title = $1
+	line1_after_comment = 0
+	in_struct = 0
+	name = $0
+	inc = FILENAME
+	sub(/.[cS]$/, ".h", inc)
+	found = ""
+	grep_cmd = "test -f " inc " && grep -wq " title "  " inc " \
+		   2>/dev/null && echo ok || echo nok"
+	grep_cmd | getline found
+	# description section extraction.
+	in_synop = 0
+	synop = ""
+	while (getline) {
+		if ($0 ~ / *\*\//) { # end of comment block
+			sub(/ *\*\//, "")
+			line1_after_comment = 1
+			break
+		}
+		sub(/^ \* /, "")
+		sub(/^ \*/, "")
+		if ($1 ~ /^[A-Z ]+$/ && $1 != "SYNOPSIS")
+			in_synop = 0
+		if ($1 == "SYNOPSIS") {
+			in_synop = 1
+			continue
+		}
+		if ($1 == "DESCRIPTION")
+			continue
+		if (in_synop)
+			synop = synop (synop ? "\n" : "") $0
+		else
+			desc = desc (desc ? "\n" : "") $0
+	}
+	# function prototype or struct extraction for synopsis.
+	if (! synop) {
+		while (getline) {
+			if (line1_after_comment) {
+				line1_after_comment = 0
+				if (NF == 0) 
+					break
+				split(name, tname)
+			}
+			if ((!in_struct && $1 == "struct" && $2 == tname[1]) ||
+			    (!in_struct && $2 == "struct" && $3 == tname[1])) {
+			    	in_struct = 1
+				synop = synop (synop ? "\n" : "") $0
+				continue
+			}
+			synop = synop (synop ? "\n" : "") $0
+			if (in_struct) {
+				if ($0 ~ " *" tname[1] "[; ][*]*") break
+				continue
+			}
+			if ($0 ~/\)[ \t{}\;]*$/) {
+				sub(/{[^}]}/, "", synop)
+				sub(/[ \t]*$/, "", synop)
+				if (found == "ok")
+					synop = "#include \"" inc "\"\n" synop
+				if (synop !~ /\;$/)
+					synop = synop ";"
+				break
+			}
+		}
+	}
+	print title "." sect > "/dev/stderr"
+	if (nogen) {
+		name = synop = desc = sect = ""
+		next
+	}
+	print "NAME\n" name (synop ? "\nSYNOPSIS\n  " synop : "") \
+	      "\nDESCRIPTION\n" desc "\nFILE\n  " FILENAME | \
+	      "{ echo .\\\" Extracted by src2man from " FILENAME "; \
+	      txt2man -d \"$date\" -v \"" volume "\" -r " release \
+	      " -s " sect " -t " title "; } >" title "." sect
+	name = synop = desc = sect = ""
+}
+' $*
diff --git a/src2man.1 b/src2man.1
new file mode 100644
index 0000000..4d3a94e
--- /dev/null
+++ b/src2man.1
@@ -0,0 +1,85 @@
+." Text automatically generated by txt2man
+.TH src2man 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBsrc2man \fP- extract man pages from source files.
+.SH SYNOPSIS
+.nf
+.fam C
+\fBsrc2man\fP [\fB-n\fP][\fB-d\fP date][\fB-v\fP volume][\fB-r\fP \fIrelease\fP] [\fIsrcfile\fP \.\.\.]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBsrc2man\fP scans source file \fIsrcfile\fP. Only C source files are supported
+for now. Comments blocks starting by "/** num", where num is a section
+number, are converted into a man file, using \fBtxt2man\fP(1).
+.PP
+The first line of the comment block must contain the name of the
+manpage, usually the function name, followed by a "-" and a short
+.TP
+.B
+description.
+The following lines are the "DESCRIPTION" section
+content, except if they are in upper case, in which case they define
+a new section.
+.PP
+If the next line after a comment block is empty, Then no "SYNOPSIS"
+section will be generated. Otherwise, \fBsrc2man\fP will look in the following
+source lines for a function prototype or a type definion (struct,
+union, typedef, \.\.\.) matching the manpage name, and include it in a
+.TP
+.B
+"SYNOPSIS" section.
+This avoids to duplicate the type or function
+prototype in the comment block.
+.PP
+The best place for code documentation is in the source file, where
+the body is implemented, not the header file which only contains
+the prototype. \fBsrc2man\fP automatically searches for the presence of a
+prototype in the corresponding header file, and if found, will print a
+"#include" statement in the synopsis.
+.SH OPTIONS
+.TP
+.B
+\fB-d\fP date
+Set the date of the man pages. Defaults to current date.
+.TP
+.B
+\fB-n\fP
+No man page is created. The name of the manpages that would
+be created are printed.
+.TP
+.B
+\fB-v\fP volume
+Specify the name of the volume to be printed in center header
+of generated manpages.
+.TP
+.B
+\fB-r\fP \fIrelease\fP
+Specify the project name and \fIrelease\fP number for the generated
+manpage.
+.SH EXAMPLE
+The following example displays C code and comments to generate a manpage
+foobar.3:
+.PP
+.nf
+.fam C
+     /** 3
+      * foobar - a sample dummy function
+      * This line is now the first of the description section.
+      * Note that function parameters parm1 and parm2 are highlighted
+      * in the generated man page.
+      */
+     int foobar(char *parm1, int parm2)
+     {
+        \.\.\.
+        return 0;
+     }
+
+.fam T
+.fi
+.SH SEE ALSO
+\fBtxt2man\fP(1), \fBbookman\fP(1).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>
diff --git a/txt2man b/txt2man
new file mode 100755
index 0000000..d6a0686
--- /dev/null
+++ b/txt2man
@@ -0,0 +1,383 @@
+#!/bin/sh
+test "$HOME" = ~ || exec ksh $0 "$@"    # try ksh if sh too old (not yet POSIX)
+
+# Copyright (C) 2001, 2002, 2003 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+usage()
+{
+cat << EOT
+NAME
+  txt2man - convert flat ASCII text to man page format
+SYNOPSIS
+  txt2man [-hpTX] [-t mytitle] [-P pname] [-r rel] [-s sect]
+          [-v vol] [-I txt] [-B txt] [-d date] [ifile]
+DESCRIPTION
+  txt2man converts the input text into nroff/troff standard man(7)
+  macros used to format Unix manual pages. Nice pages can be generated
+  specially for commands (section 1 or 8) or for C functions reference
+  (sections 2, 3), with the ability to recognize and format command and
+  function names, flags, types and arguments.
+
+  txt2man is also able to recognize and format sections, paragraphs,
+  lists (standard, numbered, description, nested), cross references and
+  literal display blocks.
+
+  If input file ifile is omitted, standard input is used. Result is
+  displayed on standard output.
+
+  Here is how text patterns are recognized and processed:
+  Sections    These headers are defined by a line in upper case, starting
+              column 1. If there is one or more leading spaces, a
+	      sub-section will be generated instead.
+  Paragraphs  They must be separated by a blank line, and left aligned.
+  Tag list    The item definition is separated from the item description
+              by at least 2 blank spaces, even before a new line, if
+              definition is too long. Definition will be emphasized
+              by default.
+  Bullet list  
+              Bullet list items are defined by the first word being "-"
+	      or "*" or "o".
+  Enumerated list  
+	      The first word must be a number followed by a dot.
+  Literal display blocks  
+	      This paragraph type is used to display unmodified text,
+	      for example source code. It must be separated by a blank
+	      line, and be indented. It is primarily used to format
+	      unmodified source code. It will be printed using fixed font
+	      whenever possible (troff).
+  Cross references  
+	      A cross reference (another man page) is defined by a word
+	      followed by a number in parenthesis.
+
+  Special sections:
+  NAME      The function or command name and short description are set in
+            this section.
+  SYNOPSIS  This section receives a special treatment to identify command
+            name, flags and arguments, and propagate corresponding
+            attributes later in the text. If a C like function is recognized
+	    (word immediately followed by an open parenthesis), txt2man will
+	    print function name in bold font, types in normal font, and
+	    variables in italic font. The whole section will be printed using
+	    a fixed font family (courier) whenever possible (troff).
+
+  It is a good practice to embed documentation into source code, by using
+  comments or constant text variables. txt2man allows to do that, keeping
+  the document source readable, usable even without further formatting
+  (i.e. for online help) and easy to write. The result is high quality
+  and standard complying document.
+OPTIONS
+  -h          The option -h displays help.
+  -d date     Set date in header. Defaults to current date.
+  -P pname    Set pname as project name in header. Default to uname -s.
+  -p          Probe title, section name and volume.
+  -t mytitle  Set mytitle as title of generated man page.
+  -r rel      Set rel as project name and release.
+  -s sect     Set sect as section in heading, ususally a value from 1 to 8.
+  -v vol      Set vol as volume name, i.e. "Unix user 's manual".
+  -I txt      Italicize txt in output. Can be specified more than once.
+  -B txt      Emphasize (bold) txt in output. Can be specified more than once.
+  -T          Text result previewing using PAGER, usually more(1).
+  -X          X11 result previewing using gxditview(1).
+ENVIRONMENT
+  PAGER    name of paging command, usually more(1), or less(1). If not set
+           falls back to more(1).
+EXAMPLE
+  Try this command to format this text itself:
+
+      $ txt2man -h 2>&1 | txt2man -T
+HINTS
+  To obtain an overall good formating of output document, keep paragraphs
+  indented correctly. If you have unwanted bold sections, search for
+  multiple spaces between words, which are used to identify a tag list
+  (term followed by a description). Choose also carefully the name of
+  command line or function parameters, as they will be emphasized each
+  time they are encountered in the document.
+SEE ALSO
+  man(1), mandoc(7), rman(1), groff(1), more(1), gxditview(1), troff(1).
+BUGS
+  - Automatic probe (-p option) works only if input is a regular file (i.e.
+  not stdin).
+AUTHOR
+  Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+sys=$(uname -s)
+rel=
+volume=
+section=
+title=untitled
+doprobe=
+itxt=
+btxt=
+post=cat
+while getopts :d:hpTXr:s:t:v:P:I:B: opt
+do
+	case $opt in
+	d) date=$OPTARG;;
+	r) rel=$OPTARG;;
+	t) title=$OPTARG;;
+	s) section=$OPTARG;;
+	v) volume=$OPTARG;;
+	P) sys=$OPTARG;;
+	p) doprobe=1;;
+	I) itxt="$OPTARG�$itxt";;
+	B) btxt=$OPTARG;;
+	T) post="groff -mandoc -Tlatin1 | ${PAGER:-more}";;
+	X) post="groff -mandoc -X";;
+	*) usage; exit;;
+	esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+if test "$doprobe"
+then
+	title=${1##*/}; title=${title%.txt}
+	if grep -q '#include ' $1
+	then
+		section=${section:-3}
+		volume=${volume:-"$sys Programmer's Manual"}
+	else
+		section=${section:-1}
+		volume=${volume:-"$sys Reference Manual"}
+	fi
+	# get release from path
+	rel=$(pwd | sed 's:/.*[^0-9]/::g; s:/.*::g')
+fi
+
+head=".\\\" Text automatically generated by txt2man
+.TH $title $section \"$date\" \"$rel\" \"$volume\""
+
+# All tabs converted to spaces
+expand $* | 		
+# gawk is needed because use of non standard regexp
+gawk --re-interval -v head="$head" -v itxt="$itxt" -v btxt="$btxt" '
+BEGIN {
+	print head
+	avar[1] = btxt; avar[2] = itxt
+	for (k in avar) {
+		mark = (k == 1) ? "\\fB" : "\\fI"
+		split(avar[k], tt, "�")
+		for (i in tt)
+			if (tt[i] != "")
+				subwords["\\<" tt[i] "\\>"] = mark tt[i] "\\fP"
+		for (i in tt)
+			delete tt[i]
+	}
+	for (k in avar)
+		delete avar[k]
+}
+{
+	# to avoid some side effects in regexp
+	sub(/\.\.\./, "\\.\\.\\.")
+	# remove spaces in empty lines
+	sub(/^ +$/,"")
+}
+/^[[:upper:][:space:]]+$/ {
+	# Section header
+	if ((in_bd + 0) == 1) {
+		in_bd = 0
+		print ".fam T\n.fi"
+	}
+	if (section == "SYNOPSIS") {
+		print ".fam T\n.fi"
+		type["SYNOPSIS"] = ""
+	}
+	if ($0 ~/^[^[:space:]]/)
+		print ".SH " $0
+	else
+		print ".SS" $0
+	sub(/^ +/, "")
+	section = $0
+	if (section == "SYNOPSIS") {
+		print ".nf\n.fam C"
+		in_bd = 1
+	}
+	ls = 0		# line start index
+	pls = 0		# previous line start index
+	pnzls = 0	# previous non zero line start index
+	ni = 0		# indent level
+	ind[0] = 0	# indent offset table
+	prevblankline = 0
+	next
+}
+{
+	# Compute line start index, handle start of example display block
+	pls = ls
+	if (ls != 0)
+		pnzls = ls
+	match($0, /[^ ]/)
+	ls = RSTART
+	if (pls == 0 && pnzls > 0 && ls > pnzls && $1 !~ /^[0-9\-\*\o]\.*$/) {
+		# example display block
+		if (prevblankline == 1) {
+			print ".PP"
+			prevblankline = 0
+		}
+		print ".nf\n.fam C"
+		in_bd = 1
+		eoff = ls
+	}
+	if (ls > 0 && ind[0] == 0)
+		ind[0] = ls
+}
+(in_bd + 0) == 1 {
+	# In block display
+	if (section == "SYNOPSIS")
+		;
+	else if (ls != 0 && ls < eoff) {
+		# End of litteral display block
+		in_bd = 0
+		print ".fam T\n.fi"
+	} else { print; next }
+}
+section == "NAME" {
+	$1 = "\\fB" $1
+	sub(/ \- /, " \\fP- ")
+}
+section == "SYNOPSIS" {
+	# Identify arguments of fcts and cmds
+	if (type["SYNOPSIS"] == "") {
+		if ($0 ~ /\(/)
+			type["SYNOPSIS"] = "fct"
+		else if ($1 == "struct" || $2 == "struct")
+			type["SYNOPSIS"] = "struct"
+		else if ($1 && $1 !~ /^#|typedef|struct|union|enum/)
+			type["SYNOPSIS"] = "cmd"
+	}
+	if (type["SYNOPSIS"] == "cmd") {
+		# Line is a command line
+		if ($1 !~ /^\[/) {
+			b = $1
+			sub(/^\*/, "", b)
+			subwords["\\<" b "\\>"] = "\\fB" b "\\fP"
+		}
+		for (i = 2; i <= NF; i++) {
+			a = $i
+			gsub(/[\[\]\|]/, "", a)
+			if (a ~ /^[^\-]/)
+				subwords["\\<" a "\\>"] = "\\fI" a "\\fP"
+		}
+	} else if (type["SYNOPSIS"] == "fct") {
+		# Line is a C function definition
+		if ($1 == "typedef") {
+			if ($0 !~ /\(\*/)
+				subwords["\\<" $2 "\\>"] = "\\fI" $2 "\\fP"
+		} else if ($1 == "#define")
+			subwords["\\<" $2 "\\>"] = "\\fI" $2 "\\fP"
+		for (i = 1; i <= NF; i++) {
+			if ($i ~ /[\,\)]\;*$/) {
+				a = $i
+				sub(/.*\(/, "", a)
+				gsub(/\W/, "", a)
+				subwords["\\<" a "\\>"] = "\\fI" a "\\fP"
+			}
+		}
+	}
+}
+{
+	# protect dots inside words
+	while ($0  ~ /\w\.\w/)
+		sub(/\./, "_dOt_")
+	# identify func calls and cross refs
+	for (i = 1; i <= NF; i++) {
+		b = $i
+		sub(/^\*/, "", b)
+		if ((a = index(b, ")(")) > 3) {
+			w = substr(b, 3, a - 3)
+			subwords["\\<" w "\\>"] = "\\fI" w "\\fP"
+		}
+		if ((a = index(b, "(")) > 1) {
+			w = substr(b, 1, a - 1)
+			subwords["\\<" w "\\("] = "\\fB" w "\\fP("
+		}
+	}
+	# word attributes
+	for (i in subwords)
+		gsub(i, subwords[i])
+	# shell options
+	gsub(/\B\-+\w+(\-\w+)*/, "\\fB&\\fP")
+	# unprotect dots inside words
+	gsub(/_dOt_/, ".")
+
+	if (section == "SYNOPSIS") {
+		sub(/^  /, "")
+		print
+		next
+	}
+	if (match($0, /[^ ]  +/) > 0) {
+		# tag list item
+		adjust_indent()
+		tag = substr($0, 1, RSTART)
+		sub(/^ */, "", tag)
+		if (RSTART+RLENGTH < length())
+			$0 = substr($0, RSTART + RLENGTH)
+		else
+			$0 = ""
+		print ".TP\n.B"
+		print tag
+		prevblankline = 0
+		if (NF == 0)
+			next
+	} else if ($1 == "-"||$1 == "o"||$1 == "*") {
+		# bullet list item
+		adjust_indent()
+		print ".IP \\(bu 3"
+		prevblankline = 0
+		$1 = ""
+	} else if ($1 ~ /^[0-9]+[\).]$/) {
+		# enum list item
+		adjust_indent()
+		print ".IP " $1 " 4"
+		prevblankline = 0
+		$1 = ""
+	} else if (pls == 0) {
+		# new paragraph
+		adjust_indent()
+	} else if (NF == 0) {
+		# blank line
+		prevblankline = 1
+		next
+	} else
+		prevblankline = 0
+	# flush vertical space
+	if (prevblankline == 1) {
+		print ".PP"
+		prevblankline = 0
+	}
+	if (section != "SYNOPSIS" || $0 ~ /^ {1,4}/)
+		sub(/ */,"")
+	print
+}
+
+function adjust_indent()
+{
+	if (ls > ind[ni]) {
+		ind[++ni] = ls
+		print ".RS"
+	} else if (ls < ind[ni]) {
+		while (ls < ind[ni]) {
+			ni--
+			print ".RE"
+		}
+	}
+}
+' | eval $post
diff --git a/txt2man.1 b/txt2man.1
new file mode 100644
index 0000000..ac4b96d
--- /dev/null
+++ b/txt2man.1
@@ -0,0 +1,168 @@
+." Text automatically generated by txt2man
+.TH txt2man 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBtxt2man \fP- convert flat ASCII text to man page format
+.SH SYNOPSIS
+.nf
+.fam C
+\fBtxt2man\fP [\fB-hpTX\fP] [\fB-t\fP \fImytitle\fP] [\fB-P\fP \fIpname\fP] [\fB-r\fP \fIrel\fP] [\fB-s\fP \fIsect\fP]
+        [\fB-v\fP \fIvol\fP] [\fB-I\fP \fItxt\fP] [\fB-B\fP \fItxt\fP] [\fB-d\fP \fIdate\fP] [\fIifile\fP]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBtxt2man\fP converts the input text into nroff/troff standard \fBman\fP(7)
+macros used to format Unix manual pages. Nice pages can be generated
+specially for commands (section 1 or 8) or for C functions reference
+(sections 2, 3), with the ability to recognize and format command and
+function names, flags, types and arguments.
+.PP
+\fBtxt2man\fP is also able to recognize and format sections, paragraphs,
+lists (standard, numbered, description, nested), cross references and
+literal display blocks.
+.PP
+If input file \fIifile\fP is omitted, standard input is used. Result is
+displayed on standard output.
+.PP
+Here is how text patterns are recognized and processed:
+.TP
+.B
+Sections
+These headers are defined by a line in upper case, starting
+column 1. If there is one or more leading spaces, a
+sub-section will be generated instead.
+.TP
+.B
+Paragraphs
+They must be separated by a blank line, and left aligned.
+.TP
+.B
+Tag list
+The item definition is separated from the item description
+by at least 2 blank spaces, even before a new line, if
+definition is too long. Definition will be emphasized
+by default.
+.TP
+.B
+Bullet list
+Bullet list items are defined by the first word being "-"
+or "*" or "o".
+.TP
+.B
+Enumerated list
+The first word must be a number followed by a dot.
+.TP
+.B
+Literal display blocks
+This paragraph type is used to display unmodified text,
+for example source code. It must be separated by a blank
+line, and be indented. It is primarily used to format
+unmodified source code. It will be printed using fixed font
+whenever possible (troff).
+.TP
+.B
+Cross references
+A cross reference (another man page) is defined by a word
+followed by a number in parenthesis.
+.PP
+Special sections:
+.TP
+.B
+NAME
+The function or command name and short description are set in
+this section.
+.TP
+.B
+SYNOPSIS
+This section receives a special treatment to identify command
+name, flags and arguments, and propagate corresponding
+attributes later in the text. If a C like function is recognized
+(word immediately followed by an open parenthesis), \fBtxt2man\fP will
+print function name in bold font, types in normal font, and
+variables in italic font. The whole section will be printed using
+a fixed font family (courier) whenever possible (troff).
+.PP
+It is a good practice to embed documentation into source code, by using
+comments or constant text variables. \fBtxt2man\fP allows to do that, keeping
+the document source readable, usable even without further formatting
+(i.e. for online help) and easy to write. The result is high quality
+and standard complying document.
+.SH OPTIONS
+.TP
+.B
+\fB-h\fP
+The option \fB-h\fP displays help.
+.TP
+.B
+\fB-d\fP \fIdate\fP
+Set \fIdate\fP in header. Defaults to current \fIdate\fP.
+.TP
+.B
+\fB-P\fP \fIpname\fP
+Set \fIpname\fP as project name in header. Default to uname \fB-s\fP.
+.TP
+.B
+\fB-p\fP
+Probe title, section name and volume.
+.TP
+.B
+\fB-t\fP \fImytitle\fP
+Set \fImytitle\fP as title of generated man page.
+.TP
+.B
+\fB-r\fP \fIrel\fP
+Set \fIrel\fP as project name and release.
+.TP
+.B
+\fB-s\fP \fIsect\fP
+Set \fIsect\fP as section in heading, ususally a value from 1 to 8.
+.TP
+.B
+\fB-v\fP \fIvol\fP
+Set \fIvol\fP as volume name, i.e. "Unix user 's manual".
+.TP
+.B
+\fB-I\fP \fItxt\fP
+Italicize \fItxt\fP in output. Can be specified more than once.
+.TP
+.B
+\fB-B\fP \fItxt\fP
+Emphasize (bold) \fItxt\fP in output. Can be specified more than once.
+.TP
+.B
+\fB-T\fP
+Text result previewing using PAGER, usually \fBmore\fP(1).
+.TP
+.B
+\fB-X\fP
+X11 result previewing using \fBgxditview\fP(1).
+.SH ENVIRONMENT
+.TP
+.B
+PAGER
+name of paging command, usually \fBmore\fP(1), or \fBless\fP(1). If not set
+falls back to \fBmore\fP(1).
+.SH EXAMPLE
+Try this command to format this text itself:
+.PP
+.nf
+.fam C
+      $ txt2man -h 2>&1 | txt2man -T
+.fam T
+.fi
+.SH HINTS
+To obtain an overall good formating of output document, keep paragraphs
+indented correctly. If you have unwanted bold sections, search for
+multiple spaces between words, which are used to identify a tag list
+(term followed by a description). Choose also carefully the name of
+command line or function parameters, as they will be emphasized each
+time they are encountered in the document.
+.SH SEE ALSO
+\fBman\fP(1), \fBmandoc\fP(7), \fBrman\fP(1), \fBgroff\fP(1), \fBmore\fP(1), \fBgxditview\fP(1), \fBtroff\fP(1).
+.SH BUGS
+.IP \(bu 3
+Automatic probe (\fB-p\fP option) works only if input is a regular file (i.e.
+not stdin).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/txt2man.git



More information about the Reproducible-commits mailing list